docs: add PR title guidelines and workflow to enforce conventional commits

This commit is contained in:
Aiden Cline
2026-01-08 11:23:52 -06:00
parent 3c5043497c
commit 970796b832
2 changed files with 80 additions and 0 deletions

62
.github/workflows/pr-title.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: PR Title Validation
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
validate-title:
if: |
github.event.pull_request.user.login != 'actions-user' &&
github.event.pull_request.user.login != 'opencode' &&
github.event.pull_request.user.login != 'rekram1-node' &&
github.event.pull_request.user.login != 'thdxr' &&
github.event.pull_request.user.login != 'kommander' &&
github.event.pull_request.user.login != 'jayair' &&
github.event.pull_request.user.login != 'fwang' &&
github.event.pull_request.user.login != 'adamdotdevin' &&
github.event.pull_request.user.login != 'iamdavidhill' &&
github.event.pull_request.user.login != 'opencode-agent[bot]'
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Validate PR title
uses: actions/github-script@v7
with:
script: |
const title = context.payload.pull_request.title;
const validPrefixes = ['feat:', 'fix:', 'docs:', 'chore:', 'refactor:', 'test:'];
const isValid = validPrefixes.some(prefix => title.startsWith(prefix));
if (!isValid) {
const body = `👋 Thanks for opening this PR!
Your PR title \`${title}\` doesn't follow our conventional commit format.
Please update it to start with one of these prefixes:
- \`feat:\` new feature or functionality
- \`fix:\` bug fix
- \`docs:\` documentation or README changes
- \`chore:\` maintenance tasks, dependency updates, etc.
- \`refactor:\` code refactoring without changing behavior
- \`test:\` adding or updating tests
**Examples:**
- \`docs: update contributing guidelines\`
- \`fix: resolve crash on startup\`
- \`feat: add dark mode support\`
See [CONTRIBUTING.md](../blob/dev/CONTRIBUTING.md#pr-titles) for more details.`;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: body
});
core.setFailed('PR title does not follow conventional commit format');
} else {
console.log('PR title is valid:', title);
}