diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml new file mode 100644 index 0000000..fb1f3fe --- /dev/null +++ b/.github/workflows/ai-review.yml @@ -0,0 +1,100 @@ +name: AI Code Review + +on: + pull_request: + types: [opened, ready_for_review, synchronize] + +jobs: + ai-review: + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout PR + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Run Claude PR Review + uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }} + use_sticky_comment: "true" + claude_args: | + --allowedTools "Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr review:*),Bash(git diff:*),Bash(git log:*),Read,Glob,Grep" + prompt: | + Review pull request #${{ github.event.pull_request.number }} and post a review to GitHub. + + ## Step 1: Gather context + + Get the PR details and diff: + ``` + gh pr view ${{ github.event.pull_request.number }} + gh pr diff ${{ github.event.pull_request.number }} + ``` + + ## Step 2: Review the code changes + + Perform a thorough code review analyzing: + - Code quality and best practices + - Potential bugs or issues + - Security concerns (credentials, injection, OWASP top 10) + - Performance considerations + - Breaking changes or regressions + + ## Step 3: Determine review outcome + + Based on findings, choose one: + - **APPROVE** (`--approve`): Code looks good, no significant issues + - **REQUEST_CHANGES** (`--request-changes`): Critical issues that must be fixed before merging + - **COMMENT** (`--comment`): Suggestions or minor issues that don't block merging + + Prefer COMMENT over REQUEST_CHANGES unless there are genuine bugs, security issues, or breaking changes. + + ## Step 4: Post the review + + Post to GitHub using: + ``` + gh pr review ${{ github.event.pull_request.number }} --body "YOUR_REVIEW_BODY" --approve|--request-changes|--comment + ``` + + Format the review body as: + + ```markdown + ## AI Code Review + + **Recommendation**: APPROVE | REQUEST_CHANGES | COMMENT + + ### Summary + [1-2 sentence overview of what this PR does] + +
+ Actionable Feedback (N items) + + - [ ] `file:line` - Description of issue or required change + - [ ] General: Description of non-file-specific feedback + +
+ +
+ Detailed Review + + ### Code Quality + [Analysis of code patterns, readability, maintainability] + + ### Security + [Any security considerations] + + ### Suggestions + [Optional improvements] + + ### Positive Notes + [What was done well] + +
+ ``` + + **Important:** The `gh pr review` command produces no output on success. Only run it once — do not retry if there is no output, as that indicates success.