Skip to content

Commit

Permalink
feat: add bots_ignore input (#231)
Browse files Browse the repository at this point in the history
  • Loading branch information
jef authored Dec 11, 2024
1 parent 30540d3 commit 6a6c1c4
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 5 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 4 additions & 0 deletions action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/** @type {import('ts-jest').JestConfigWithTsJest} **/
module.exports = {
collectCoverage: true,
testEnvironment: 'node',
transform: {
'^.+.tsx?$': ['ts-jest', {}],
Expand Down
31 changes: 28 additions & 3 deletions src/__tests__/lint.test.ts
Original file line number Diff line number Diff line change
@@ -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(
Expand Down Expand Up @@ -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);
});
});
14 changes: 12 additions & 2 deletions src/lint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 => {
Expand All @@ -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) {
Expand Down

0 comments on commit 6a6c1c4

Please sign in to comment.