const program = require('commander'); const Listr = require('listr'); const chalk = require('chalk'); const shell = require('shelljs'); const execa = require('execa'); // const { Config } = require('../utils/config'); const { Config } = require('/Users/config.js'); const buildPath = Config.buildPath; const codePath = Config.codePath; program.parse(process.argv); const env = program.args[0]; console.log('env: ', env); const mapping = { 'test': { cmd: 'test-build', codeBranch: 'dev', buildBranch: 'dev_aliyun' }, 'pre': { cmd: 'pre-build', codeBranch: 'dev', buildBranch: 'predevelop' }, 'pro': { cmd: 'build', codeBranch: 'dev', buildBranch: 'develop' }, } if (!mapping[env]) { console.log(chalk.red(`not exist ${env} branch`)); return; } const runBuild = (task) => new Promise(async resolve => { try { shell.cd(codePath); await execa('git', ['checkout', mapping[env].codeBranch]); await execa('git', ['pull', 'origin', mapping[env].codeBranch]); await execa('npm', ['run', mapping[env].cmd]); resolve(); } catch (e) { console.log('run build error: ', e); task.skip('Failed run build'); resolve(); } }); const deleteBuild = (task) => new Promise(async resolve => { try { shell.cd(buildPath); await execa('git', ['checkout', mapping[env].buildBranch]); await execa('git', ['pull', 'origin', mapping[env].buildBranch]); shell.rm(`${buildPath}/*`); shell.rm('-rf', `${buildPath}/static`); await execa('git', ['add', '.']); await execa('git', ['commit', '-m', `'发布新版本'`]); await execa('git', ['push', 'origin', mapping[env].buildBranch]); resolve(); } catch (e) { console.log('delete build error: ', e); task.skip('Failed delete build'); resolve(); } }); const copyBuild = (task) => new Promise(async resolve => { try { shell.cp('-r', `${codePath}/dist/*`, buildPath); shell.cd(buildPath); await execa('git', ['add', '.']); await execa('git', ['commit', '-m', `'发布新版本'`]); await execa('git', ['push', 'origin', mapping[env].buildBranch]); resolve(); } catch (e) { console.log('copyBuild error: ', e); task.skip('Failed copy build'); resolve(); } }); const tasks = new Listr([ { title: 'run build', task: (ctx, task) => runBuild(task) }, { title: 'delete build', task: (ctx, task) => deleteBuild(task) }, { title: 'copy build', task: (ctx, task) => copyBuild(task) } ]); tasks.run().catch(err => { console.log(err) });