mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-02-14 17:49:53 +00:00
94 lines
2.1 KiB
JavaScript
94 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
let ltsRe = /GnuPG-(2\.2\.[\d\.]+)/;
|
|
|
|
function createRssMatcher() {
|
|
return new RegExp(
|
|
'<link>(https://sourceforge\\.net/projects/gpgosx/files/GnuPG-([\\d\\.]+)\\.dmg/download)</link>',
|
|
'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) {
|
|
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);
|
|
}
|
|
let fileversion = segs.join('.');
|
|
|
|
return {
|
|
name: parts[1],
|
|
version: version,
|
|
_version: fileversion,
|
|
// all go versions >= 1.0.0 are effectively LTS
|
|
lts: isLts,
|
|
channel: 'stable',
|
|
// TODO <pubDate>Sat, 19 Nov 2016 16:17:33 UT</pubDate>
|
|
date: '1970-01-01', // the world may never know
|
|
os: 'macos',
|
|
arch: 'amd64',
|
|
ext: 'dmg',
|
|
download: link,
|
|
};
|
|
})
|
|
.filter(Boolean);
|
|
|
|
return {
|
|
_names: ['GnuPG', 'gpgosx'],
|
|
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));
|
|
});
|
|
}
|