UNPKG

wzt-plugin-shifting

Version:

A simple CLI for publish your projects.

89 lines (77 loc) 2.43 kB
const is = require('is') const tar = require('tar-fs') const fs = require('fs') const os = require('os') const { spawn } = require('child_process') const zlib = require('zlib') const multimatch = require('multimatch') const logger = require('./index.js').logger const mergeNoUndefined = require('./index.js').mergeNoUndefined module.exports = function builder(module, env, next) { let isString = is.string, isUndefined = is.undefined let localLogger = (local, type) => (msg, end = false, cb = next) => logger[type](msg, local, end, cb) let error = localLogger('builder', 'error') let warning = localLogger('builder', 'warning') let { buildCommand, nobuild } = module nobuild = mergeNoUndefined(false, nobuild) module.nobuild = nobuild if (nobuild) return next(null, `env ${env} nobuild`) if (isUndefined(buildCommand)) { return error( `Publish environment '${env}' option 'buildCommand' is required` ) } if (!isString(buildCommand)) { return error( `Publish environment '${env}' option 'buildCommand' must be a string` ) } if (this._metadata.parallel) { logger.assert( Object.values(this._metadata.modules).every( v => v.buildCommand === buildCommand ), 'error', 'If the task is concurrent, the release command must be consistent', 'builder' ) } let promiseName = `_${buildCommand}BuilderPromise` let p = this[promiseName] ? this[promiseName] : (this[promiseName] = new Promise((resolve, reject) => { if (this._metadata.check) { logger.success(`env ${env} build success`) resolve(null) return } let cp = spawn(process.platform === 'win32' ? 'npm.cmd' : 'npm', [ 'run', buildCommand ]) cp.stderr.on('data', data => { process.stdout.write(data) }) cp.stdout.on('data', data => { process.stdout.write(data) }) cp.on('close', code => { if (code != 0) { resolve('build failures') } else { logger.success(`env ${env} build success`) resolve(null) } }) })) p.then(err => { if (err) { error(`Publish environment '${env}' build failures`, false, () => {}) next(err) } else { next(null, 'build success') } }) }