UNPKG

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
'use strict'; 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(); }); }