Автоматическое ревью Pull Request'ов с использованием AI
Ревью кода часто становится узким местом в процессе разработки программного обеспечения. Чтобы ускорить этот процесс, можно использовать искусственный интеллект совместно с GitHub Actions.
Настройка workflow
Для начала необходимо создать файл .github/workflows/claude-review.yml, который будет запускаться при открытии или обновлении Pull Request'a:
on:
pull_request:
types: [opened, synchronized]
paths:
- "**/*.ts"
- "**/*.tsx"
- "**/*.py"
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get PR diff
run: git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff
- name: Claude review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: python3 scripts/claude_review.py /tmp/pr.diff > /tmp/review.md
- name: Post comment
uses: actions/github-script@v7
with:
script: |
const review = require("fs").readFileSync("/tmp/review.md", "utf8");
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: review
});
Скрипт для анализа изменений
Далее нужно создать скрипт scripts/claude_review.py для отправки изменений на анализ AI-модели:
#!/usr/bin/env python3
import sys, anthropic
def review_diff(path):
with open(path) as f:
diff = f.read()
if not diff.strip():
return "No changes to review."
if len(diff) > 80000:
diff = diff[:80000] + "\\n[truncated]"
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=(
"Senior engineer reviewing a PR diff. Identify: 1) Bugs/security (CRITICAL), 2) Performance (HIGH), 3) Code quality (MEDIUM).".
),
messages=[{"role": "user", "content": "Review:\\n\\n" + diff}]
)
return response.content[0].text
if __name__ == "__main__":
print(review_diff(sys.argv[1]))
Блокировка слияния при критических проблемах
Чтобы предотвратить слияние Pull Request'а с критическими проблемами, добавьте шаг проверки наличия таких проблем:
- name: Check for critical issues
run: |
if grep -q "Critical Issues" /tmp/review.md; then
if ! grep -A2 "Critical Issues" /tmp/review.md | grep -qi "none"; then
echo "Critical issues found -- blocking merge"
exit 1
fi
fi
Таким образом, вы можете автоматизировать процесс ревью кода, используя возможности искусственного интеллекта и GitHub Actions.