fix(release): extract only current version section for release notes #27
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant!27
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/release-extract-version-section"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
scripts/create_release.py:f.read()заменён наextract_changelog_section(path, tag)(импорт из нового модуляscripts/release_notes.py)scripts/release_notes.pyвынесен отдельно — импорт функции не триггерит module-level env-кодcreate_release.py(GITHUB_* vars), тестируемоscripts/__init__.pyдобавлен — mypy видитscriptsкак пакет (иначе "found twice under different module names")tests/test_create_release.py: 12 cases (happy, тире/дефис, not-found, missing, empty, шапка, links, multisection, trailing-ws, tag без v, tag не версия)Почему
Forgejo уже показывает тег и дату релиза в UI — дублирование шапки
# Changelog, boilerplate про Keep a Changelog и self-referential ссылки[0.1.0]: https://.../releases/tag/v0.1.0(ссылка на страницу, где уже находится пользователь) в release notes. Тот же фикс что в video_uniq issue #9.Watch out
-(дефис) и—(тире): regex^## \[VERSION\]\s*[-—]\s*\d{4}-\d{2}-\d{2}scripts/gen_phrases.py— pre-existing (на master), не трогалPending
—
Closes #24
Code Review Summary
PR заменяет
f.read()вscripts/create_release.pyна вызовextract_changelog_section()из нового модуляscripts/release_notes.py. Экстрактор находит секцию текущей версии в CHANGELOG.md, срезает заголовок/дату/шапку/trailing self-referential links. Качество кода высокое, тесты покрывают все граничные случаи.Что проверено
git diff master...HEAD— 4 файла, +222/-2uv run ruff check scripts/release_notes.py tests/test_create_release.py scripts/create_release.py— All checks passeduv run mypy scripts/— Success: no issues found in 4 source filesuv run pytest tests/test_create_release.py— 12 passeduv run pytest(весь набор) — 223 passed, coverage 78.29%uv run ruff check scripts/ tests/— единственная ошибка W292 вscripts/gen_phrases.py— pre-existing на master (PR не модифицирует этот файл,git diff master -- scripts/gen_phrases.pyпусто)uv run xenon scripts/release_notes.py— rank C для функции, но CI запускает xenon только наsrc/(uv run xenon ... src/), не блокируетrg "release_notes|extract_changelog_section|CHANGELOG"— writer↔reader в одном PR (create_release.py обновлён совместно), внешних readers нетСоответствие критериям приёмки issue #24
f.read()заменён на экстрактор (create_release.py:37)^## [VERSION]\s*[-—]\s*\d{4}-\d{2}-\d{2}, срез заголовка (lines[1:]), шапки (6 фильтров RU+EN), trailing links (^\[.*\]:\s*https://.*$)text.strip()+logger.warningreturn ""(не падает)Positives
create_release.py(GITHUB_* vars), тестируемо-и тире—через[-—]scripts/__init__.pyрешает mypy "found twice under different module names"Suggestions (info, not blocking)
loggingмодуль вместо loguru (конвенция проекта дляsrc/voice_assistant/). Дляscripts/tooling это допустимо —create_release.pyуже используетprint(), аlogging.getLogger(__name__)— стандартный паттерн для library-функций. Не блокер.scripts/(толькоsrc/), но при расширении фильтров стоит вынести в именованную функцию_is_boilerplate(line).Verdict: APPROVE