ReviewBot/README.md
Raykov-MS cb4bb4a399 E2E
2026-02-28 20:07:50 +03:00

3.8 KiB
Raw Blame History

CodeReview Bot (MVP)

Реализовано в текущем MVP:

  • Регистрация в Telegram: /register <git_email> <gitea_login>
  • Период недоступности: /away <YYYY-MM-DD> <YYYY-MM-DD>
  • Webhook Gitea по PR:
    • при создании PR без ревьюера бот назначает доступного участника с минимальной нагрузкой
    • ставит метку auto-assigned (best effort)
    • отправляет уведомление назначенному ревьюеру в личные сообщения Telegram
  • Ежедневное напоминание в общее время REMINDER_TIME (по умолчанию 09:00)
  • Техническая проверка сервиса: GET /health

Запуск

python -m venv .venv
. .venv/Scripts/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8080 --reload --env-file .env

Переменные окружения

  • TELEGRAM_BOT_TOKEN - обязательно
  • TELEGRAM_WEBHOOK_SECRET - обязательно, секрет для заголовка X-Telegram-Bot-Api-Secret-Token
  • GITEA_BASE_URL - обязательно для назначения ревьюера, например https://git.example.com
  • GITEA_TOKEN - обязательно для назначения/меток
  • GITEA_WEBHOOK_SECRET - обязательно, общий секрет webhook от Gitea
  • REMINDER_TIME - необязательно, по умолчанию 09:00
  • AUTO_ASSIGNED_LABEL - необязательно, по умолчанию auto-assigned
  • ALLOW_SELF_ASSIGN - необязательно, по умолчанию false (для локального теста можно true)
  • TELEGRAM_ALLOWED_CHAT_IDS - необязательно, CSV списка chat_id, которым можно управлять ботом
  • TELEGRAM_ALLOWED_USERNAMES - необязательно, CSV списка Telegram username (без @)
  • GITEA_COUNT_REPOS - необязательно, CSV репозиториев org/repo для расчета нагрузки ревьюеров
  • BOT_DB_PATH - необязательно, по умолчанию botreviewer.sqlite3

Webhook-эндпоинты

  • Обновления Telegram: POST /telegram/webhook
  • Webhook Gitea: POST /gitea/webhook

Для Telegram укажите URL вашего сервиса с путем /telegram/webhook и secret_token. Для Gitea включите события pull_request и задайте общий секрет.

Локальная разработка через Tuna

Если бот запущен локально, Gitea/Telegram не смогут достучаться до localhost без туннеля.

  1. Запустите бота:
uvicorn main:app --host 0.0.0.0 --port 8080 --reload --env-file .env
  1. Поднимите туннель в Tuna(https://my.tuna.am/) на локальный порт 8080 и получите публичный URL, например:
https://example.ru.tuna.am
  1. Проверьте доступность сервиса:
https://example.ru.tuna.am/health
  1. Настройте webhook в Gitea:
  • Target URL: https://example.ru.tuna.am/gitea/webhook
  • Method: POST
  • Content Type: application/json
  • Secret: тот же, что в GITEA_WEBHOOK_SECRET
  • Events: Pull Request (Custom Events)
  1. Настройте webhook в Telegram:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook?url=https://example.ru.tuna.am/telegram/webhook&secret_token=<TELEGRAM_WEBHOOK_SECRET>
  1. Проверьте, что webhook установлен:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getWebhookInfo