3 let ltsRe = /GnuPG-(2\.2\.[\d\.]+)/;
5 function createRssMatcher() {
7 '<link>(https://sourceforge\\.net/projects/gpgosx/files/GnuPG-([\\d\\.]+)\\.dmg/download)</link>',
12 function createUrlMatcher() {
14 'https://sourceforge\\.net/projects/gpgosx/files/(GnuPG-([\\d\\.]+)\\.dmg)/download',
19 async function getRawReleases(request) {
20 let matcher = createRssMatcher();
22 let resp = await request({
23 url: 'https://sourceforge.net/projects/gpgosx/rss?path=/'
27 let m = matcher.exec(resp.body);
36 function transformReleases(links) {
37 //console.log(JSON.stringify(links, null, 2));
38 //console.log(links.length);
40 let matcher = createUrlMatcher();
43 .map(function (link) {
44 // strip 'go' prefix, standardize version
45 let isLts = ltsRe.test(link);
46 let parts = link.match(matcher);
47 if (!parts || !parts[2]) {
50 let segs = parts[2].split('.');
51 let version = segs.slice(0, 3).join('.');
52 if (segs.length > 3) {
53 version += '+' + segs.slice(3);
59 // all go versions >= 1.0.0 are effectively LTS
62 // TODO <pubDate>Sat, 19 Nov 2016 16:17:33 UT</pubDate>
63 date: '1970-01-01', // the world may never know
77 async function getAllReleases(request) {
78 let releases = await getRawReleases(request);
79 let all = transformReleases(releases);
83 module.exports = getAllReleases;
85 if (module === require.main) {
86 getAllReleases(require('@root/request')).then(function (all) {
87 all = require('../_webi/normalize.js')(all);
88 all.releases = all.releases.slice(0, 10000);
89 console.info(JSON.stringify(all, null, 2));