7.7 KiB
7.7 KiB
Персистентные события Review и система версионирования
Что добавлено
1. Сохранение событий review в БД
Backend
- ✅ Модель
ReviewEventдля хранения событий процесса review - ✅ API endpoint
/api/reviews/{review_id}/eventsдля получения событий - ✅ Автоматическое сохранение всех событий в БД при обработке review
- ✅ Связь с моделью Review через relationship
Структура события:
class ReviewEvent:
id: int
review_id: int
event_type: str # agent_step, llm_message, review_started, etc.
step: Optional[str] # fetch_pr_info, analyze_files, etc.
message: Optional[str]
data: Optional[Dict]
created_at: datetime
Frontend
- ✅ Компонент
ReviewStreamзагружает исторические события из БД - ✅ События отображаются даже после завершения review
- ✅ При обновлении страницы события восстанавливаются
Использование:
<ReviewStream reviewId={reviewId} />
2. Показ версии бэкенда
Backend
- ✅ Файл
backend/VERSIONс текущей версией (semver format) - ✅ API endpoint
/api/versionдля получения версии
Frontend
- ✅ Компонент
Footerпоказывает версию внизу страницы - ✅ Автоматическое обновление версии каждые 5 минут
- ✅ Кеширование версии для производительности
3. Автоповышение версии (Git Hook)
Скрипты
bump_version.sh - Скрипт повышения версии:
bash bump_version.sh patch # 0.1.0 → 0.1.1
bash bump_version.sh minor # 0.1.0 → 0.2.0
bash bump_version.sh major # 0.1.0 → 1.0.0
.git-hooks/pre-commit - Pre-commit hook:
- Автоматически вызывается при каждом коммите
- Анализирует изменения в
backend/директории - Повышает версию на основе типа коммита
Правила версионирования
Версия повышается автоматически на основе префикса коммита:
| Префикс коммита | Изменение версии | Пример |
|---|---|---|
feat: или feature: |
MINOR | 0.1.0 → 0.2.0 |
fix: или bugfix: |
PATCH | 0.1.0 → 0.1.1 |
BREAKING: или major: |
MAJOR | 0.1.0 → 1.0.0 |
| Остальные | PATCH | 0.1.0 → 0.1.1 |
Примеры:
git commit -m "feat: Add new feature" # 0.1.0 → 0.2.0
git commit -m "fix: Fix critical bug" # 0.1.0 → 0.1.1
git commit -m "BREAKING: Remove old API" # 0.1.0 → 1.0.0
git commit -m "docs: Update README" # 0.1.0 → 0.1.1
Установка Git Hook
Чтобы активировать автоповышение версии:
# Из корня проекта
git config core.hooksPath .git-hooks
# Сделать hook исполняемым (Linux/Mac)
chmod +x .git-hooks/pre-commit
На Windows Git Bash автоматически обрабатывает права выполнения.
Отключение hook
Если нужно закоммитить без повышения версии:
# Одноразово
git commit --no-verify -m "Your message"
# Полностью отключить
git config core.hooksPath .git/hooks
Миграция БД
Для добавления таблицы review_events:
cd backend
python migrate.py
Или вручную:
sqlite3 backend/review.db < backend/migrations/add_review_events.sql
API Endpoints
Получить события review
GET /api/reviews/{review_id}/events
Ответ:
[
{
"id": 1,
"review_id": 1,
"event_type": "agent_step",
"step": "fetch_pr_info",
"message": "Получение информации о PR...",
"data": {},
"created_at": "2025-10-13T10:30:00"
}
]
Получить версию бэкенда
GET /api/version
Ответ:
{
"version": "0.1.0"
}
Структура проекта
├── backend/
│ ├── VERSION # Файл версии
│ ├── migrations/
│ │ └── add_review_events.sql # Миграция для таблицы событий
│ ├── app/
│ │ ├── models/
│ │ │ └── review_event.py # Модель события
│ │ ├── schemas/
│ │ │ └── review_event.py # Схемы события
│ │ └── api/
│ │ └── reviews.py # API endpoints
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── ReviewStream.tsx # Компонент стриминга
│ │ │ └── Footer.tsx # Футер с версией
│ │ └── api/
│ │ └── client.ts # API клиент
├── .git-hooks/
│ ├── pre-commit # Pre-commit hook
│ └── README.md # Документация hooks
├── bump_version.sh # Скрипт повышения версии
└── docs/
└── REVIEW_EVENTS_AND_VERSIONING.md # Эта документация
Обновление на сервере
После деплоя:
-
Применить миграции:
cd ~/code-review-agent/backend python migrate.py -
Перезапустить сервис:
sudo systemctl restart ai-review -
Проверить версию:
curl http://localhost:8000/api/version
Проверка работы
Backend
# Проверить что таблица создана
sqlite3 backend/review.db ".tables"
# Должна быть таблица review_events
# Проверить версию
cat backend/VERSION
# Должна быть версия в формате X.Y.Z
# Проверить API
curl http://localhost:8000/api/version
Frontend
- Откройте приложение в браузере
- Внизу страницы должна быть видна версия:
Backend v0.1.0 - Откройте страницу review
- Компонент "Процесс Review" должен показывать события даже после завершения
Troubleshooting
Git hook не работает
# Проверить настройку
git config core.hooksPath
# Переустановить
git config core.hooksPath .git-hooks
# На Windows может потребоваться Git Bash
События не сохраняются
# Проверить что таблица существует
sqlite3 backend/review.db "SELECT * FROM review_events LIMIT 1;"
# Применить миграцию
python backend/migrate.py
Версия не отображается на UI
- Проверьте что файл
backend/VERSIONсуществует - Проверьте endpoint:
curl http://localhost:8000/api/version - Проверьте консоль браузера на ошибки
- Очистите кеш браузера (Ctrl+F5)