export async function fetchReleaseData()

in src/server/queryUtils.ts [481:528]


export async function fetchReleaseData(): Promise<ReleaseData> {
  let response = await promiseRequest({
    uri: `${FX_VERSIONS_URI}?${Date.now()}`,
    method: "GET",
  });

  const rv: ReleaseData = {
    nightly: { version: response.FIREFOX_NIGHTLY.split(".")[0] },
    beta: { version: response.FIREFOX_DEVEDITION.split(".")[0] },
    release: { version: response.LATEST_FIREFOX_VERSION.split(".")[0] },
  } as any;
  rv.nightly.statusFlag = `cf_status_firefox${rv.nightly.version}`;
  rv.beta.statusFlag = `cf_status_firefox${rv.beta.version}`;
  rv.release.statusFlag = `cf_status_firefox${rv.release.version}`;

  for (const key of ["beta", "release"]) {
    try {
      response = await promiseRequest({
        uri: BUILDHUB_URI,
        method: "POST",
        body: JSON.stringify({
          post_filter: {
            bool: {
              must: [
                { term: { "target.version": `${rv[key].version}.0a1` } },
                { term: { "target.channel": "nightly" } },
                { term: { "source.product": "firefox" } },
              ],
            },
          },
          size: 1,
          sort: [{ "download.date": "asc" }],
        }),
      });
      if (response.hits.hits.length !== 1) {
        throw new Error(
          `Failed to determine build date for v${rv[key].version}`
        );
      }
    } catch (error) {
      console.log(error);
      return rv;
    }
    rv[key].date = response.hits.hits[0]._source.download.date.slice(0, 10);
  }

  return rv;
}