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

3.5 KiB

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 файла

# 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

# .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

При создании тега

# 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)

Ручная генерация

# При необходимости
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