UNPKG

fdm

Version:

基于gulp的1688前端集成化工具

236 lines (195 loc) 5.66 kB
/** * dongming.jidm */ 'use strict'; var spawn = require('win-spawn'); var colors = require('colors'); var fs = require('fs'); var inquirer = require('inquirer'); var Gaea = require('../utils/gaea'); var nopt = require('nopt'); var branchInSvn = {}; var Path = require('path'); var helper = require('../utils/helper'); var gaeaWorkdir = Path.join(helper.getHomeDir(), 'neat.fdm', 'gaea'); var username = ''; var aonecrid = ''; var gaeaIp = ''; var gaeaUser = ''; var gaeaPass = ''; var parsed = null; module.exports = { help: function() { p(_help()); }, run: function(argv) { var knownOpts = { "env": Boolean, "ci": Boolean, "nobuild": Boolean, "build": Boolean, "username": String, "crid": String, "help": Boolean }; var shortHands = { "e": ["--env"], "c": ["--ci"], "b": ["--build"], "nb": ["--nobuild"], "u": ["--username"], "id": ["--crid"], "h": ["--help"], "ec": ["--env", "--ci"] } parsed = nopt(knownOpts, shortHands, argv); if(parsed.argv.original.length === 1 || parsed.help) { this.help(); return; } var questions = []; if( !parsed.username && parsed.crid ) { questions.push({ type: "input", name: "user", message: "请输入你的邮箱前缀:" }); } if( parsed.username && !parsed.crid ) { questions.push({ type: "input", name: "crid", message: "请输入你参与的项目CRID:" }); } if( !parsed.username && !parsed.crid ) { questions.push({ type: "input", name: "user", message: "请输入你的邮箱前缀:" }); questions.push({ type: "input", name: "crid", message: "请输入你参与的项目CRID:" }); } if( parsed.env || parsed.ci ) { // 申请盖娅测试机资源 inquirer.prompt( questions, function( answers ) { username = answers.user || parsed.username; aonecrid = answers.crid || parsed.crid; p('正在申请盖娅测试机...'); Gaea.applyGaeaEnv(username, aonecrid, applyGaeaCallback); }); return; } if( parsed.build ) { // 拉取AONE上的项目分支并编译 inquirer.prompt( questions, function( answers ) { username = answers.user || parsed.username; aonecrid = answers.crid || parsed.crid; p('正在获取项目中的代码分支...'); Gaea.getProjectBranches(aonecrid, getBranchesCallback); }); return; } } }; function applyGaeaCallback(data) { if( data.success ) { var content = data.data.content; gaeaIp = content.hostip; gaeaUser = content.loginname; gaeaPass = content.password; p('我已为你申请了盖娅测试机资源哦:'); p('ip:', gaeaIp.green); p('user:', gaeaUser.green); p('password:', gaeaPass.green); if(parsed.ci) { Gaea.getProjectBranches(aonecrid, getBranchesCallback); } } else { console.log('[ERROR]'.red, data.data.message); } } function getBranchesCallback(data) { if( data.success ) { p('PC分支:'); data.data.content.pc.forEach(function(ele, index) { p(ele); }); p('Mobile分支:'); data.data.content.mobile.forEach(function(ele, index) { p(ele); }); p('正在创建目录结构...'); Gaea.makeDirectoryStruct(data.data.content, aonecrid, mkdirStructCallback); } else { console.log('[ERROR]'.red, data.data.message); } } function mkdirStructCallback(err, data) { if( err ) { throw err; } branchInSvn = data; p('正在拉取项目分支...'); Gaea.fillDirectory(data, username, fillDirCallback); } function fillDirCallback(data) { if(data) { // p('[ERROR]'.red, '请检查你的svn环境,如果你用的是windows,可能还没有安装svn命令行工具,安装后重试'); // p('怎样安装svn命令行工具,可以参考doc/gaea.md'); throw data; // return; } if( parsed.nobuild ) { buildProjectCallback(); return; } p('开始编译项目...'); Gaea.buildProject(branchInSvn, buildProjectCallback); } function buildProjectCallback(data) { if(data) { throw data; } if( parsed.ci ) { if( parsed.nobuild ) { var destdir = Path.join(gaeaWorkdir, aonecrid); } else { var destdir = Path.join(gaeaWorkdir, aonecrid + '-dest'); } Gaea.pushtoGaea(destdir, gaeaIp, gaeaUser, gaeaPass, aonecrid, pushtoGaeaCallback); } } function pushtoGaeaCallback(data) { if(data) { throw data; } p('恭喜!项目已成功部署到盖娅'); } function _help() { return [ ' Useage: fdm gaea [-e env]', ' [-c ci]', ' [-b build]', ' [-u username]', ' [-id crid]', ' [-h help]', '', ' Options:', '', ' -c | --ci 部署到盖娅', ' -b | --build 将AONE上的项目拉下来编译', ' -e | --env 申请盖娅测试机', ' -nb | --nobuild 与-c连用,将未编译的代码部署到盖娅', ' -u | --username 与-c/-b/-e连用,输入你的邮箱前缀', ' -id | --crid 与-c/-b/-e连用,输入你参与的项目crid', ' -h | --help 打印帮助信息' ].join('\n'); } function p() { console.log.apply(console, arguments); }