UNPKG

@ls-age/commitlint-circle

Version:

Lint all relevant commits for a change or PR on Circle CI

112 lines 4.43 kB
"use strict"; var _this = this; exports.__esModule = true; var tslib_1 = require("tslib"); var rest_1 = tslib_1.__importDefault(require("@octokit/rest")); var execa_1 = tslib_1.__importDefault(require("execa")); var NotFound = new Error(); var git = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return execa_1["default"].stdout('git', args); }; var checkCommit = function () { var refs = []; for (var _i = 0; _i < arguments.length; _i++) { refs[_i] = arguments[_i]; } return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { return [2 /*return*/, Promise.all(refs.map(function (ref) { return git('cat-file', '-e', ref); }))]; }); }); }; var matchGithub = function (url, prop) { if (!url) { throw NotFound; } var match = url.match(new RegExp("github\\.com/(.+)/(.+)/" + prop + "/(.+)")); if (!match) { throw NotFound; } var _ = match[0], owner = match[1], repo = match[2], data = match[3]; return { owner: owner, repo: repo, data: data }; }; var getRangeFromPr = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var _a, owner, repo, pull, github, _b, base, head; return tslib_1.__generator(this, function (_c) { switch (_c.label) { case 0: _a = matchGithub(process.env['CIRCLE_PULL_REQUEST'], 'pull'), owner = _a.owner, repo = _a.repo, pull = _a.data; github = new rest_1["default"](); console.log('📡 Looking up PR #%s...', pull); return [4 /*yield*/, github.pullRequests.get({ owner: owner, repo: repo, number: +pull })]; case 1: _b = (_c.sent()).data, base = _b.base, head = _b.head; return [4 /*yield*/, checkCommit(base.sha, head.sha)]; case 2: _c.sent(); console.log('🔀 Linting PR #%s', pull); return [2 /*return*/, [base.sha, head.sha]]; } }); }); }; var getRangeFromCompare = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var _a, from, to; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _a = matchGithub(process.env['CIRCLE_COMPARE_URL'], 'compare').data.split('...'), from = _a[0], to = _a[1]; return [4 /*yield*/, checkCommit(from, to)]; case 1: _b.sent(); console.log('🎏 Linting using comparison URL %s...%s', from, to); return [2 /*return*/, [from, to]]; } }); }); }; var getRangeFromSha = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var sha; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: sha = process.env['CIRCLE_SHA1']; if (!sha) { throw new Error('Cannot find CIRCLE_SHA1 environment variable'); } return [4 /*yield*/, checkCommit(sha)]; case 1: _a.sent(); console.log('⚙️ Linting using CIRCLE_SHA1 (%s)', sha); return [2 /*return*/, ['origin/master', sha]]; } }); }); }; var getRangeFromGit = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var head; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, git('rev-parse', '--verify', 'HEAD')]; case 1: head = _a.sent(); return [4 /*yield*/, checkCommit(head)]; case 2: _a.sent(); console.log('⚙️ Linting using git HEAD (%s)', head); return [2 /*return*/, ['origin/master', head]]; } }); }); }; var lint = function (_a) { var from = _a[0], to = _a[1]; return execa_1["default"]('node', [require('@commitlint/cli'), '--from', from, '--to', to], { stdio: 'inherit' }); }; exports.run = function () { return getRangeFromPr()["catch"](getRangeFromCompare)["catch"](getRangeFromSha)["catch"](getRangeFromGit) .then(lint); }; //# sourceMappingURL=index.js.map