name: PR Title Lint on: pull_request: types: [opened, edited, synchronize, reopened, ready_for_review] jobs: lint-pr-title: name: "Check PR title format" runs-on: warp-ubuntu-2404-x64-2x permissions: contents: read if: github.event_name == 'pull_request' || github.event_name == 'merge_group' steps: - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 with: types: | feat fix chore docs style refactor perf test build ci revert env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} check-pr-title-type: name: "Validate title type matches changes" runs-on: warp-ubuntu-2404-x64-2x permissions: contents: read pull-requests: write issues: read id-token: write if: github.event_name == 'pull_request' && !github.event.pull_request.draft steps: - name: Checkout repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 with: fetch-depth: 1 persist-credentials: false - name: Build prompt with PR title and changed files id: build-prompt env: PR_TITLE: ${{ github.event.pull_request.title }} PR_NUMBER: ${{ github.event.pull_request.number }} GH_TOKEN: ${{ github.token }} run: | FILES=$(gh pr diff "$PR_NUMBER" --name-only) DELIM="PROMPT_EOF_$(uuidgen)" { echo "TITLE_CHECK_PROMPT<<$DELIM" printf 'PR TITLE: %s\n' "$PR_TITLE" printf 'PR NUMBER: %s\n' "$PR_NUMBER" echo "" echo "CHANGED FILES:" echo "$FILES" echo "" cat .github/prompts/pr-title-check.prompt.md echo "$DELIM" } >> "$GITHUB_ENV" - name: Validate title type matches changes env: GH_TOKEN: ${{ github.token }} uses: anthropics/claude-code-action@6062f3709600659be5e47fcddf2cf76993c235c2 #v1.0.76 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API }} prompt: ${{ env.TITLE_CHECK_PROMPT }} claude_args: '--model claude-haiku-4-5 --allowed-tools "Bash(gh pr comment:*)"'