feat: Add nf-core website API wrapper

Basically, a stand-in for OctoKit, but smarter.
This commit is contained in:
Thomas A. Christensen II 2024-02-02 10:40:23 -06:00
parent a1e3fd897a
commit ba9bc8bd26
Signed by: millironx
GPG key ID: B7044A3432851F64

View file

@ -0,0 +1,44 @@
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<object> {
// 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<NextflowRelease[]> {
const version_dataset = await fetch_nextflow_versions_data()
const versions = version_dataset["versions"]
const nextflow_releases: NextflowRelease[] = []
for (const element of versions) {
const release = element as NextflowRelease
nextflow_releases.push(release)
}
return nextflow_releases
}
export async function get_latest_nextflow_version(
flavor: string
): Promise<NextflowRelease> {
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
}