jira-precommit-hook
Version:
Git commit hook to verify commit messages are tagged with a JIRA issue number
218 lines (157 loc) • 7.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.precommit = exports.getCommitMsg = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var getCommitMsg = exports.getCommitMsg = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(readPromise) {
var jiraAPI, jiraConfigPath, _ref2, _ref3, projectKey, fileContents, firstWord, issues;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
jiraAPI = void 0;
jiraConfigPath = void 0;
_context.prev = 2;
jiraConfigPath = fsUtils.findParentFolder(process.cwd(), '.jirarc');
_context.next = 9;
break;
case 6:
_context.prev = 6;
_context.t0 = _context['catch'](2);
throw new Error('.jirarc file is not found. Please refer to the readme for details about ' + 'the .jirarc file');
case 9:
_context.next = 11;
return _promise2.default.all([(0, _jiraConnection.getJiraAPI)(jiraConfigPath).then(function (api) {
return jiraAPI = api;
}) // eslint-disable-line no-return-assign
.then(function () {
return (0, _jiraOperations.findProjectKey)(jiraAPI);
}), readPromise]);
case 11:
_ref2 = _context.sent;
_ref3 = (0, _slicedToArray3.default)(_ref2, 2);
projectKey = _ref3[0];
fileContents = _ref3[1];
firstWord = fileContents.split(' ')[0];
if (!(firstWord === 'Merge')) {
_context.next = 18;
break;
}
return _context.abrupt('return', null);
case 18:
issues = getIssueReference(fileContents, projectKey);
return _context.abrupt('return', issueHandler.issueStrategizer(issues, jiraAPI));
case 20:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[2, 6]]);
}));
return function getCommitMsg(_x) {
return _ref.apply(this, arguments);
};
}();
var precommit = exports.precommit = function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(path) {
var showJoke, readPromise, contents;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
showJoke = (0, _joke2.default)(_config2.default);
_context2.next = 3;
return (0, _outdatedCheck2.default)();
case 3:
readPromise = _fsPromise2.default.readFile(path, { encoding: 'utf8' });
_context2.prev = 4;
_context2.next = 7;
return _promise2.default.all([getCommitMsg(readPromise), (0, _userEmailCheck2.default)(), (0, _deploymentsConfigCheck2.default)({
fileSystem: _fsPromise2.default,
fileSystemUtils: fsUtils,
log: console.log
})]);
case 7:
_context2.next = 9;
return showJoke();
case 9:
console.log(_chalk2.default.grey('[jira-precommit-hook] ') + _chalk2.default.cyan('Commit message successfully verified.'));
return _context2.abrupt('return', 0);
case 13:
_context2.prev = 13;
_context2.t0 = _context2['catch'](4);
_context2.prev = 15;
_context2.next = 18;
return readPromise;
case 18:
contents = _context2.sent;
console.log('Commit Message:');
console.log(contents);
if (typeof _context2.t0 === 'string') {
console.error(_chalk2.default.red(_context2.t0));
} else if (process.env.NODE_ENV === 'development') {
console.error(_chalk2.default.red(_context2.t0.stack));
} else {
console.error(_chalk2.default.red(_context2.t0.toString()));
}
return _context2.abrupt('return', 1);
case 25:
_context2.prev = 25;
_context2.t1 = _context2['catch'](15);
console.log(_chalk2.default.red('Failed to read commit message file.'));
return _context2.abrupt('return', 1);
case 29:
case 'end':
return _context2.stop();
}
}
}, _callee2, this, [[4, 13], [15, 25]]);
}));
return function precommit(_x2) {
return _ref4.apply(this, arguments);
};
}();
exports.getIssueReference = getIssueReference;
var _fsPromise = require('fs-promise');
var _fsPromise2 = _interopRequireDefault(_fsPromise);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _issueHandler = require('./issue-handler');
var issueHandler = _interopRequireWildcard(_issueHandler);
var _jiraOperations = require('./jira-operations');
var _jiraConnection = require('./jira-connection');
var _fsUtils = require('./fs-utils');
var fsUtils = _interopRequireWildcard(_fsUtils);
var _outdatedCheck = require('./outdated-check');
var _outdatedCheck2 = _interopRequireDefault(_outdatedCheck);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _joke = require('./joke');
var _joke2 = _interopRequireDefault(_joke);
var _config = require('./config');
var _config2 = _interopRequireDefault(_config);
var _userEmailCheck = require('./user-email-check');
var _userEmailCheck2 = _interopRequireDefault(_userEmailCheck);
var _deploymentsConfigCheck = require('./deployments-config-check');
var _deploymentsConfigCheck2 = _interopRequireDefault(_deploymentsConfigCheck);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint no-process-exit:0 */
function getIssueReference(msgToParse, prjKey) {
var pattern = RegExp(prjKey + '-\\d+', 'gi');
var commentPattern = RegExp('^#.*$', 'gm');
var msgToParseReplaced = msgToParse.replace(commentPattern, '');
var references = msgToParseReplaced.match(pattern);
return _lodash2.default.uniq(references).map(function (x) {
return x.toUpperCase();
});
}