UNPKG

smooth-release

Version:

Smart CLI tool to safely and automatically do every step to release a new version of a library hosted on GitHub and published on npm

269 lines (189 loc) 7.85 kB
'use strict'; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _minimist = require('minimist'); var _minimist2 = _interopRequireDefault(_minimist); var _tcomb = require('tcomb'); var _tcomb2 = _interopRequireDefault(_tcomb); var _lodash = require('lodash'); var _validations = require('./validations'); var _validations2 = _interopRequireDefault(_validations); var _version = require('./npm/version'); var _version2 = _interopRequireDefault(_version); var _publish = require('./npm/publish'); var _publish2 = _interopRequireDefault(_publish); var _release = require('./github/release'); var _release2 = _interopRequireDefault(_release); var _changelog = require('./github/changelog'); var _changelog2 = _interopRequireDefault(_changelog); var _commitAndPush = require('./commitAndPush'); var _commitAndPush2 = _interopRequireDefault(_commitAndPush); var _token = require('./github/token'); var _utils = require('./utils'); var _config = require('./config'); var _config2 = _interopRequireDefault(_config); var _package = require('../package.json'); var _package2 = _interopRequireDefault(_package); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _argv = (0, _minimist2.default)(process.argv.slice(2)); var defaultArgv = _config2.default.tasks, dataType = _config2.default.github.dataType; var runDefault = !(0, _lodash.some)((0, _keys2.default)(defaultArgv), function (arg) { return _argv[arg] === true; }); var Argv = _tcomb2.default.dict(_tcomb2.default.String, _tcomb2.default.maybe(_tcomb2.default.Boolean)); var argv = Argv((0, _lodash.omit)(runDefault ? (0, _extends3.default)({}, defaultArgv, _argv) : (0, _lodash.mapValues)(defaultArgv, function (v, k) { return _argv[k] || false; }), '_')); var mainArgument = _argv._[0]; var promptUserBeforeRunningTask = function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(task, message) { var hasConfirmed; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(argv[task] === null)) { _context.next = 6; break; } _context.next = 3; return _utils.rl.confirmation(message); case 3: hasConfirmed = _context.sent; (0, _utils.log)('\n'); return _context.abrupt('return', hasConfirmed); case 6: return _context.abrupt('return', argv[task]); case 7: case 'end': return _context.stop(); } } }, _callee, undefined); })); return function promptUserBeforeRunningTask(_x, _x2) { return _ref.apply(this, arguments); }; }(); var main = function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { var hasIncreasedVersion, hasUpdatedChangelog; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: hasIncreasedVersion = false; hasUpdatedChangelog = false; if (!(_argv.v || _argv.version)) { _context2.next = 4; break; } return _context2.abrupt('return', (0, _utils.log)(_package2.default.version)); case 4: (0, _utils.log)((0, _utils.bold)('smooth-release v' + _package2.default.version)); _context2.prev = 5; _context2.t0 = !_config2.default.github.token; if (!_context2.t0) { _context2.next = 10; break; } _context2.next = 10; return (0, _token.askForToken)(); case 10: _context2.next = 12; return promptUserBeforeRunningTask('validations', 'Do you want to run the "validations" task?'); case 12: if (!_context2.sent) { _context2.next = 15; break; } _context2.next = 15; return (0, _validations2.default)({ mayPublishOnNpm: argv['npm-publish'] !== false }); case 15: _context2.next = 17; return promptUserBeforeRunningTask('npm-version', 'Do you want to run the "npm-version" task and increase the version of your library?'); case 17: if (!_context2.sent) { _context2.next = 21; break; } _context2.next = 20; return (0, _version2.default)({ manualVersion: mainArgument, dataType: dataType }); case 20: hasIncreasedVersion = true; case 21: _context2.next = 23; return promptUserBeforeRunningTask('changelog', 'Do you want to run the "changelog" task and update the CHANGELOG.md file?'); case 23: if (!_context2.sent) { _context2.next = 27; break; } _context2.next = 26; return (0, _changelog2.default)({ hasIncreasedVersion: hasIncreasedVersion, dataType: dataType }); case 26: hasUpdatedChangelog = true; case 27: if (!(hasIncreasedVersion || hasUpdatedChangelog)) { _context2.next = 30; break; } _context2.next = 30; return (0, _commitAndPush2.default)({ hasIncreasedVersion: hasIncreasedVersion, hasUpdatedChangelog: hasUpdatedChangelog }); case 30: _context2.next = 32; return promptUserBeforeRunningTask('gh-release', 'Do you want to run the "gh-release" task and create a release on GitHub for the last version of you library?'); case 32: if (!_context2.sent) { _context2.next = 35; break; } _context2.next = 35; return (0, _release2.default)({ all: false }); case 35: _context2.next = 37; return promptUserBeforeRunningTask('npm-publish', 'Do you want to run the "npm-publish" task and publish your library on npm?'); case 37: if (!_context2.sent) { _context2.next = 40; break; } _context2.next = 40; return (0, _publish2.default)(); case 40: _context2.next = 42; return promptUserBeforeRunningTask('gh-release-all', 'Do you want to run the "gh-release-all" task and create a release on GitHub for every version of your library?'); case 42: if (!_context2.sent) { _context2.next = 45; break; } _context2.next = 45; return (0, _release2.default)({ all: true }); case 45: _context2.next = 50; break; case 47: _context2.prev = 47; _context2.t1 = _context2['catch'](5); (0, _utils.onError)(_context2.t1); case 50: case 'end': return _context2.stop(); } } }, _callee2, undefined, [[5, 47]]); })); return function main() { return _ref2.apply(this, arguments); }; }(); (0, _utils.checkForUpdates)(); main();