ape-releasing
Version:
ape framework module for releasing tasks.
104 lines (94 loc) • 3.39 kB
JavaScript
/**
* Release node js package.
* @memberof module:ape-releasing/lib
* @function releasePackage
* @param {object} [options] - Optional settings.
* @param {function[]} [options.beforeRelease] - Tasks to do before release.
* @param {function[]} [options.afterRelease] - Tasks to do before release.
* @param {string} [options.confirmMsg=releasePackage.CONFIRM_MSG] - Confirm message before release.
* @param {function} callback - Callback when done.
*/
;
var argx = require('argx'),
path = require('path'),
fs = require('fs'),
async = require('async'),
yesno = require('yesno'),
taggit = require('taggit'),
colorprint = require('colorprint'),
versionup = require('versionup'),
execCommand = require('./exec_command');
/** @lends releasePackage */
function releasePackage(options, callback) {
var args = argx(arguments);
callback = args.pop('function') || argx.noop;
options = args.pop('object') || {};
var confirmMsg = options.confirmMsg || releasePackage.CONFIRM_MSG;
yesno.ask(confirmMsg, false, function (sure) {
if (!sure) {
callback(null);
return;
}
var pkgPath = path.resolve(process.cwd(), 'package.json');
fs.exists(pkgPath, function (exists) {
if (!exists) {
callback(new Error('package.json not found.'));
return;
}
var pkg = require(pkgPath);
var beforeRelease = options.beforeRelease || [],
afterRelease = options.afterRelease || [];
async.series([
function (callback) {
async.series([].concat(beforeRelease).map(releasePackage.task), callback);
},
function (callback) {
releasePackage.execute(pkg, callback);
},
function (callback) {
async.series([].concat(afterRelease).map(releasePackage.task), callback);
}
], callback);
});
});
}
releasePackage.task = function (task) {
if (typeof(task) === 'string') {
return function (callback) {
execCommand(task, [], callback);
}
}
return task;
};
releasePackage.execute = function (pkg, callback) {
var logger = new colorprint.Colorprint({
PREFIX: '[ape-releasing] '
});
async.series([
function (callback) {
logger.info('Creating git tag...');
taggit({}, callback);
},
function (callback) {
logger.info('Publishing to npm...');
execCommand('npm', ['publish', '.'], callback);
},
function (callback) {
logger.info('Updating package version...');
versionup({}, callback);
},
function (callback) {
logger.info('Pushing git changes...');
execCommand('git', ['add', '.', '-A'], callback);
},
function (callback) {
var commitMsg = 'Version incremented to ' + pkg['version'];
execCommand('git', ['commit', '-m', commitMsg], callback)
},
function (callback) {
execCommand('git', ['push'], callback);
}
], callback);
};
releasePackage.CONFIRM_MSG = 'Are you sure to release new version? (y/N) ';
module.exports = releasePackage;