fdm
Version:
基于gulp的1688前端集成化工具
114 lines (109 loc) • 4.5 kB
JavaScript
var spawn = require('win-spawn');
var inquirer = require("inquirer");
var commander = require('commander');
var exec = require('child_process').exec;
var question = {};
require('colors');
function _command(cmd, cb) {
exec(cmd, function(err, stdout, stderr) {
if (cb) {
cb(stdout.split('\n').join(''));
}
});
}
function _versionUp(version) {
var v = version.replace(/\./g, '');
v = (parseInt(v) + 1) + '';
if (v.length < 3) {
v = '0' + v;
}
return v.split('').join('.');
}
module.exports = {
help:function(){
console.log();
console.log('新建/切换分支');
console.log(' $', 'fdm publish'.green, 'br');
console.log();
console.log('daily发布');
console.log(' $', 'fdm publish'.green, 'daily');
console.log();
console.log('线上cdn发布');
console.log(' $', 'fdm publish'.green, 'cdn');
console.log();
},
run: function(argv) {
commander.parse(argv);
var question = {};
switch (commander.args[1]) {
case 'npm':
spawn('npm', ['publish'], {
stdio: 'inherit'
});
break;
case 'br':
question.br = {
type: "input",
name: "branch",
};
_command('git describe --always --tag --abbrev=0', function(tag) {
console.log("最新分支版本为" + tag.green);
var version = tag.replace('publish/', '');
version = _versionUp(version);
question.br.message = '确定要切换到分支' + version + '吗?如果不是请输入分支版本(' + version + '):';
inquirer.prompt([question.br], function(answers) {
version = answers.branch || version;
console.log("切换分支daily/" + version + "...");
spawn('git', ['checkout', '-b', 'daily/' + version], {
stdio: 'inherit'
});
});
});
break;
case 'daily':
question.daily = {
type: "input",
name: "daily",
};
_command('git rev-parse --abbrev-ref HEAD', function(br) {
var version = br.replace('daily/', '');
question.daily.message = '确定要发布分支' + br + '吗?如果不是请输入分支版本(' + version + '):';
inquirer.prompt([question.daily], function(answers) {
version = answers.daily || version;
console.log("发布分支daily/" + version + "...");
spawn('git', ['push', '-u', 'origin', 'daily/' + version], {
stdio: 'inherit'
});
});
});
break;
case 'cdn':
question.cdn = {
type: "input",
name: "cdn",
};
_command('git describe --always --tag --abbrev=0', function(tag) {
console.log("最新标签版本为" + tag.green);
var version = tag.replace('publish/', '');
version = _versionUp(version);
question.cdn.message = '确定要发布版本publish/' + version + '吗?如果不是请输入版本(' + version + '):';
inquirer.prompt([question.cdn], function(answers) {
version = answers.cdn || version;
console.log("发布" + version + "...");
spawn('git', ['pull', 'origin', 'master'], {
stdio: 'inherit'
}).on('close', function() {
spawn('git', ['tag', 'publish/' + version], {
stdio: 'inherit'
}).on('close', function() {
spawn('git', ['push', 'origin', 'publish/' + version], {
stdio: 'inherit'
});
});
});
});
});
break;
}
}
};