подключение

Подключение к GitHub

Бот ревьюит Pull Request'ы на github.com — тем же движком и с тем же .reviewgate/config.yml, что и на GitLab. Правильный способ подключения — GitHub App: он даёт боту собственную учётку, короткоживущие токены на инсталляцию и гейт через Checks API. Для быстрой пробы хватит personal access token.

1. GitHub App (рекомендуется)

Settings организации → Developer settings → GitHub Apps → New GitHub App. Из полей важны права и события — остальное (имя, homepage) произвольно.

право (Repository permissions)уровеньзачем
Pull requestsRead and writeдифф, сводка в ленте PR, строчные комментарии, ответы в тредах
ContentsRead-onlyфайлы репозитория: конфиг команды, соседние файлы для проверяющей модели
ChecksRead and writeseverity gate как check run (если вы его включили)
IssuesRead-onlyтолько чтобы стало доступно событие Issue comment — без него бот не увидит вопрос под сводкой
MetadataRead-onlyобязательное право GitHub

Subscribe to events — отметьте четыре:

  • Pull request — запуск ревью;
  • Pull request review comment — ответы бота в тредах его замечаний;
  • Pull request review — обращение к боту в тексте ревью («Review changes» с комментарием);
  • Issue comment — вопрос боту под сводкой (появляется в списке только после того, как выдано право Issues).
права меняются в два шагаГалочка в настройках App меняет права только у самого App. Каждая инсталляция должна принять новый набор: Settings организации → GitHub Apps → Configure → «Accept new permissions». Пока это не сделано, GitHub продолжает слать старый набор событий и новое право не действует — снаружи это выглядит как «бот молчит», без единой ошибки в логах. Проверить фактическое состояние можно, сравнив GET /app и GET /repos/{owner}/{repo}/installation.

Сгенерируйте приватный ключ (Private keys → Generate a private key) и закодируйте его одной строкой — переносы строк в значении переменной окружения бота не переживут:

терминал
base64 -w0 reviewgate.private-key.pem   # macOS: base64 -i … | tr -d '\n'

Значение — в GITHUB_APP_PRIVATE_KEY_B64, номер App — в GITHUB_APP_ID. Затем установите App на организацию или на отдельные репозитории (Install App). Полный список переменных — Установка и запуск.

Вариант попроще: personal access token

Вместо пары App достаточно GITHUB_TOKEN — fine-grained token с правами Pull requests (write), Contents (read), Commit statuses (write). Отличия от App:

  • комментарии идут от вашей личной учётки, а не от учётки бота;
  • гейт деградирует с Checks API до commit status — блокировка работает, но описание статуса GitHub обрезает до 140 символов;
  • лимит запросов общий с остальной вашей активностью на GitHub;
  • бот не отвечает на комментарии той учётки, чьим токеном он работает — это защита от зацикливания. То есть в PAT-режиме диалог доступен другим участникам, но не вам; для полноценного диалога нужен App.

2. Вебхук

В настройках App (или репозитория, если вы на PAT): Webhook → Active. URL — адрес бота с путём вебхука:

URL вебхука
https://адрес-бота/api/webhooks/github
  • Content typeapplication/json. Форму (x-www-form-urlencoded, дефолт выпадашки GitHub) бот тоже принимает, с тем же потолком размера тела, но json честнее: подпись считается по тем же байтам, что вы видите в доставке.
  • Secret — то же значение, что в GITHUB_WEBHOOK_SECRET. Бот проверяет подпись X-Hub-Signature-256 по сырому телу запроса сравнением постоянного времени; запрос без подписи или с чужой получает 401.

Проверить доставку можно там же: Advanced → Recent Deliveries → Redeliver. Ожидаемый ответ бота — 202.

Какие события ревьюятся

событиеповедение
opened / reopened / ready_for_reviewревью запускается
synchronize (новые коммиты)ревью запускается на новом head; повторно проверяются только изменившиеся файлы
edited (смена целевой ветки)ревью полное — дифф пересобран от новой базы
closed / только лейблигнорируется — лишних прогонов нет
комментарий в PRпри включённом reply mode бот отвечает; см. ниже про упоминание
текст в теле ревью (Review changes → Submit)при упоминании бота он отвечает отдельным комментарием в ленте: своего треда у тела ревью нет

Диалог с ботом

В треде своего замечания бот отвечает на реплику сам. Лента PR у GitHub не тредирована, поэтому под сводкой он отвечает только на прямое упоминание своей учётки — иначе бот вклинивался бы в любой разговор людей под PR.

Тот же случай — текст ревью («Review changes» с комментарием): своего треда у него нет, поэтому на упоминание бот отвечает отдельным комментарием в ленте. Ответ ссылается на вопрос, но GitHub не покажет их связанной перепиской — это ограничение площадки, а не бота.

Что увидит команда

  • строчные комментарии по позициям диффа; если включён committable_suggestions в .reviewgate/config.yml (по умолчанию выключен) — у части замечаний готовый фикс кнопкой «Commit suggestion»;
  • сводный комментарий в ленте PR — он обновляется на месте, а не плодится на каждый пуш;
  • check run reviewgate — только если включён severity gate (по умолчанию выключен).
чего пока нетПоддержка заявлена для github.com. GitHub Enterprise Server бот умеет адресовать (GITHUB_BASE_URL), но вживую на GHES мы его не прогоняли — и не будем это заявлять, пока не прогоним.