diff --git a/_webi/releases.js b/_webi/releases.js index ecbc959..707efcf 100644 --- a/_webi/releases.js +++ b/_webi/releases.js @@ -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); diff --git a/_webi/serve-installer.js b/_webi/serve-installer.js index 337be57..2d914f1 100644 --- a/_webi/serve-installer.js +++ b/_webi/serve-installer.js @@ -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); -}; +} diff --git a/_webi/transform-releases.js b/_webi/transform-releases.js index 3d1fa02..81789d3 100644 --- a/_webi/transform-releases.js +++ b/_webi/transform-releases.js @@ -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;