Подключение к 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 requests | Read and write | дифф, сводка в ленте PR, строчные комментарии, ответы в тредах |
| Contents | Read-only | файлы репозитория: конфиг команды, соседние файлы для проверяющей модели |
| Checks | Read and write | severity gate как check run (если вы его включили) |
| Issues | Read-only | только чтобы стало доступно событие Issue comment — без него бот не увидит вопрос под сводкой |
| Metadata | Read-only | обязательное право GitHub |
Subscribe to events — отметьте четыре:
- Pull request — запуск ревью;
- Pull request review comment — ответы бота в тредах его замечаний;
- Pull request review — обращение к боту в тексте ревью («Review changes» с комментарием);
- Issue comment — вопрос боту под сводкой (появляется в списке только после того, как выдано право Issues).
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 — адрес бота с путём вебхука:
https://адрес-бота/api/webhooks/github- Content type —
application/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 мы его не прогоняли — и не будем это заявлять, пока не прогоним.