diff --git a/src/admin/versions.js b/src/admin/versions.js index 286c6de5cbd3..607315b75d38 100644 --- a/src/admin/versions.js +++ b/src/admin/versions.js @@ -10,8 +10,8 @@ let versionCacheLastModified = ''; const isPrerelease = /^v?\d+\.\d+\.\d+-.+$/; -function getLatestVersion(callback) { - var headers = { +function getLatestRelease(page, callback) { + const headers = { Accept: 'application/vnd.github.v3+json', 'User-Agent': encodeURIComponent('NodeBB Admin Control Panel/' + meta.config.title), }; @@ -19,8 +19,7 @@ function getLatestVersion(callback) { if (versionCacheLastModified) { headers['If-Modified-Since'] = versionCacheLastModified; } - - request('https://api.github.com/repos/NodeBB/NodeBB/tags', { + request('https://api.github.com/repos/NodeBB/NodeBB/tags?page=' + page, { json: true, headers: headers, timeout: 1000, @@ -34,7 +33,7 @@ function getLatestVersion(callback) { } if (res.statusCode !== 200) { - return callback(Error(res.statusMessage)); + return callback(new Error(res.statusMessage)); } releases = releases.filter(function (version) { @@ -45,6 +44,9 @@ function getLatestVersion(callback) { return semver.lt(a, b) ? 1 : -1; }); + if (!releases.length) { + return getLatestRelease(page + 1, callback); + } versionCache = releases[0]; versionCacheLastModified = res.headers['last-modified']; @@ -52,6 +54,10 @@ function getLatestVersion(callback) { }); } +function getLatestVersion(callback) { + getLatestRelease(1, callback); +} + exports.getLatestVersion = getLatestVersion; exports.isPrerelease = isPrerelease;