diff --git a/README.md b/README.md index a6bc2e7e..296a1a34 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ A GitHub App built with [Probot](https://github.com/probot/probot) for approving ![image](https://user-images.githubusercontent.com/4306809/50573484-13a0a100-0dd5-11e9-8ef3-aad5069e83e3.png) -## Setup +## Setup (for contributors) +These are instructions for contributing code to the bot. If you just want to run the bot, skip to +the Configure section below. ```sh # Install dependencies @@ -61,7 +63,9 @@ jobs: ## Configuration -In order to use the bot, the config file should be provided. Config file should be defined in your repository. Config file is the yml file with the path `.github/autoapproval.yml`. The file should have at least 3 mandatory entries: `from_owner`, `required_labels` and `apply_labels`. +In order to use the bot, the config file should be provided. Config file should be defined in your +repository. Config file is the yml file with the path `.github/autoapproval.yml`. The file should +have at least 3 mandatory entries: `from_owner`, `required_labels`, `apply_labels`, and `blacklisted_labels`. --- @@ -98,7 +102,7 @@ If the value set to `one_of`, then it's enough to have only of the `required_lab --- ### blacklisted_labels - +**mandatory** Defines the list of labels on PR, which will prevent the PR from being automatically approved. For example: ``` blacklisted_labels: diff --git a/lib/index.js b/lib/index.js index 10cf1ecd..41e5ab1d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); - while (_) try { + while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { @@ -38,7 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { Object.defineProperty(exports, "__esModule", { value: true }); module.exports = function (app) { app.on(['pull_request.opened', 'pull_request.reopened', 'pull_request.labeled', 'pull_request.edited', 'pull_request_review'], function (context) { return __awaiter(void 0, void 0, void 0, function () { - var pr, config, prLabels, blacklistedLabels, ownerSatisfied, requiredLabelsSatisfied, appliedRequiredLabels, missingRequiredLabels, reviews; + var pr, config, prLabels, blacklistedLabels, lowerLogin, ownerSatisfied, requiredLabelsSatisfied, appliedRequiredLabels, missingRequiredLabels, reviews; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -72,7 +72,8 @@ module.exports = function (app) { return [2 /*return*/]; } } - ownerSatisfied = config.from_owner.length === 0 || config.from_owner.includes(pr.user.login); + lowerLogin = pr.user.login.toLowerCase(); + ownerSatisfied = config.from_owner.length === 0 || config.from_owner.some(function (owner) { return owner.toLowerCase() === lowerLogin; }); if (config.required_labels_mode === 'one_of') { appliedRequiredLabels = config.required_labels .filter(function (requiredLabel) { return prLabels.includes(requiredLabel); }); @@ -108,7 +109,7 @@ module.exports = function (app) { case 7: return [3 /*break*/, 9]; case 8: // one of the checks failed - context.log('Condition failed! \n - missing required labels: %s\n - PR owner found: %s', requiredLabelsSatisfied, ownerSatisfied); + context.log('Condition failed! \n - has required labels: %s\n - PR owner found: %s', requiredLabelsSatisfied, ownerSatisfied); _a.label = 9; case 9: return [2 /*return*/]; } diff --git a/lib/index.js.map b/lib/index.js.map index 18115a72..0ad597c7 100644 --- a/lib/index.js.map +++ b/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e8c4c609..6ebbec92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2301,11 +2301,6 @@ "@octokit/openapi-types": "^19.0.0" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" - }, "node_modules/@octokit/types": { "version": "6.39.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", @@ -13434,11 +13429,6 @@ } } }, - "@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" - }, "@octokit/types": { "version": "6.39.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", diff --git a/src/index.ts b/src/index.ts index 6b6fdceb..1e707d30 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ -import { Probot, Context } from 'probot' import { PullRequestEvent, PullRequestReviewEvent } from '@octokit/webhooks-types' +import { Context, Probot } from 'probot' module.exports = (app: Probot) => { app.on(['pull_request.opened', 'pull_request.reopened', 'pull_request.labeled', 'pull_request.edited', 'pull_request_review'], async (context) => { @@ -39,8 +39,9 @@ module.exports = (app: Probot) => { } } - // reading pull request owner info and check it with configuration - const ownerSatisfied = config.from_owner.length === 0 || config.from_owner.includes(pr.user.login) + // reading pull request owner info and check it with configuration (case insensitive) + const lowerLogin = pr.user.login.toLowerCase() + const ownerSatisfied = config.from_owner.length === 0 || config.from_owner.some((owner: string) => owner.toLowerCase() === lowerLogin) // reading pull request labels and check them with configuration let requiredLabelsSatisfied @@ -75,7 +76,7 @@ module.exports = (app: Probot) => { } } else { // one of the checks failed - context.log('Condition failed! \n - missing required labels: %s\n - PR owner found: %s', requiredLabelsSatisfied, ownerSatisfied) + context.log('Condition failed! \n - has required labels: %s\n - PR owner found: %s', requiredLabelsSatisfied, ownerSatisfied) } }) } diff --git a/test/index.test.ts b/test/index.test.ts index 311aadeb..332005ec 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -140,6 +140,32 @@ describe('Autoapproval bot', () => { expect(nock.isDone()).toBeTruthy() }) + test('PR has expected mixed-case owner -> will be approved', async () => { + const payload = require('./fixtures/pull_request.opened.json') + const config = 'from_owner:\n - dKHMelenko\nrequired_labels:\n - merge\nblacklisted_labels: []\napply_labels: []' + const reviews = require('./fixtures/pull_request_reviews_empty.json') + + nock('https://api.github.com') + .get('/repos/dkhmelenko/autoapproval/contents/.github%2Fautoapproval.yml') + .reply(200, config) + + nock('https://api.github.com') + .get('/repos/dkhmelenko/autoapproval/pulls/1/reviews') + .reply(200, reviews) + + nock('https://api.github.com') + .post('/repos/dkhmelenko/autoapproval/pulls/1/reviews', (body: any) => { + return body.event === 'APPROVE' + }) + .reply(200) + + // Receive a webhook event + await probot.receive({ name: 'pull_request', payload }) + + await new Promise(process.nextTick) // Don't assert until all async processing finishes + expect(nock.isDone()).toBeTruthy() + }) + test('PR has multiple required labels and expected owner -> will be approved', async () => { const payload = require('./fixtures/pull_request_opened_multiple_labels.json') const config = 'from_owner:\n - dkhmelenko\nrequired_labels:\n - merge\n - merge2\nblacklisted_labels: []\napply_labels: []'