Files
voidea/docs/backlog/changelog-generation-note.md

172 lines
3.5 KiB
Markdown

# CHANGELOG Generation - VoIdea
**Дата:** 2026-05-10
**Статус:** Backlog
---
## Обзор
Автоматическая генерация CHANGELOG на основе коммитов и conventional commits.
---
## Структура файлов
```
CHANGELOG/
├── v1.0.md # При смене MAJOR (1.0.0 -> 1.1.0 -> ...)
├── v1.1.md # При смене MINOR
├── v2.0.md # При смене MAJOR
└── ...
```
### Правила
- **MAJOR (X)** → новый файл vX.0.md
- **MINOR (Y)** → новый файл vX.Y.md
- **PATCH (Z)** → добавляется в конец существующего файла
---
## Формат CHANGELOG файла
```markdown
# Changelog v1.0
## [1.0.5] - 2026-05-10
### Added
- Feature X (commit: abc123)
### Fixed
- Bug Y (commit: def456)
## [1.0.4] - 2026-05-09
### Added
- ...
## [1.0.0] - 2026-05-01
### Added
- Initial release
```
---
## Conventional Commits
| Тип | Влияние |
|-----|---------|
| `feat:` | Added (MINOR) |
| `fix:` | Fixed (PATCH) |
| `docs:` | Changed (no version) |
| `refactor:` | Changed (no version) |
| `test:` | Changed (no version) |
| `chore:` | Changed (no version) |
| `BREAKING:` | Major (MAJOR) |
---
## Генерация
### SpecAgent responsibilities
1. **Мониторинг тегов**
- При создании нового тега → запуск генерации
2. **Анализ коммитов**
- Парсинг conventional commits
- Группировка по типу
3. **Генерация файла**
- Определение какой файл создать/обновить
- Формирование записей
4. **Проверка**
- Валидация формата
- Сохранение в CHANGELOG/
---
## CI/CD Integration
### При push в main
```yaml
# .github/workflows/changelog.yml
name: Changelog
on:
push:
branches: [main]
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Changelog
run: python scripts/generate_changelog.py
- name: Commit
run: |
git add CHANGELOG/
git commit -m "docs: update changelog"
git push
```
### При создании тега
```python
# scripts/generate_changelog.py
import git
from pathlib import Path
def generate_changelog(tag: str):
commits = get_commits_since_last_tag()
changes = {
'added': [],
'fixed': [],
'changed': []
}
for commit in commits:
type, message = parse_conventional_commit(commit.message)
changes[type].append(f"- {message} ({commit.hash[:7]})")
update_changelog_file(tag, changes)
```
---
## Ручная генерация
```bash
# При необходимости
python scripts/generate_changelog.py --tag 1.0.0 --from 0.9.0
```
---
## Автоматическая документация
После генерации:
1. DocAgent обновляет PROJECT_GUIDE.md (ссылка на новую версию)
2. SpecAgent обновляет project.json
3. Уведомление в админ-панель
---
## TODO
- [ ] Создать scripts/generate_changelog.py
- [ ] Настроить CI/CD workflow
- [ ] Интегрировать со SpecAgent
- [ ] Добавить тесты
- [ ] Документировать процесс
---
*Создано: 2026-05-10*
*Управляется SpecAgent*