4.0 KiB
4.0 KiB
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-TokenGITEA_BASE_URL- обязательно для назначения ревьюера, напримерhttps://git.example.comGITEA_TOKEN- обязательно для назначения/метокGITEA_WEBHOOK_SECRET- обязательно, общий секрет webhook от GiteaREMINDER_TIME- необязательно, по умолчанию09:00AUTO_ASSIGNED_LABEL- необязательно, по умолчаниюauto-assignedAUTO_ASSIGN_REVIEWERS_COUNT- необязательно, по умолчанию2(сколько ревьюеров назначать автоматически)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 без туннеля.
- Запустите бота:
uvicorn main:app --host 0.0.0.0 --port 8080 --reload --env-file .env
- Поднимите туннель в Tuna(https://my.tuna.am/) на локальный порт
8080и получите публичный URL, например:
https://example.ru.tuna.am
- Проверьте доступность сервиса:
https://example.ru.tuna.am/health
- Настройте 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)
- Настройте webhook в Telegram:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook?url=https://example.ru.tuna.am/telegram/webhook&secret_token=<TELEGRAM_WEBHOOK_SECRET>
- Проверьте, что webhook установлен:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getWebhookInfo