1+ name : Claude Code PR Review
2+
3+ on :
4+ pull_request :
5+ types : [synchronize, ready_for_review, reopened, labeled]
6+
7+ jobs :
8+ claude-code-pr-review :
9+ runs-on : ubuntu-latest
10+ if : contains(github.event.pull_request.labels.*.name, 'O-AI-Review')
11+ permissions :
12+ contents : read
13+ pull-requests : write
14+ id-token : write
15+ steps :
16+ - name : Checkout repository
17+ uses : actions/checkout@v5
18+ with :
19+ fetch-depth : 1
20+
21+ - name : Authenticate to Google Cloud
22+ uses : ' google-github-actions/auth@v3'
23+ with :
24+ project_id : ' vertex-model-runners'
25+ service_account : ' ai-review@dev-inf-prod.iam.gserviceaccount.com'
26+ workload_identity_provider : ' projects/72497726731/locations/global/workloadIdentityPools/ai-review/providers/github'
27+
28+ - name : Stage 1 - Initial Bug Screening
29+ id : stage1
30+ uses : cockroachdb/claude-code-action@v1
31+ with :
32+ use_vertex : " true"
33+ claude_args : |
34+ --model claude-sonnet-4-5-20250929
35+ --allowedTools "Read,Grep,Glob,Bash(gh pr diff:*),Bash(gh pr view:*)"
36+ track_progress : true
37+ prompt : |
38+ REPO: ${{ github.repository }}
39+ PR NUMBER: ${{ github.event.pull_request.number }}
40+
41+ Examine each line of code in this PR for potential bugs that could negatively impact
42+ CockroachDB users. Focus on:
43+ - Basic logic errors
44+ - Obvious security vulnerabilities
45+ - Clear error handling problems
46+ - Type safety issues
47+
48+ When performing your analysis, be conservative but thorough. You should think:
49+ "would I be willing to go to jail if my analysis is incorrect?"
50+
51+ **CRITICAL**: You must respond with EXACTLY one of these formats:
52+ 1. 'POTENTIAL_BUG_DETECTED - [brief description]' if you find a definite bug
53+ 2. 'NO_BUG_FOUND' if no obvious bugs are found
54+
55+ If you detect bugs, clearly explain what you found and why it's problematic.
56+
57+ **OUTPUT REQUIREMENT**: End your response with a single line containing only:
58+ - `STAGE1_RESULT - POTENTIAL_BUG_DETECTED` or
59+ - `STAGE1_RESULT - NO_BUG_FOUND`
60+
61+ - name : Stage 2 - Database Expert Review
62+ id : stage2
63+ if : contains(steps.stage1.outputs.result, 'STAGE1_RESULT - POTENTIAL_BUG_DETECTED')
64+ uses : cockroachdb/claude-code-action@v1
65+ with :
66+ use_vertex : " true"
67+ claude_args : |
68+ --model claude-4-5-sonnet-20250929
69+ --allowedTools "Read,Grep,Glob,Bash(gh pr diff:*),Bash(gh pr view:*)"
70+ track_progress : true
71+ prompt : |
72+ REPO: ${{ github.repository }}
73+ PR NUMBER: ${{ github.event.pull_request.number }}
74+
75+ You are a database systems expert providing a second opinion. Stage 1 analysis
76+ found potential issues. Your job is to confirm or reject those findings.
77+
78+ **Stage 1 Results**:
79+ ${{ steps.stage1.outputs.result }}
80+
81+ Review the Stage 1 findings and perform your own analysis. Do not identify
82+ new bugs unless they're glaringly obvious.
83+
84+ Be very thorough and conservative. Ask yourself: "would I risk losing my job
85+ over falsely identifying a bug?" If there's doubt, err on the side of
86+ NO_BUG_DETECTED.
87+
88+ **CRITICAL**: You must respond with EXACTLY one of these formats:
89+ 1. 'POTENTIAL_BUG_DETECTED - [detailed description of confirmed bugs]'
90+ 2. 'NO_BUG_FOUND' if bugs are not confirmed
91+
92+ **OUTPUT REQUIREMENT**: End your response with a single line containing only:
93+ - `STAGE2_RESULT - POTENTIAL_BUG_DETECTED [detailed description of confirmed bugs]` or
94+ - `STAGE2_RESULT - NO_BUG_FOUND`
95+
96+ - name : Stage 3 - Principal Engineer Final Review
97+ id : stage3
98+ if : contains(steps.stage2.outputs.result, 'STAGE2_RESULT - POTENTIAL_BUG_DETECTED')
99+ uses : cockroachdb/claude-code-action@v1
100+ with :
101+ use_vertex : " true"
102+ claude_args : |
103+ --model claude-4-5-sonnet-20250929
104+ --allowedTools "Read,Grep,Glob,Bash(gh pr diff:*),Bash(gh pr view:*)"
105+ track_progress : true
106+ prompt : |
107+ REPO: ${{ github.repository }}
108+ PR NUMBER: ${{ github.event.pull_request.number }}
109+
110+ You are a principal engineer performing the final, most critical analysis.
111+ Two previous stages have found potential issues that need final validation.
112+
113+ **Stage 1 Results**:
114+ ${{ steps.stage1.outputs.result }}
115+
116+ **Stage 2 Results**:
117+ ${{ steps.stage2.outputs.result }}
118+
119+ This is the final gate before flagging this PR as having critical bugs.
120+ Only confirm bugs that could cause:
121+ - Data loss or corruption
122+ - Incorrect errors, traps or panics
123+ - Security breaches
124+ - Cluster instability
125+ - Production outages
126+
127+ Be extremely conservative - only flag truly critical issues. If you're wrong,
128+ it could mean serious consequences for the project.
129+
130+ Use conservative language and minimize superlatives. Assume the reader has
131+ a heart condition - just articulate facts without emotion.
132+
133+ **CRITICAL**: You must respond with EXACTLY one of these formats:
134+ 1. 'BUG_DETECTED: [description, line numbers and suggested fix]'
135+ 2. 'NO_BUG_DETECTED' if issues are not critical enough
136+
137+ For each issue found, provide:
138+ 1. The specific line(s) where the issue occurs
139+ 2. A clear description of what is wrong
140+ 3. A suggested fix
141+
142+ **OUTPUT REQUIREMENT**: End your response with a single line containing only:
143+ - `STAGE3_RESULT: POTENTIAL_BUG_CONFIRMED` or
144+ - `STAGE3_RESULT: NO_BUG_FOUND`
145+
146+ - name : Final Analysis Report
147+ if : always()
148+ uses : cockroachdb/claude-code-action@v1
149+ with :
150+ use_vertex : " true"
151+ claude_args : |
152+ --model claude-4-5-sonnet-20250929
153+ --allowedTools "Read,Grep,Glob,Bash(gh pr diff:*),Bash(gh pr view:*)"
154+ prompt : |
155+ REPO: ${{ github.repository }}
156+ PR NUMBER: ${{ github.event.pull_request.number }}
157+
158+ ## Three-Stage Analysis Summary
159+
160+ Generate a final summary report based on the completed analysis stages:
161+
162+ **Stage 1 Result**: ${{ steps.stage1.outputs.result || 'Not completed' }}
163+ **Stage 2 Result**: ${{ steps.stage2.outputs.result || 'Skipped - Stage 1 found no bugs' }}
164+ **Stage 3 Result**: ${{ steps.stage3.outputs.result || 'Skipped - Stage 2 did not confirm bugs' }}
165+
166+ **Analysis Process**:
167+ - Stage 1 (Initial Screening): ${{ steps.stage1.conclusion }}
168+ - Stage 2 (Database Expert): ${{ steps.stage2.conclusion || 'Skipped' }}
169+ - Stage 3 (Principal Engineer): ${{ steps.stage3.conclusion || 'Skipped' }}
170+
171+ Provide a clear, concise summary of:
172+ 1. How many stages were executed
173+ 2. The final determination (critical bug found or no critical bugs)
174+ 3. If bugs were found, what actions are recommended
175+
176+ **If all three stages detected bugs**, this indicates a potential issue that warrants investigation.
0 commit comments