code-review-agent/docs/REVIEW_EVENTS_AND_VERSIONING.md
2025-10-13 14:20:23 +03:00

265 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Персистентные события Review и система версионирования
## Что добавлено
### 1. Сохранение событий review в БД
#### Backend
- ✅ Модель `ReviewEvent` для хранения событий процесса review
- ✅ API endpoint `/api/reviews/{review_id}/events` для получения событий
- ✅ Автоматическое сохранение всех событий в БД при обработке review
- ✅ Связь с моделью Review через relationship
**Структура события:**
```python
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
- ✅ При обновлении страницы события восстанавливаются
**Использование:**
```tsx
<ReviewStream reviewId={reviewId} />
```
### 2. Показ версии бэкенда
#### Backend
- ✅ Файл `backend/VERSION` с текущей версией (semver format)
- ✅ API endpoint `/api/version` для получения версии
#### Frontend
- ✅ Компонент `Footer` показывает версию внизу страницы
- ✅ Автоматическое обновление версии каждые 5 минут
- ✅ Кеширование версии для производительности
### 3. Автоповышение версии (Git Hook)
#### Скрипты
**`bump_version.sh`** - Скрипт повышения версии:
```bash
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 |
**Примеры:**
```bash
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
Чтобы активировать автоповышение версии:
```bash
# Из корня проекта
git config core.hooksPath .git-hooks
# Сделать hook исполняемым (Linux/Mac)
chmod +x .git-hooks/pre-commit
```
На Windows Git Bash автоматически обрабатывает права выполнения.
## Отключение hook
Если нужно закоммитить без повышения версии:
```bash
# Одноразово
git commit --no-verify -m "Your message"
# Полностью отключить
git config core.hooksPath .git/hooks
```
## Миграция БД
Для добавления таблицы `review_events`:
```bash
cd backend
python migrate.py
```
Или вручную:
```bash
sqlite3 backend/review.db < backend/migrations/add_review_events.sql
```
## API Endpoints
### Получить события review
```http
GET /api/reviews/{review_id}/events
```
**Ответ:**
```json
[
{
"id": 1,
"review_id": 1,
"event_type": "agent_step",
"step": "fetch_pr_info",
"message": "Получение информации о PR...",
"data": {},
"created_at": "2025-10-13T10:30:00"
}
]
```
### Получить версию бэкенда
```http
GET /api/version
```
**Ответ:**
```json
{
"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 # Эта документация
```
## Обновление на сервере
После деплоя:
1. Применить миграции:
```bash
cd ~/code-review-agent/backend
python migrate.py
```
2. Перезапустить сервис:
```bash
sudo systemctl restart ai-review
```
3. Проверить версию:
```bash
curl http://localhost:8000/api/version
```
## Проверка работы
### Backend
```bash
# Проверить что таблица создана
sqlite3 backend/review.db ".tables"
# Должна быть таблица review_events
# Проверить версию
cat backend/VERSION
# Должна быть версия в формате X.Y.Z
# Проверить API
curl http://localhost:8000/api/version
```
### Frontend
1. Откройте приложение в браузере
2. Внизу страницы должна быть видна версия: `Backend v0.1.0`
3. Откройте страницу review
4. Компонент "Процесс Review" должен показывать события даже после завершения
## Troubleshooting
### Git hook не работает
```bash
# Проверить настройку
git config core.hooksPath
# Переустановить
git config core.hooksPath .git-hooks
# На Windows может потребоваться Git Bash
```
### События не сохраняются
```bash
# Проверить что таблица существует
sqlite3 backend/review.db "SELECT * FROM review_events LIMIT 1;"
# Применить миграцию
python backend/migrate.py
```
### Версия не отображается на UI
1. Проверьте что файл `backend/VERSION` существует
2. Проверьте endpoint: `curl http://localhost:8000/api/version`
3. Проверьте консоль браузера на ошибки
4. Очистите кеш браузера (Ctrl+F5)