fix: allow installers without releases

This commit is contained in:
AJ ONeal
2023-01-30 07:16:00 +00:00
parent bab564bdeb
commit 90a919736b
3 changed files with 28 additions and 20 deletions
+3 -1
View File
@@ -13,7 +13,9 @@ Releases.get = async function (pkgdir) {
try {
get = require(path.join(pkgdir, 'releases.js'));
} catch (e) {
throw new Error('no releases.js for', pkgdir.split(/[\/\\]+/).pop());
let err = new Error('no releases.js for', pkgdir.split(/[\/\\]+/).pop());
err.code = 'E_NO_RELEASE';
throw err;
}
let all = await get(request);
+4 -9
View File
@@ -11,14 +11,9 @@ var getReleases = require('./transform-releases.js');
var installersDir = path.join(__dirname, '..');
module.exports = async function serveInstaller(
baseurl,
ua,
pkg,
tag,
ext,
formats,
) {
serveInstaller.serveInstaller = serveInstaller;
module.exports = serveInstaller;
async function serveInstaller(baseurl, ua, pkg, tag, ext, formats) {
// TODO put some of this in a middleware? or common function?
var ver = tag.replace(/^v/, '');
@@ -89,4 +84,4 @@ module.exports = async function serveInstaller(
return Releases.renderPowerShell(pkgdir, rel, opts);
}
return Releases.renderBash(pkgdir, rel, opts);
};
}
+21 -10
View File
@@ -88,16 +88,27 @@ async function getCachedReleases(pkg) {
// workaround for request timeout seeming to not work
let complete = false;
await Promise.race([
Releases.get(pkgdir).then(function (all) {
// Note: it is possible for slightly older data
// to replace slightly newer data, but this is better
// than being in a cycle where release updates _always_
// take longer than expected.
//console.debug('DOWNLOADED NEW "%s" releases', pkg);
cache[pkg].updatedAt = Date.now();
cache[pkg].all = all;
complete = true;
}),
Releases.get(pkgdir)
.then(function (all) {
// Note: it is possible for slightly older data
// to replace slightly newer data, but this is better
// than being in a cycle where release updates _always_
// take longer than expected.
//console.debug('DOWNLOADED NEW "%s" releases', pkg);
cache[pkg].updatedAt = Date.now();
cache[pkg].all = all;
complete = true;
})
.catch(function (err) {
if ('E_NO_RELEASE' === err.code) {
cache[pkg].updatedAt = Date.now();
cache[pkg].all = { download: '', releases: [] };
complete = true;
return;
}
throw err;
}),
sleep(5000).then(function () {
if (complete) {
return;