Задача
Автоматизировать первичное review Python PR без спама предупреждениями по старому коду. Результат должен появляться в привычном интерфейсе GitHub и сохраняться для истории.
GitHub App для review Python Pull Request. Бот анализирует только изменённые строки, объединяет Ruff с AI-инсайтами GigaChat, сохраняет результат и публикует структурированный комментарий в PR.
Система работает на границе нескольких внешних сервисов и должна отделять приём события от тяжёлого анализа diff.
Автоматизировать первичное review Python PR без спама предупреждениями по старому коду. Результат должен появляться в привычном интерфейсе GitHub и сохраняться для истории.
FastAPI проверяет webhook и ставит задачу в Celery. Воркер получает diff, запускает Ruff и GigaChat, сохраняет review в PostgreSQL и публикует комментарий через GitHub API.
Каждый шаг имеет отдельную ответственность: доверие к событию, получение diff, статический анализ, AI-обогащение и публикация.
FastAPI сверяет HMAC-подпись GitHub и отклоняет события, которые нельзя связать с доверенным отправителем.
HTTP-обработчик не выполняет review синхронно: данные события передаются Celery через Redis.
Воркер получает изменённые строки и читает .codereview.yml из ветки PR, применяя select, ignore и exclude.
Ruff даёт детерминированные замечания, а GigaChat добавляет рекомендации по архитектуре, безопасности и рефакторингу.
Результат сохраняется в PostgreSQL и публикуется структурированным комментарием в Pull Request; краткое уведомление может уйти в Telegram.
Архитектура сохраняет полезный результат даже при частичном отказе внешней AI-зависимости.
Подпись webhook проверяется на входе, поэтому недоверенное событие не попадает в очередь задач.
Бот фокусируется на строках PR и не повторяет автору весь накопленный технический долг репозитория.
Недоступность GigaChat снижает глубину review, но не останавливает базовый статический анализ.
Правила можно менять рядом с кодом без перезапуска сервиса и глобальной конфигурации для всех команд.
Репозиторий документирует путь от локального Docker-окружения до сборки образа в GHCR и развёртывания на VPS.
Unit-тесты используют pytest, pytest-asyncio и mocks для изоляции GitHub и AI-интеграций.
Установки GitHub App, репозитории и результаты review сохраняются в PostgreSQL с миграциями схемы.
Workflow запускает тесты, собирает контейнер, публикует образ и выполняет deployment через SSH.
Система снижает риски, но не пытается скрыть ограничения AI и интеграционной архитектуры.
При недоступности GigaChat review продолжается на Ruff, но рекомендации по архитектуре и семантике становятся ограниченнее.
Такой кэш прост и быстр, но при горизонтальном масштабировании потребует общего хранилища или согласованной стратегии обновления.
GitHub App key, webhook secret, AI credentials и SSH-доступ должны храниться вне репозитория и регулярно проверяться.
Ключевой результат — устойчивое сочетание deterministic tooling и AI: Ruff обеспечивает базовый сигнал, а GigaChat добавляет контекст там, где доступен.
В README описаны локальный запуск, GitHub App, .codereview.yml, Docker, миграции и CI/CD.