CI: сверять версию в pyproject.toml с наличием одноимённого тега #28
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Второй пункт #16. Теги
v0.10.0–v0.18.0проставлены задним числом, но причина рассинхрона осталась: версия живёт вpyproject.toml, тег ставится руками, и разойтись они могут молча. Именно так и накопилось девять невыпущенных версий — консьюмер по пину из README не вставал вовсе.Что проверять
Шаг в
.forgejo/workflows/ci.ymlрядом со smoke: прочитатьversionизpyproject.tomlи сверить с тегами.Тонкость в том, что на ветке версия обязана опережать теги — её бампают в PR до релиза. Поэтому проверка осмысленна в двух местах и по-разному:
main— версия изpyproject.tomlдолжна иметь одноимённый тег; нет тега — красный CI с текстом «выпуститеvX.Y.Z»;Второй вариант заодно снимает ручную сверку очереди версий при параллельных PR.
Приёмка
mainотсутствие тега для текущей версии — красный CIfetch-depthв workflow уже задан для тегов или дотягивает их явно)Закрываю: сделано в #29, выпущено тегом
v0.22.0.Гейт
fixtures/check_version_tag.shотдельным шагом CI, три ветки проверки:vX.Y.ZmainТретья ветка — то, ради чего задача заводилась во второй части: ручную сверку очереди версий при параллельных PR теперь делает CI. За сегодня было три PR подряд, претендовавших на соседние номера, и очередь приходилось держать в голове.
Первая ветка появилась по ревью и оказалась важнее, чем выглядела:
on: pushсрабатывает и на пуш тега,ref_nameтам — имя тега, поэтому без неё гейт диагностировал бы корректный выпуск как «номер занят» и красил ровно тот коммит, на который консьюмер ставитrev:. Проверка «тег стоит на коммите с той же версией» тоже пришла из ревью — без неё исходная проблема закрывалась наполовину: тег на постороннем коммите резолвится у консьюмера в чужой код.fetch-depth: 0в checkout — при shallow-клоне тегов нет, и гейт падает с объяснением вместо зелёного вхолостую.Самопроверка — 12 кейсов на временных репозиториях (на живом репо вердикт меняется от коммита к коммиту). Фикстуры изолированы от наследованного git-контекста: под git-хуком они коммитили бы в посторонний репозиторий и печатали «пройден» вхолостую.
Порядок выпуска и следствия записаны в README: прогон
mainмежду мержем и тегом остаётся красным (тега тогда ещё не было), любой PR обязан бампать версию, ветки поддержки и пререлизные суффиксы не поддержаны.Сам этот релиз выпущен по новому порядку: мерж → тег → проверка.
bash fixtures/check_version_tag.sh mainна текущемmain— зелёный.