newkit-cli
Version:
Newkit cli tools.
71 lines (66 loc) • 2.52 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var tar = require('tar-fs');
var request = require('request');
var util = require('./util');
var config = require('./../config.json');
//上传文件
var uploadModule = (moduleName, modulePath, opt) => {
return new Promise((resolve, reject) => {
var uploadReq = request.post(`${opt.apiHost}/deploy/upload`, (err, res, body) => {
if (err || res.statusCode !== 200) {
return reject(err || `Upload error, statusCode: ${res.statusCode}, err: ${body}`);
}
resolve(JSON.parse(body));
});
var formData = uploadReq.form();
formData.append('file', fs.createReadStream(modulePath), { filename: `${moduleName}.tar`, contentType: '.tar' });
});
};
//发布模块
var deployModule = (moduleName, dfisFileName, opt) => {
var now = new Date();
var versionNo = `V_${(now.getFullYear() + '').substring(2)}.${now.getMonth() + 1}.${now.getDate()}.${now.getHours()}.${now.getMinutes()}`;
var postData = {
versionNo: opt.version || versionNo,
moduleName: moduleName,
deployUser: 'newkit-cli',
memo: `Newkit cli: ${opt.memo || 'Auto deploy'}`,
difsFileName: dfisFileName //正确名称是dfisFileName,但是后端使用的是difsFileName
};
return new Promise((resolve, reject) => {
request({
method: 'POST',
url: `${opt.apiHost}/deploy`,
headers: {
'Content-Type': 'application/json',
Accept: 'application/json'
},
body: JSON.stringify(postData)
}, (err, res, body) => {
if (err || res.statusCode !== 200) {
return reject(err || `Upload error, statusCode: ${res.statusCode}, err: ${body}`);
}
resolve(JSON.parse(body));
});
});
};
module.exports = (module, opt) => {
var cwd = process.cwd();
var modulePath = path.join(cwd, 'packed', `${module}.tar`);
if (!fs.existsSync(modulePath)) {
return util.error(`${modulePath} not found. You should use [nc pack <version>] to create module package before deploy.`);
}
opt.apiHost = opt.gqc ? config.newkitGqcApiHost : config.newkitGdevApiHost;
util.info('Uploading module ...');
uploadModule(module, modulePath, opt)
.then((body) => {
util.info('Uploading module succeed, deploying ...');
deployModule(module, body.filename, opt)
.then(() => {
util.info('Deploy succeed.');
})
.catch(util.error);
}).catch(util.error);
};