AIDevOpsGitHub

Автоматизация ревью кода с помощью AI и GitHub Actions

·MAGMA

Автоматическое ревью 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.

Вернуться к блогу
Автоматизация ревью кода через AI и GitHub Actions — MAGMA