раздел 10 · подстраница 5

Claude в GitHub Actions

Anthropic выпустил официальный GitHub Action - anthropics/claude-code-action. Подключаете его к репозиторию, и Claude может авто-ревьюить PR, отвечать на комментарии, чинить issues - всё в рамках workflow.

Концепция

Action - это контейнер, в котором запускается Claude Code в headless-режиме. Получает контекст из GitHub-события (PR diff, комментарий, issue body), выполняет промпт, постит результат обратно как комментарий PR / коммит / новый PR.

Триггеры могут быть любые: pull_request, issue_comment, workflow_dispatch, schedule.

Подготовка

Шаг 1. API-ключ Anthropic

Получаете на console.anthropic.com и кладёте в secrets репозитория:

Settings → Secrets and variables → Actions → New repository secret
Name: ANTHROPIC_API_KEY
Value: sk-ant-api03-...

Без ключа Claude в Actions работать не будет (OAuth-токен подписки в CI не пробросишь).

Шаг 2. GitHub App (опционально, но рекомендуется)

Чтобы Claude мог постить от своего имени, а не от пользователя workflow - установите Claude GitHub App. Это даст бот-токен с правильными правами.

Полный workflow

Создайте файл .github/workflows/claude.yml:

name: Claude

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  pull_request:
    types: [opened, synchronize]

jobs:
  claude:
    if: |
      (github.event_name == 'pull_request') ||
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          model: claude-sonnet-4-6
          mode: review
          # путь к кастомным агентам (опционально)
          agents_path: .claude/agents

Workflow срабатывает на:

  1. Каждый новый PR или его обновление - Claude автоматически ревьюит diff.
  2. Комментарий в PR с упоминанием @claude - Claude отвечает на запрос.
  3. Комментарий к строке кода с @claude - Claude отвечает в контексте этой строки.

Сценарии использования

Авто-ревью каждого PR

on:
  pull_request:
    types: [opened, synchronize]

При каждом push в feature-ветку - Claude скачивает diff и оставляет ревью-комментарий. Полезно для:

  • Внешних контрибьюторов (первичный фильтр перед человеком)
  • Команды с разным уровнем (junior получает фидбэк сразу)
  • Соло-проектов (внешний голос, который заметит, что вы пропустили)

Реакция на @claude в комментариях

on:
  issue_comment:
    types: [created]

Любой коллаборатор пишет в PR:

@claude почему ты считаешь, что этот await не нужен?

Claude отвечает в той же ветке.

Авто-fix по команде

on:
  issue_comment:
    types: [created]

jobs:
  fix:
    if: |
      contains(github.event.comment.body, '/claude fix')

Пишете в PR /claude fix - почини падающие тесты - Claude правит код, коммитит в ту же ветку.

Тонкости

Permissions

contents: write - обязательно, если Claude будет коммитить. pull-requests: write - чтобы постить комментарии в PR. issues: write - чтобы отвечать в issues.

Дайте только то, что нужно для вашего сценария.

Лимиты по токенам в Action

В платных раннерах нет жёсткого CPU/memory лимита под Claude, но API-токены тратятся ваши. Большой PR (10k строк diff) может съесть $5-10 за один ревью. Используйте Sonnet, не Opus, для типовых ревью.

Безопасность - PR от внешних

Стоимость

Раннеры на GitHub-Hosted - бесплатно для публичных репо, оплачиваются для приватных (по минутам). Сам Claude - по вашему API-токену.

Альтернатива - своя интеграция через headless

Если стандартный action не подходит - можно вызвать claude -p напрямую:

- name: Custom Claude task
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
  run: |
    npm install -g @anthropic-ai/claude-code
    git diff HEAD~1 | claude -p "ревью этого diff" > review.md
    gh pr comment ${{ github.event.pull_request.number }} --body-file review.md

Больше контроля, но и больше boilerplate.

Антипаттерны

  • Подключить action и игнорировать ревью. Со временем команда привыкнет, что Claude "всегда что-то пишет", и реальные замечания пропустят.
  • Дать --dangerously-skip-permissions в Actions без явных гардрейлов.
  • Запускать на каждый push в main - быстро сожжёте бюджет.
  • Делать Claude единственным reviewer'ом. Это помощник, не замена ревьюера.

Полезные ссылки