diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml new file mode 100644 index 00000000..42732cc9 --- /dev/null +++ b/.github/workflows/claude-review.yml @@ -0,0 +1,50 @@ +name: Claude PR Review + +on: + pull_request: + types: [opened, synchronize] + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + workflow_dispatch: + +concurrency: + group: claude-review-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read + pull-requests: write + issues: write + +jobs: + review: + runs-on: ubuntu-latest + timeout-minutes: 30 + if: | + github.event_name == 'pull_request' || + github.event_name == 'workflow_dispatch' || + (github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, '@claude') && + github.actor != 'claude[bot]') || + (github.event_name == 'pull_request_review_comment' && + contains(github.event.comment.body, '@claude') && + github.actor != 'claude[bot]') + steps: + - uses: actions/checkout@v4 + + - name: Read review instructions + id: review + run: | + EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) + echo "instructions<<$EOF" >> "$GITHUB_OUTPUT" + cat REVIEW.md >> "$GITHUB_OUTPUT" + echo "$EOF" >> "$GITHUB_OUTPUT" + + - uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + model: claude-sonnet-4-6 + review_instructions: ${{ steps.review.outputs.instructions }}