diff --git a/_common/github.js b/_common/github.js index 81056bb..a011d18 100644 --- a/_common/github.js +++ b/_common/github.js @@ -61,20 +61,32 @@ async function getAllReleases( } function transformReleases(release) { - release['assets'].forEach(function (asset) { + for (let asset of release['assets']) { let name = asset['name']; + let date = release['published_at']?.replace(/T.*/, ''); + let download = asset['browser_download_url']; + + // TODO tags aren't always semver / sensical + let version = release['tag_name']; + let channel; + if (release['prerelease']) { + // -rcX, -preview, -beta, etc will be checked in _webi/normalize.js + channel = 'beta'; + } + let lts = /(\b|_)(lts)(\b|_)/.test(release['tag_name']); + all.releases.push({ name: name, - version: release['tag_name'], // TODO tags aren't always semver / sensical - lts: /(\b|_)(lts)(\b|_)/.test(release['tag_name']), - channel: !release['prerelease'] ? 'stable' : 'beta', - date: (release['published_at'] || '').replace(/T.*/, ''), + version: version, + lts: lts, + channel: channel, + date: date, os: '', // will be guessed by download filename arch: '', // will be guessed by download filename ext: '', // will be normalized - download: asset['browser_download_url'], + download: download, }); - }); + } } return all; diff --git a/_webi/normalize.js b/_webi/normalize.js index ed4f5cd..5d5c67e 100644 --- a/_webi/normalize.js +++ b/_webi/normalize.js @@ -72,7 +72,7 @@ function normalize(all) { formats: {}, }; - all.releases.forEach(function (rel) { + for (let rel of all.releases) { /* jshint maxcomplexity:25 */ rel.version = rel.version.replace(/^v/i, ''); if (!rel.name) { @@ -85,7 +85,7 @@ function normalize(all) { }) || 'unknown'; } // Hacky-doo for musl - // TODO some sort of glibc vs musl tag? + // TODO 'libc' some sort of glibc vs musl tag? if (!rel._musl_native) { if (!rel._musl) { if (/(\b|\.|_|-)(musl)(\b|\.|_|-)/.test(rel.download)) { @@ -139,10 +139,28 @@ function normalize(all) { } supported.formats[tarExt || rel.ext] = true; + if (!rel.channel) { + // basically like this: (+.-_)(beta|rc)(0-9)(+.-_) + // matches: + // - v1.0-beta + // - v1.0-beta1.1 + // - v1.0-beta-11 + // won't match: + // - v1.0beta + // - v1.0-beta1b + let isBetaRe = /(\b|_)(preview|rc|beta|alpha)(\d+)(\b|_)/; + let isBeta = isBetaRe.test(rel.name); + if (isBeta) { + rel.channel = 'beta'; + } else { + rel.channel = 'stable'; + } + } + if (all.download) { rel.download = all.download.replace(/{{ download }}/, rel.download); } - }); + } all.oses = Object.keys(supported.oses).filter(function (name) { return maps.oses[name];