|
|
@@ -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);
|
|
|
+ }
|