preliminary updater hook
This commit is contained in:
parent
e5b4ba6c84
commit
b6c6b81e73
|
@ -28,6 +28,8 @@ if (-1 !== confIndex) {
|
|||
confpath = confargs[1];
|
||||
}
|
||||
|
||||
var updater = require('../lib/updater')(pkg);
|
||||
|
||||
function help() {
|
||||
console.info('');
|
||||
console.info('Telebit Daemon v' + pkg.version);
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = function (pkg) {
|
||||
function checkUpgrade() {
|
||||
var https = require('https');
|
||||
|
||||
function getFile(url, cb) {
|
||||
https.get(url, function (resp) {
|
||||
var str = '';
|
||||
resp.on('data', function (chunk) {
|
||||
str += chunk.toString('utf8');
|
||||
});
|
||||
resp.on('end', function () {
|
||||
cb(null, str);
|
||||
});
|
||||
resp.on('error', function (err) {
|
||||
// ignore
|
||||
cb(err);
|
||||
});
|
||||
}).on('error', function (err) {
|
||||
// ignore
|
||||
cb(err);
|
||||
});
|
||||
}
|
||||
|
||||
function isNewer(latest, myPkg) {
|
||||
var m = /^(v)?(\d+)\.(\d+)\.(\d+)(.*)/.exec(latest.version);
|
||||
var n = /^(v)?(\d+)\.(\d+)\.(\d+)(.*)/.exec(myPkg.version);
|
||||
if (!m) {
|
||||
return 1;
|
||||
}
|
||||
if (parseInt(m[2], 10) > parseInt(n[2], 10)) {
|
||||
return -1;
|
||||
} else if (parseInt(m[2], 10) === parseInt(n[2], 10)) {
|
||||
if (parseInt(m[3], 10) > parseInt(n[3], 10)) {
|
||||
return -1;
|
||||
} else if (parseInt(m[3], 10) === parseInt(n[3], 10)) {
|
||||
if (parseInt(m[4], 10) > parseInt(n[4], 10)) {
|
||||
return -1;
|
||||
} else if (parseInt(m[4], 10) === parseInt(n[4], 10)) {
|
||||
// lex sorting
|
||||
if (m[5] > n[5]) {
|
||||
return -1;
|
||||
} else if (m[5] === n[5]) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
getFile("https://telebit.cloud/dist/index.tab", function (err, tab) {
|
||||
if (err) { /*ignore*/ return; }
|
||||
if (tab) { tab = tab && tab.toString() || ''; }
|
||||
var versions = [];
|
||||
var lines = tab.split(/[\r\n]/g);
|
||||
var headers = lines.shift().split(/\t/g);
|
||||
var chan = 'prod';
|
||||
var next;
|
||||
lines.forEach(function (line) {
|
||||
var tsv = {};
|
||||
var fields = line.split(/\t/g);
|
||||
fields.forEach(function (value, i) {
|
||||
tsv[headers[i]] = value;
|
||||
});
|
||||
versions.push(tsv);
|
||||
});
|
||||
// find matching version
|
||||
versions.some(function (v) {
|
||||
if (('v' + pkg.version) === v.version) {
|
||||
chan = v.channel;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// find first (most recent) version in channel
|
||||
versions.some(function (v) {
|
||||
if (chan === v.channel) {
|
||||
next = v;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if (!next || !isNewer(next.version, pkg.version)) {
|
||||
console.log('DEBUG can\'t upgrade from', pkg.version, 'in channel', chan);
|
||||
return;
|
||||
}
|
||||
console.log('Upgrade Available: ' + next.version + ' in \'' + next.channel + '\'channel');
|
||||
getFile("https://telebit.cloud/dist/upgrade.js", function (err, script) {
|
||||
if (err) { /*ignore*/ return; }
|
||||
var os = require('os');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var scriptname = 'telebit-upgrade-' + Math.round(Math.random() * 99999) + '.js';
|
||||
var pathname = path.join(os.tmpdir(), scriptname);
|
||||
fs.writeFile(pathname, script, function (err) {
|
||||
if (err) { /*ignore*/ return; }
|
||||
// console.log('DEBUG wrote', pathname);
|
||||
//var str =
|
||||
require(pathname)({
|
||||
package: pkg
|
||||
, root: path.resolve(__dirname, '..')
|
||||
, latest: next
|
||||
, channel: chan
|
||||
}, function () {
|
||||
// console.log('upgrade complete');
|
||||
});
|
||||
//console.log(str);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
setInterval(checkUpgrade, 2 * 60 * 60 * 1000);
|
||||
process.nextTick(function () {
|
||||
checkUpgrade();
|
||||
});
|
||||
};
|
Loading…
Reference in New Issue