name: Claude PR Review permissions: contents: read pull-requests: write issues: write on: pull_request: types: [labeled] jobs: wait-for-ci: runs-on: ubuntu-latest if: github.event.label.name == 'claude-review' outputs: should-proceed: ${{ steps.check-status.outputs.proceed }} steps: - name: Wait for other CI checks uses: lewagon/wait-on-check-action@v1.3.1 with: ref: ${{ github.event.pull_request.head.sha }} check-regexp: '^(ESLint|Prettier Check|Tests CI|Vitest Tests)' wait-interval: 30 repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Check if we should proceed id: check-status run: | # Get all check runs for this commit CHECK_RUNS=$(gh api repos/${{ github.repository }}/commits/${{ github.event.pull_request.head.sha }}/check-runs --jq '.check_runs[] | select(.name | test("ESLint|Prettier Check|Tests CI|Vitest Tests")) | {name, conclusion}') # Check if any required checks failed if echo "$CHECK_RUNS" | grep -q '"conclusion": "failure"'; then echo "Some CI checks failed - skipping Claude review" echo "proceed=false" >> $GITHUB_OUTPUT else echo "All CI checks passed - proceeding with Claude review" echo "proceed=true" >> $GITHUB_OUTPUT fi env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} claude-review: needs: wait-for-ci if: needs.wait-for-ci.outputs.should-proceed == 'true' runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install dependencies for analysis tools run: | npm install -g typescript @vue/compiler-sfc - name: Run Claude PR Review uses: anthropics/claude-code-action@main with: prompt_file: .claude/commands/comprehensive-pr-review.md anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} max_turns: 1 timeout_minutes: 30 env: PR_NUMBER: ${{ github.event.pull_request.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ github.event.pull_request.head.sha }} BASE_SHA: ${{ github.event.pull_request.base.sha }} REPOSITORY: ${{ github.repository }}