← Интеграции

GitHub Actions

ревью pull request, PR-Agent и Claude Code в workflow

Что даёт

Автоматическое ревью и описание pull request: простой шаг на curl, PR-Agent (Qodo Merge) или Claude Code как action; тот же ключ работает в любом другом шаге workflow.

Эндпоинт: POST https://api.morsmorii.ru/v1/chat/completions

Какую модель брать

ревью — claude-sonnet-5-5; описания и короткие тексты — claude-haiku-4-5

Ревью diff требует понимания кода — Sonnet 5.5; описания PR и changelog — короткие тексты, Haiku пишет их за копейки.

Ориентир стоимости

ревью MR на 300 строк: ~20 000 токенов на входе и 2 000 на выходе — около 19 ₽; сообщение коммита или описание MR на Haiku 4.5: ~3 000 токенов на входе — около 1 ₽

Конфигурация

Вместо sk-ВАШ_КЛЮЧ_MORSMORII подставьте ключ из раздела «API-ключи». Для инструмента лучше завести отдельный ключ с ограничением по моделям и бюджетом.

.github/workflows/ai-review.yml — ревью diff одним шагом
# Settings → Secrets and variables → Actions: MORSMORII_API_KEY
# (ключ ограничьте моделями claude-sonnet-5-5 и claude-haiku-4-5 и бюджетом)
name: AI review
on: pull_request
permissions:
  contents: read
  pull-requests: write
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - name: Ревью моделью Morsmorii
        env:
          MORSMORII_API_KEY: ${{ secrets.MORSMORII_API_KEY }}
          GH_TOKEN: ${{ github.token }}
        run: |
          DIFF=$(git diff "origin/${{ github.base_ref }}...HEAD" | head -c 60000)
          jq -n --arg d "$DIFF" '{model:"claude-sonnet-5-5",max_tokens:1500,
            messages:[{role:"system",content:"Ты ревьюер кода. По-русски и кратко: ошибки, риски, что улучшить."},
                      {role:"user",content:$d}]}' > req.json
          curl -sS --fail https://api.morsmorii.ru/v1/chat/completions \
            -H "Authorization: Bearer $MORSMORII_API_KEY" \
            -H "Content-Type: application/json" -d @req.json \
            | jq -r '.choices[0].message.content' > review.md
          gh pr comment "${{ github.event.pull_request.number }}" --body-file review.md
PR-Agent (Qodo Merge) как action: /review, /describe, /improve
name: PR-Agent
on:
  pull_request:
    types: [opened, reopened, ready_for_review]
  issue_comment:
permissions:
  issues: write
  pull-requests: write
  contents: read
jobs:
  pr_agent:
    runs-on: ubuntu-latest
    steps:
      - uses: qodo-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI__KEY: ${{ secrets.MORSMORII_API_KEY }}
          OPENAI__API_BASE: https://api.morsmorii.ru/v1
          CONFIG__MODEL: openai/claude-sonnet-5-5
          CONFIG__FALLBACK_MODELS: '["openai/claude-haiku-4-5"]'
          CONFIG__CUSTOM_MODEL_MAX_TOKENS: "200000"
          PR_DESCRIPTION__MODEL: openai/claude-haiku-4-5
Claude Code в workflow (anthropics/claude-code-action@v1) — по документации, отвечает на @claude в PR
name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
permissions:
  contents: write
  pull-requests: write
  issues: write
  id-token: write
jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    env:
      ANTHROPIC_BASE_URL: https://api.morsmorii.ru   # без /v1
      ANTHROPIC_MODEL: claude-sonnet-5-5
      ANTHROPIC_DEFAULT_HAIKU_MODEL: claude-haiku-4-5
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.MORSMORII_API_KEY }}   # уйдёт как x-api-key

Как ограничить ключ

  1. В разделе «API-ключи» создайте отдельный ключ для этого инструмента — так расход виден отдельно, а отзыв не заденет остальное.
  2. В поле «Модели» оставьте только рекомендованные выше: ключ ответит 403 на любую другую модель.
  3. Задайте месячный бюджет в рублях: после него — 429 key_budget_exceeded, списание останавливается.
  4. В команде каждый сотрудник заводит свои ключи: расход по людям видно в разделе «Команда» и в GET /v1/usage.

Тонкости

  • Ключ — только в Secrets, не в файле workflow. Для CI заведите отдельный ключ с бюджетом: при превышении API ответит 429 key_budget_exceeded, и шаг упадёт, а не спишет лишнее.
  • curl с --fail валит шаг на 4xx/5xx; в ответе есть x-request-id — его стоит приложить к обращению в поддержку.
  • Большой diff обрезайте (head -c 60000 ≈ 15 тыс. токенов): на Sonnet 5.5 такое ревью стоит 10–20 ₽.
Как проверено: проверено его же запросами. Шаг на curl выполнен в контейнере ubuntu с jq по diff этого репозитория (ответ 200, ревью по-русски); запрос PR-Agent воспроизведён в его формате (system+user, temperature 0.2). Запуск внутри GitHub Actions и claude-code-action — по документации GitHub и Anthropic.