|
|
name: Review code |
|
|
|
|
|
on: |
|
|
pull_request: |
|
|
types: [opened, synchronize, reopened] |
|
|
|
|
|
permissions: {} |
|
|
|
|
|
jobs: |
|
|
review: |
|
|
name: Review |
|
|
runs-on: ubuntu-24.04 |
|
|
permissions: |
|
|
contents: read |
|
|
id-token: write |
|
|
pull-requests: write |
|
|
|
|
|
steps: |
|
|
- name: Check out repo |
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
|
|
with: |
|
|
fetch-depth: 0 |
|
|
persist-credentials: false |
|
|
|
|
|
- name: Check for Vault team changes |
|
|
id: check_changes |
|
|
run: | |
|
|
# Ensure we have the base branch |
|
|
git fetch origin ${{ github.base_ref }} |
|
|
|
|
|
echo "Comparing changes between origin/${{ github.base_ref }} and HEAD" |
|
|
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) |
|
|
|
|
|
if [ -z "$CHANGED_FILES" ]; then |
|
|
echo "Zero files changed" |
|
|
echo "vault_team_changes=false" >> $GITHUB_OUTPUT |
|
|
exit 0 |
|
|
fi |
|
|
|
|
|
# Handle variations in spacing and multiple teams |
|
|
VAULT_PATTERNS=$(grep -E "@bitwarden/team-vault-dev(\s|$)" .github/CODEOWNERS 2>/dev/null | awk '{print $1}') |
|
|
|
|
|
if [ -z "$VAULT_PATTERNS" ]; then |
|
|
echo "⚠️ No patterns found for @bitwarden/team-vault-dev in CODEOWNERS" |
|
|
echo "vault_team_changes=false" >> $GITHUB_OUTPUT |
|
|
exit 0 |
|
|
fi |
|
|
|
|
|
vault_team_changes=false |
|
|
for pattern in $VAULT_PATTERNS; do |
|
|
echo "Checking pattern: $pattern" |
|
|
|
|
|
# Handle **/directory patterns |
|
|
if [[ "$pattern" == "**/"* ]]; then |
|
|
# Remove the **/ prefix |
|
|
dir_pattern="${pattern#\*\*/}" |
|
|
# Check if any file contains this directory in its path |
|
|
if echo "$CHANGED_FILES" | grep -qE "(^|/)${dir_pattern}(/|$)"; then |
|
|
vault_team_changes=true |
|
|
echo "✅ Found files matching pattern: $pattern" |
|
|
echo "$CHANGED_FILES" | grep -E "(^|/)${dir_pattern}(/|$)" | sed 's/^/ - /' |
|
|
break |
|
|
fi |
|
|
else |
|
|
# Handle other patterns (shouldn't happen based on your CODEOWNERS) |
|
|
if echo "$CHANGED_FILES" | grep -q "$pattern"; then |
|
|
vault_team_changes=true |
|
|
echo "✅ Found files matching pattern: $pattern" |
|
|
echo "$CHANGED_FILES" | grep "$pattern" | sed 's/^/ - /' |
|
|
break |
|
|
fi |
|
|
fi |
|
|
done |
|
|
|
|
|
echo "vault_team_changes=$vault_team_changes" >> $GITHUB_OUTPUT |
|
|
|
|
|
if [ "$vault_team_changes" = "true" ]; then |
|
|
echo "" |
|
|
echo "✅ Vault team changes detected - proceeding with review" |
|
|
else |
|
|
echo "" |
|
|
echo "❌ No Vault team changes detected - skipping review" |
|
|
fi |
|
|
|
|
|
- name: Review with Claude Code |
|
|
if: steps.check_changes.outputs.vault_team_changes == 'true' |
|
|
uses: anthropics/claude-code-action@ac1a3207f3f00b4a37e2f3a6f0935733c7c64651 # v1.0.11 |
|
|
with: |
|
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} |
|
|
track_progress: true |
|
|
use_sticky_comment: true |
|
|
prompt: | |
|
|
REPO: ${{ github.repository }} |
|
|
PR NUMBER: ${{ github.event.pull_request.number }} |
|
|
TITLE: ${{ github.event.pull_request.title }} |
|
|
BODY: ${{ github.event.pull_request.body }} |
|
|
AUTHOR: ${{ github.event.pull_request.user.login }} |
|
|
COMMIT: ${{ github.event.pull_request.head.sha }} |
|
|
|
|
|
Please review this pull request with a focus on: |
|
|
- Code quality and best practices |
|
|
- Potential bugs or issues |
|
|
- Security implications |
|
|
- Performance considerations |
|
|
|
|
|
Note: The PR branch is already checked out in the current working directory. |
|
|
|
|
|
Provide a comprehensive review including: |
|
|
- Summary of changes since last review |
|
|
- Critical issues found (be thorough) |
|
|
- Suggested improvements (be thorough) |
|
|
- Good practices observed (be concise - list only the most notable items without elaboration) |
|
|
- Action items for the author |
|
|
- Leverage collapsible <details> sections where appropriate for lengthy explanations or code snippets to enhance human readability |
|
|
|
|
|
When reviewing subsequent commits: |
|
|
- Track status of previously identified issues (fixed/unfixed/reopened) |
|
|
- Identify NEW problems introduced since last review |
|
|
- Note if fixes introduced new issues |
|
|
|
|
|
IMPORTANT: Be comprehensive about issues and improvements. For good practices, be brief - just note what was done well without explaining why or praising excessively. |
|
|
|
|
|
claude_args: | |
|
|
--allowedTools "mcp__github_comment__update_claude_comment,mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)"
|
|
|
|