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
239 lines (184 loc) • 6.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var prepublish = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _utils.exec)('npm run prepublish', { stdio: stdio });
case 2:
_utils.status.doneStep(true);
case 3:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function prepublish() {
return _ref.apply(this, arguments);
};
}();
var generatePackage = function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _utils.exec)('npm pack', { stdio: stdio });
case 2:
_utils.status.doneStep(true);
case 3:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function generatePackage() {
return _ref2.apply(this, arguments);
};
}();
var confirmation = function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(tarPackageFilePath) {
var tarContents;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
// log package
(0, _utils.info)('Package contents');
_context3.next = 3;
return readTar(tarPackageFilePath);
case 3:
tarContents = _context3.sent;
tarContents.forEach(function (f) {
return (0, _utils.log)(' ' + f.replace('package/', ''));
});
(0, _utils.emptyLine)();
_context3.next = 8;
return _utils.rl.confirmation('If you continue you will publish the package on npm. Are you sure?');
case 8:
if (_context3.sent) {
_context3.next = 11;
break;
}
deletePackage(tarPackageFilePath);
throw new _utils.SmoothReleaseError('You refused the generated package. Aborting');
case 11:
(0, _utils.emptyLine)();
case 12:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
return function confirmation(_x) {
return _ref3.apply(this, arguments);
};
}();
var publish = function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(useTarPackage, tarPackageFilename, tarPackageFilePath) {
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_utils.status.addSteps(['Run "npm publish"']);
if (!useTarPackage) {
_context4.next = 6;
break;
}
_context4.next = 4;
return (0, _utils.exec)('npm publish ' + tarPackageFilename + ' --registry https://registry.npmjs.org/', { stdio: stdio });
case 4:
_context4.next = 8;
break;
case 6:
_context4.next = 8;
return (0, _utils.exec)('npm publish --registry https://registry.npmjs.org/', { stdio: stdio });
case 8:
deletePackage(tarPackageFilePath);
_utils.status.doneStep(true);
case 10:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
return function publish(_x2, _x3, _x4) {
return _ref4.apply(this, arguments);
};
}();
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _tar = require('tar');
var _tar2 = _interopRequireDefault(_tar);
var _utils = require('../utils');
var _config = require('../config');
var _config2 = _interopRequireDefault(_config);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var stdio = [process.stdin, null, process.stderr];
var readTar = function readTar(file) {
var actual = [];
var onentry = function onentry(entry) {
return actual.push(entry.path);
};
return _tar2.default.list({ file: file, onentry: onentry }).then(function () {
return actual;
});
};
function deletePackage(tarPackageFilePath) {
_fs2.default.unlinkSync(tarPackageFilePath);
}
exports.default = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {
var packageJsonName, cleanedPackageJsonName, tarPackageFilename, tarPackageFilePath;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
(0, _utils.title)('Publish package on npm');
packageJsonName = (0, _utils.getPackageJsonName)();
cleanedPackageJsonName = packageJsonName.startsWith('@') ? packageJsonName.replace('@', '').replace('/', '-') : packageJsonName;
tarPackageFilename = cleanedPackageJsonName + '-' + (0, _utils.getPackageJsonVersion)() + '.tgz';
tarPackageFilePath = _path2.default.resolve((0, _utils.getRootFolderPath)(), tarPackageFilename);
if (!_config2.default.publish.tarPackageConfirmation) {
_context5.next = 15;
break;
}
_utils.status.addSteps([(0, _utils.getPackageJsonScripts)().prepublish && 'Run "npm prepublish"', 'Run "npm pack"']);
_context5.t0 = (0, _utils.getPackageJsonScripts)().prepublish;
if (!_context5.t0) {
_context5.next = 11;
break;
}
_context5.next = 11;
return prepublish();
case 11:
_context5.next = 13;
return generatePackage();
case 13:
_context5.next = 15;
return confirmation(tarPackageFilePath);
case 15:
_context5.next = 17;
return publish(_config2.default.publish.tarPackageConfirmation, tarPackageFilename, tarPackageFilePath);
case 17:
case 'end':
return _context5.stop();
}
}
}, _callee5, undefined);
}));