sicksync
Version:
Don’t accept the available as the preferable. Go extra mile with extra speed.
160 lines (116 loc) • 4.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getLatestVersion = undefined;
exports.updateRemote = updateRemote;
exports.updateLocal = updateLocal;
exports.update = update;
exports.notify = notify;
exports.check = check;
exports.migrate1to2 = migrate1to2;
exports.migrateConfig = migrateConfig;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _latestVersion = require('latest-version');
var _latestVersion2 = _interopRequireDefault(_latestVersion);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _child_process = require('child_process');
var _os = require('os');
var _path = require('path');
var _untildify = require('untildify');
var _untildify2 = _interopRequireDefault(_untildify);
var _util = require('./util');
var util = _interopRequireWildcard(_util);
var _package = require('../package.json');
var _constants = require('../conf/constants');
var _constants2 = _interopRequireDefault(_constants);
var _text = require('../conf/text');
var _text2 = _interopRequireDefault(_text);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const now = Date.now();
const updateInfo = _fsExtra2.default.existsSync(util.getUpdatePath()) ? require(util.getUpdatePath()) : {
lastChecked: 0,
version: _package.version
};
const getLatestVersion = exports.getLatestVersion = _lodash2.default.partial(_lodash2.default.ary(_latestVersion2.default, 2), 'sicksync');
function updateRemote(project) {
const ssh = util.shellIntoRemote(project.username + '@' + project.hostname);
const updateRemoteOnce = _lodash2.default.once(function (stdin) {
stdin.write(_constants2.default.UPDATE_CMD + '\n');
});
// Update devbox
ssh.stdout.on('data', data => {
const message = data.toString();
if (_lodash2.default.includes(message, 'sicksync@')) {
console.info(project.hostname, _text2.default.UPDATE_SUCCESS);
return ssh.kill('SIGINT');
}
if (_lodash2.default.includes(message, 'ERR!')) {
console.info(project.hostname, _text2.default.UPDATE_FAIL);
return ssh.kill('SIGINT');
}
updateRemoteOnce(ssh.stdin);
});
}
function updateLocal() {
(0, _child_process.exec)(_constants2.default.UPDATE_CMD, (error, stdout, stderr) => {
if (!!error || _lodash2.default.includes(stderr, 'ERR!')) {
return console.info(_os.hostname, _text2.default.UPDATE_FAIL, error || stderr);
}
console.info((0, _os.hostname)(), _text2.default.UPDATE_SUCCESS);
});
}
function update(config, opts) {
if (opts.check) {
return getLatestVersion(function (err, version) {
if (err) return;
console.info(_text2.default.UPDATE_AVAILABLE, '\n', 'Current version:', _package.version, '\n', 'Latest version:', version);
});
}
if (opts.migrateConfig) {
return migrateConfig(config);
}
_lodash2.default.each(config.projects, updateRemote);
updateLocal();
}
function notify() {
if (updateInfo.version !== _package.version) {
return console.info(_text2.default.UPDATE_AVAILABLE, '\n', 'Current version:', _package.version, '\n', 'Latest version:', updateInfo.version);
}
}
function check() {
if (now - updateInfo.lastChecked >= _constants2.default.UPDATE_INTERVAL) {
getLatestVersion(function (err, version) {
if (err) return;
_fsExtra2.default.writeFileSync(util.getUpdatePath(), JSON.stringify({
version: version,
lastChecked: now
}));
});
}
}
function migrate1to2(config) {
if (_lodash2.default.isEmpty(config)) {
const configLocation = (0, _untildify2.default)(_constants2.default.CONFIG_FILE_V1);
config = require(configLocation);
_fsExtra2.default.delete(configLocation);
}
config.project = (0, _path.basename)(config.sourceLocation);
return {
version: _package.version,
debug: config.debug,
projects: [_lodash2.default.mapKeys(config, (value, key) => {
if (key === 'userName') return 'username';
return key;
})]
};
}
function migrateConfig(config) {
const configVersion = config.version ? config.version.replace(/\./g, '') : null;
if (!configVersion) {
util.writeConfig(migrate1to2(config));
}
}
;