mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 02:06:01 +00:00
75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
const axios = require('axios');
|
|
const fs = require('fs');
|
|
const fsp = require('fs/promises');
|
|
const semver = require('semver');
|
|
const currentVersion = require('../currentVersion');
|
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
|
const { storageReadConfig } = require('../controllers/storageDb');
|
|
|
|
const logger = getLogger('cloudUpgrade');
|
|
|
|
async function checkCloudUpgrade() {
|
|
try {
|
|
if (process.env.STORAGE_DATABASE) {
|
|
const settings = await storageReadConfig('settings');
|
|
if (settings['cloud.useAutoUpgrade'] != 1) {
|
|
// auto-upgrade not allowed
|
|
return;
|
|
}
|
|
}
|
|
|
|
const resp = await axios.default.get('https://api.github.com/repos/dbgate/dbgate/releases/latest');
|
|
const json = resp.data;
|
|
const version = json.name.substring(1);
|
|
let cloudDownloadedVersion = null;
|
|
try {
|
|
cloudDownloadedVersion = await fsp.readFile(process.env.CLOUD_UPGRADE_FILE + '.version', 'utf-8');
|
|
} catch (err) {
|
|
cloudDownloadedVersion = null;
|
|
}
|
|
if (
|
|
semver.gt(version, currentVersion.version) &&
|
|
(!cloudDownloadedVersion || semver.gt(version, cloudDownloadedVersion))
|
|
) {
|
|
logger.info(`New version available: ${version}`);
|
|
const zipUrl = json.assets.find(x => x.name == 'cloud-build.zip').browser_download_url;
|
|
|
|
const writer = fs.createWriteStream(process.env.CLOUD_UPGRADE_FILE);
|
|
|
|
const response = await axios.default({
|
|
url: zipUrl,
|
|
method: 'GET',
|
|
responseType: 'stream',
|
|
});
|
|
|
|
response.data.pipe(writer);
|
|
|
|
await new Promise((resolve, reject) => {
|
|
writer.on('finish', resolve);
|
|
writer.on('error', reject);
|
|
});
|
|
await fsp.writeFile(process.env.CLOUD_UPGRADE_FILE + '.version', version);
|
|
|
|
logger.info(`Downloaded new version from ${zipUrl}`);
|
|
} else {
|
|
logger.info(
|
|
`Checked version ${version} is not newer than ${
|
|
cloudDownloadedVersion ?? currentVersion.version
|
|
}, upgrade skippped`
|
|
);
|
|
}
|
|
} catch (err) {
|
|
logger.error(extractErrorLogData(err), 'Error checking cloud upgrade');
|
|
}
|
|
}
|
|
|
|
function startCloudUpgradeTimer() {
|
|
// at first in 5 seconds
|
|
setTimeout(checkCloudUpgrade, 5000);
|
|
|
|
// hourly
|
|
setInterval(checkCloudUpgrade, 60 * 60 * 1000);
|
|
}
|
|
|
|
module.exports = startCloudUpgradeTimer;
|