Skip to content

feat(ci): add PR title check workflow #27

feat(ci): add PR title check workflow

feat(ci): add PR title check workflow #27

Workflow file for this run

name: PR Title Check
on:
pull_request:
types: [opened, edited, synchronize, reopened]
permissions:
pull-requests: write
jobs:
check-pr-title:
name: Check PR Title
runs-on: ubuntu-latest
steps:
- name: Check PR Title and Manage Review
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const title = context.payload.pull_request.title;
const pattern = /^(feat|fix|build|chore|ci|docs|perf|refactor|revert|style|test):\s\w+:\s.+/;
if (!pattern.test(title)) {
await github.rest.pulls.createReview({
...context.repo,
pull_number: context.payload.pull_request.number,
body: 'Please update the PR title to match the required format: `<type>: <area>: <subject>`\n\nTypes: fix, feat, build, chore, ci, docs, perf, refactor, revert, style, test, chore\nArea: e.g. api, chain, state, mempool, multisig, networking, paych, proving, sealing, wallet, deps\nSubject: start with lowercase',
event: 'REQUEST_CHANGES'
});
core.setFailed('PR title does not match the required format');
} else {
const reviews = await github.rest.pulls.listReviews({
...context.repo,
pull_number: context.payload.pull_request.number
});
const botReview = reviews.data.find(review =>
review.user.type === 'Bot' &&
review.state === 'CHANGES_REQUESTED'
);
if (botReview) {
await github.rest.pulls.dismissReview({
...context.repo,
pull_number: context.payload.pull_request.number,
review_id: botReview.id,
message: 'PR title now matches the required format.'
});
}
}