mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-08 08:32:53 +01:00
* axios migration * controller tests * add missing deps * feeds * remove unused async * flags * locale-detect * messaging/middleware * remove log * meta * plugins * posts * search * topics/thumbs * user/emails * uploads.js * socket.io * cleaunup * test native fetch * cleanup * increase engine to 18 fix remaining tests * remove testing file * fix comments,typo * revert debug
45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
const request = require('../request');
|
|
const meta = require('../meta');
|
|
|
|
let versionCache = '';
|
|
let versionCacheLastModified = '';
|
|
|
|
const isPrerelease = /^v?\d+\.\d+\.\d+-.+$/;
|
|
const latestReleaseUrl = 'https://api.github.com/repos/NodeBB/NodeBB/releases/latest';
|
|
|
|
async function getLatestVersion() {
|
|
const headers = {
|
|
Accept: 'application/vnd.github.v3+json',
|
|
'User-Agent': encodeURIComponent(`NodeBB Admin Control Panel/${meta.config.title}`),
|
|
};
|
|
|
|
if (versionCacheLastModified) {
|
|
headers['If-Modified-Since'] = versionCacheLastModified;
|
|
}
|
|
|
|
const { body: latestRelease, response } = await request.get(latestReleaseUrl, {
|
|
headers: headers,
|
|
timeout: 2000,
|
|
});
|
|
if (response.statusCode === 304) {
|
|
return versionCache;
|
|
}
|
|
if (response.statusCode !== 200) {
|
|
throw new Error(response.statusText);
|
|
}
|
|
if (!latestRelease || !latestRelease.tag_name) {
|
|
throw new Error('[[error:cant-get-latest-release]]');
|
|
}
|
|
const tagName = latestRelease.tag_name.replace(/^v/, '');
|
|
versionCache = tagName;
|
|
versionCacheLastModified = response.headers['last-modified'];
|
|
return versionCache;
|
|
}
|
|
|
|
exports.getLatestVersion = getLatestVersion;
|
|
exports.isPrerelease = isPrerelease;
|
|
|
|
require('../promisify')(exports);
|