From 6a6c1c4e9d224ea5ee12911040d5983c028fe9a6 Mon Sep 17 00:00:00 2001 From: Jef LeCompte Date: Wed, 11 Dec 2024 12:24:14 -0800 Subject: [PATCH] feat: add bots_ignore input (#231) --- README.md | 4 ++++ action.yaml | 4 ++++ jest.config.js | 1 + src/__tests__/lint.test.ts | 31 ++++++++++++++++++++++++++++--- src/lint.ts | 14 ++++++++++++-- 5 files changed, 49 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b86ef10..95e21cc 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ jobs: ## Inputs +### `bots_ignore` + +**Optional** A list of bots to ignore when linting the pull request title. Can be a comma-separated list. + ### `comment` **Optional** Post a comment in the pull request conversation with examples. diff --git a/action.yaml b/action.yaml index 72709cf..661c3fd 100644 --- a/action.yaml +++ b/action.yaml @@ -4,6 +4,10 @@ branding: icon: align-left color: blue inputs: + bots_ignore: + required: false + description: A list of bots to ignore when linting the pull request title. Can be a comma-separated list. + default: '' comment: required: false description: Post a comment in the pull request conversation with examples. diff --git a/jest.config.js b/jest.config.js index 200dfbc..1468f35 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,6 @@ /** @type {import('ts-jest').JestConfigWithTsJest} **/ module.exports = { + collectCoverage: true, testEnvironment: 'node', transform: { '^.+.tsx?$': ['ts-jest', {}], diff --git a/src/__tests__/lint.test.ts b/src/__tests__/lint.test.ts index 518e245..04c5bef 100644 --- a/src/__tests__/lint.test.ts +++ b/src/__tests__/lint.test.ts @@ -1,7 +1,14 @@ -import {getConventionalCommitTypes, lintPullRequest} from '../lint'; +import { + getConventionalCommitTypes, + lintPullRequest, + isBotIgnored, +} from '../lint'; +import {getInput} from '@actions/core'; + +jest.mock('@actions/core'); describe('getConvetionalCommitTypes tests', () => { - it('should return types', () => { + test('should return types', () => { const types = getConventionalCommitTypes(); expect( @@ -30,8 +37,26 @@ describe('lintPullRequest tests', () => { ]; tests.forEach(({args, expected}) => { - it(`should pass or fail linting ['${args}', '${expected}']`, async () => { + test(`should pass or fail linting ['${args}', '${expected}']`, async () => { expect(await lintPullRequest(args)).toBe(expected); }); }); }); + +jest.mock('@actions/github', () => ({ + context: { + actor: 'test-bot', + }, +})); + +describe('isBotIgnored tests', () => { + test('should return true if the bot is in the ignore list', () => { + (getInput as jest.Mock).mockReturnValue('test-bot,another-bot'); + expect(isBotIgnored()).toBe(true); + }); + + test('should return false if the bot is not in the ignore list', () => { + (getInput as jest.Mock).mockReturnValue('another-bot'); + expect(isBotIgnored()).toBe(false); + }); +}); diff --git a/src/lint.ts b/src/lint.ts index 260779a..fb7c170 100644 --- a/src/lint.ts +++ b/src/lint.ts @@ -5,10 +5,16 @@ import { getPullRequest, } from './github'; import * as conventionalCommitTypes from 'conventional-commit-types'; -import {getInput} from '@actions/core'; +import {getInput, info} from '@actions/core'; +import {context} from '@actions/github'; const types = Object.keys(conventionalCommitTypes.types); +export function isBotIgnored() { + const botsIgnore = getInput('bots_ignore').split(','); + return botsIgnore.includes(context.actor); +} + export function getConventionalCommitTypes(): string { return types .map(type => { @@ -28,8 +34,12 @@ export async function lintPullRequest(title: string) { } export async function lint() { - const pr = await getPullRequest(); + if (isBotIgnored()) { + info('Bot is ignored. Skipping linting.'); + return; + } + const pr = await getPullRequest(); const isPrTitleOk = await lintPullRequest(pr.title); if (isPrTitleOk) {