Releasing¶
Релизы выполняются через GitHub Actions и Python Semantic Release 10.7.0, по образцу pycdek. Версия, changelog, Git-тег, GitHub Release и публикация пакета формируются автоматически.
Release Flow¶
| Channel | Source | Trigger |
|---|---|---|
| Beta | Рабочая ветка, кроме master и next |
Ручной запуск Prerelease |
| RC | next |
Push или merge |
| Stable | master |
Push или merge |
В pull request запускается CI. Changelog обновляется при выпуске, а не отдельным коммитом в PR. Stable создаёт release-коммит с версией и changelog; beta и RC меняют эти файлы только в рабочем каталоге сборки, тег остаётся на исходном коммите. Поэтому для prerelease используйте wheel и sdist из PyPI или приложений GitHub Release: автоматически созданный архив Source code содержит исходную версию.
Для RC обязательна успешная матрица тестов Python × Requests. Ручная beta, как в pycdek, пропускает CI: сначала выполните проверки самостоятельно. Stable полагается на обязательные проверки PR перед merge; запущенный после него CI для master не блокирует публикацию.
Initial Setup¶
До первого выпуска необходимо:
- Отправить в GitHub конфигурацию, исходники и существующие теги
v0.1.x, сохранив их исходные коммиты. - Создать ветку
nextот согласованного состояния разработки. Ручные workflows доступны после добавления файлов в default branch. - Включить обязательные проверки PR в ruleset
master: все семь проверок Test (Python … / Requests …), Build package, Lint и Documentation. До их успешного завершения релиз не готов. - Создать GitHub environment
pypiи настроить PyPI Trusted Publishing для проектаgocream-pysberbank, ownergocream-labs, repositorypysberbank, environmentpypi. Нужны publishers дляrelease.ymlиprerelease.yml. Если проекта ещё нет, сначала создайте pending publisher для первого выпуска, затем добавьте второй. - Установить GitHub App с
Contents: Read and write, разрешить ему bypass rulesetmasterдля release-коммитов. Сохранить Client ID в Actions variableRELEASE_APP_CLIENT_ID, private key - в Actions secretRELEASE_APP_PRIVATE_KEY. - Выбрать GitHub Pages source: Deploy from a branch,
gh-pages,/ (root). Ветку создаёт первый deploy Mike. При необходимости добавитьCODECOV_TOKENдля загрузки покрытия.
Локальные файлы не создают эти настройки внешних сервисов. Ключи и токены не хранятся в репозитории.
Versioning¶
Сохраняется исторический формат тегов v{version}: v0.1.9, v1.0.0-b.1, v1.0.0-rc.1, v1.0.0. Python нормализует prerelease-версию в метаданных, например 1.0.0b1.
PSR рассчитывает версию по Git-тегам и сообщениям коммитов, а не по текущему значению __version__. При добавлении автоматизации в исходниках стоит 2.0.0-b.1, но последний локальный тег - v0.1.9. Само это значение не задаёт старт новой серии 2.x. Перед первым выпуском необходимо согласовать целевой номер и проверить preview; нельзя создавать фиктивный тег уже опубликованного релиза только ради нужного номера. Старые теги не переименовываются.
Уровни gitmoji описаны в Commits. При добавлении маркера обновляйте его уровень, allowed_tags и SECTION_TITLES в шаблоне. Здесь дополнительно поддерживается существующий маркер 🔇 для исправления небезопасного логирования.
Эти команды не изменяют файлы и не публикуют версии. Перед реальным выпуском синхронизируйте историю и теги с origin. При нескольких beta-ветках учитывайте общие уже опубликованные номера.
Changelog¶
Файл обновляется в режиме update по шаблонам из templates/. Сохраняйте маркер <!-- version list -->: новые версии вставляются под ним, а прежняя история остаётся ниже. Раздел 0.1.7 сохранён из старого changelog.
Вручную новые записи и разделы Unreleased не добавляются. Содержательное описание исправления должно находиться в коммите. Команда hatch run release:changelog записывает changelog локально для проверки шаблонов; результат предварительной генерации не нужно коммитить как историю выпущенной версии.
Publishing¶
Для beta отправьте рабочую ветку на GitHub и выберите её в Actions → Prerelease → Run workflow. Push в next выпускает RC после тестов. Для stable создайте PR в master, дождитесь обязательных проверок и выполните merge. Затем синхронизируйте master обратно в next.
Публикация PyPI и GitHub Release использует один комплект артефактов и выполняется независимыми jobs. При ошибке публикации повторяйте соответствующие упавшие jobs; создание нового тега не исправляет незавершённую публикацию прежней версии.
Documentation¶
MkDocs Material собирает страницы и API-справочник; Mike сохраняет версии сайта. Успешные тесты в next разрешают deploy версии next, а stable публикует major.minor с алиасом latest. Beta документацию не публикует. До первого stable корень сайта может возвращать 404: версия next доступна по своему пути.
hatch run docs:build
hatch run docs:links
hatch run docs:serve
hatch run docs:versions
hatch run docs:serve-versions
hatch run docs:links-external
CI выполняет строгую сборку и проверку внутренних ссылок. Проверка внешних ссылок запускается отдельно вручную.
Verification¶
После выпуска проверьте успешные publication jobs, версию в PyPI, GitHub Release и тег, соответствие wheel/sdist выбранной версии и доступность документации. Первый запуск требует отдельно проверить настройки GitHub App, branch rules, Trusted Publishers и Pages.