X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=gpg%2Freleases.js;fp=gpg%2Freleases.js;h=7ab8f5ff855f825f005f9ceebbabe03e8da651e0;hb=5394796d1a95df63ef704e566f55c3b8d9262cce;hp=0000000000000000000000000000000000000000;hpb=3360eeefdf21c24a8a63f78621e991d58b404b53;p=webi-installers%2F.git diff --git a/gpg/releases.js b/gpg/releases.js new file mode 100644 index 0000000..7ab8f5f --- /dev/null +++ b/gpg/releases.js @@ -0,0 +1,91 @@ +'use strict'; + +let ltsRe = /GnuPG-(2\.2\.[\d\.]+)/; + +function createRssMatcher() { + return new RegExp( + '(https://sourceforge\\.net/projects/gpgosx/files/GnuPG-([\\d\\.]+)\\.dmg/download)', + 'g' + ); +} + +function createUrlMatcher() { + return new RegExp( + 'https://sourceforge\\.net/projects/gpgosx/files/(GnuPG-([\\d\\.]+)\\.dmg)/download', + '' + ); +} + +async function getRawReleases(request) { + let matcher = createRssMatcher(); + + let resp = await request({ + url: 'https://sourceforge.net/projects/gpgosx/rss?path=/' + }); + let links = []; + for (;;) { + let m = matcher.exec(resp.body); + if (!m) { + break; + } + links.push(m[1]); + } + return links; +} + +function transformReleases(links) { + //console.log(JSON.stringify(links, null, 2)); + //console.log(links.length); + + let matcher = createUrlMatcher(); + + let releases = links + .map(function (link) { + // strip 'go' prefix, standardize version + let isLts = ltsRe.test(link); + let parts = link.match(matcher); + if (!parts || !parts[2]) { + return null; + } + let segs = parts[2].split('.'); + let version = segs.slice(0, 3).join('.'); + if (segs.length > 3) { + version += '+' + segs.slice(3); + } + + return { + name: parts[1], + version: version, + // all go versions >= 1.0.0 are effectively LTS + lts: isLts, + channel: 'stable', + // TODO Sat, 19 Nov 2016 16:17:33 UT + date: '1970-01-01', // the world may never know + os: 'macos', + arch: 'amd64', + ext: 'dmg', + download: link + }; + }) + .filter(Boolean); + + return { + releases: releases + }; +} + +async function getAllReleases(request) { + let releases = await getRawReleases(request); + let all = transformReleases(releases); + return all; +} + +module.exports = getAllReleases; + +if (module === require.main) { + getAllReleases(require('@root/request')).then(function (all) { + all = require('../_webi/normalize.js')(all); + all.releases = all.releases.slice(0, 10000); + console.info(JSON.stringify(all, null, 2)); + }); +}