подключение

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

Боту нужны две вещи: токен со scope api (читать дифф, писать комментарии и статусы) и вебхук в проекте, который дёргает бота на событиях Merge Request и комментариев.

1. Токен бота

Лучше завести отдельного пользователя-бота и выдать Project Access Token (или Personal Access Token) со scope api. Значение — в GITLAB_TOKEN.

права токенаРоль не ниже Developer — чтобы оставлять discussion-комментарии. Commit status нужен, только если вы включили severity gate (по умолчанию он выключен); при нехватке прав на статус ревью всё равно опубликуется — бот не падает. Вебхук ниже вы создаёте руками, поэтому Developer хватает; если будете заводить его через API — на это нужен Maintainer, Developer получит 403.

2. Вебхук проекта

В проекте: Settings → Webhooks → Add new webhook.

  • URL — адрес бота с путём вебхука:
URL вебхука
https://адрес-бота/api/webhooks/gitlab
  • Secret token — то же значение, что в GITLAB_WEBHOOK_SECRET. Бот сверяет его сравнением постоянного времени.
  • Trigger — отметьте Merge request events и Comments (note events — нужны для reply mode; пока он не включён в конфиге, события комментариев бот просто игнорирует). Если вебхук создан раньше — до-включите Comments в Settings → Webhooks → Edit; diagnose.sh --project проверяет это автоматически.

Нажмите Test → Merge request events. Ожидаемый ответ — 202: бот принял задачу в очередь.

self-hosted сетьЕсли бот стоит во внутренней сети, разрешите GitLab ходить туда: Admin → Settings → Network → Outbound requests → «Allow requests to the local network from webhooks».

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

событиеповедение
open / reopenревью запускается
update (новые коммиты)ревью запускается на новом head
update (только лейбл/описание)игнорируется — лишних прогонов нет
комментарий в MR (note)при включённом reply mode бот отвечает в треде; иначе игнорируется
дедупликацияЗадача в очереди ключуется как проект:mr:headSha (ответ на реплику — по id комментария) — повторные доставки вебхука от GitLab не порождают дублей.

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

  • строчные discussion-комментарии по позициям диффа;
  • сводный комментарий с группировкой по severity;
  • при включённом reply mode — ответы бота на реплики в тредах его замечаний (сводка подсказывает команде, что боту можно ответить);
  • commit status (success/failed) — только если включён severity gate (по умолчанию выключен); тогда блокирует merge при «pipeline must succeed».