diff --git a/src/nf-core-api-wrapper.ts b/src/nf-core-api-wrapper.ts new file mode 100644 index 0000000..2408d42 --- /dev/null +++ b/src/nf-core-api-wrapper.ts @@ -0,0 +1,45 @@ +import { info } from "@actions/core" +import { downloadTool } from "@actions/tool-cache" +import retry from "async-retry" +import { readFileSync } from "fs" + +import { NextflowRelease } from "./nextflow-release" + +async function fetch_nextflow_versions_data(): Promise { + // Occasionally the connection is reset for unknown reasons + // In those cases, retry the download + const versionsFile = await retry( + async () => { + return await downloadTool("https://nf-co.re/nextflow_version") + }, + { + retries: 5, + onRetry: (err: Error) => { + info(`Download of versions.json failed, trying again. Error: ${err}`) + } + } + ) + + return JSON.parse(readFileSync(versionsFile).toString()) +} + +export async function get_nextflow_versions(): Promise { + const version_dataset = await fetch_nextflow_versions_data() + const versions = version_dataset["versions"] + const nextflow_releases: NextflowRelease[] = [] + // eslint-disable-next-line github/array-foreach + versions.array.forEach(element => { + const release = element as NextflowRelease + nextflow_releases.push(release) + }) + return nextflow_releases +} + +export async function get_latest_nextflow_version( + flavor: string +): Promise { + const version_dataset = await fetch_nextflow_versions_data() + const latest_versions = version_dataset["latest"] + const latest_version = latest_versions[flavor] as NextflowRelease + return latest_version +}