Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 54 additions & 56 deletions sites/main-site/src/pages/nextflow_version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,65 +3,63 @@ import { octokit } from '@components/octokit';
import type { OctokitResponse } from '@octokit/types';

export const GET: APIRoute = async ({ params, request }) => {
try {
// get all releases as versions, go through all release pages

const versions: {}[] = [];
let page = 1;
let releases: OctokitResponse<any>;
do {
releases = await octokit.request('GET /repos/{owner}/{repo}/releases', {
owner: 'nextflow-io',
repo: 'nextflow',
page,
});
versions.push(...releases.data);
page++;
} while (releases.headers.link?.includes('rel="next"'));

const formattedVersions = versions.map((version: any) => ({
version: version['tag_name'],
isEdge: version['prerelease'],
downloadUrl: version['assets'][0] && version['assets'][0]['browser_download_url'],
downloadUrlAll: version['assets'][1] && version['assets'][1]['browser_download_url'],
published_at: version['published_at'],
})).sort((a: any, b: any) => { // sort version by version number, by removing "-edge" suffices and then comparing semver
const aVersion = a['version'].replace('-edge', '').replace('v', '');
const bVersion = b['version'].replace('-edge', '').replace('v', '');
// check first major, then minor, then patch
const aVersionSplit = aVersion.split('.');
const bVersionSplit = bVersion.split('.');
for (let i = 0; i < 3; i++) {
if (parseInt(aVersionSplit[i]) > parseInt(bVersionSplit[i])) {
return -1;
} else if (parseInt(aVersionSplit[i]) < parseInt(bVersionSplit[i])) {
return 1;
}
}
return 0;
// get all releases as versions, go through all release pages
const versions: {}[] = [];
let page = 1;
let releases: OctokitResponse<any>;
do {
releases = await octokit.request('GET /repos/{owner}/{repo}/releases', {
owner: 'nextflow-io',
repo: 'nextflow',
page,
});
versions.push(...releases.data);
page++;
} while (releases.headers.link?.includes('rel="next"'));

return new Response(
JSON.stringify({
latest:{
stable: formattedVersions.find((version: any) => !version.isEdge),
edge: formattedVersions.find((version: any) => version.isEdge),
everything: formattedVersions[0],
},
versions: formattedVersions,
}), {
status: 200,
headers: {
"Content-Type": "application/json"
const formattedVersions = versions.map((version: any) => ({
version: version['tag_name'],
isEdge: version['prerelease'],
downloadUrl: version['assets'][0] && version['assets'][0]['browser_download_url'],
downloadUrlAll: version['assets'][1] && version['assets'][1]['browser_download_url'],
published_at: version['published_at'],
})).sort((a: any, b: any) => { // sort version by version number, by removing "-edge" suffices and then comparing semver
const aVersion = a['version'].replace('-edge', '').replace('v', '');
const bVersion = b['version'].replace('-edge', '').replace('v', '');
// check first major, then minor, then patch
const aVersionSplit = aVersion.split('.');
const bVersionSplit = bVersion.split('.');
for (let i = 0; i < 3; i++) {
if (parseInt(aVersionSplit[i]) > parseInt(bVersionSplit[i])) {
return -1;
} else if (parseInt(aVersionSplit[i]) < parseInt(bVersionSplit[i])) {
return 1;
}
}
}
);
} catch (error) {
return new Response(
JSON.stringify({
error: error.message,
}),
{ status: 500 },
return 0;
});

// Fail if no data. setup-nextflow action depends on this file.
if (formattedVersions.length === 0) {
throw new Error(
'nextflow_version: GitHub returned no Nextflow releases; refusing to build an empty payload.',
);
}

return new Response(
JSON.stringify({
latest: {
stable: formattedVersions.find((version: any) => !version.isEdge),
edge: formattedVersions.find((version: any) => version.isEdge),
everything: formattedVersions[0],
},
versions: formattedVersions,
}),
{
status: 200,
headers: {
"Content-Type": "application/json",
},
},
);
};
Loading