リリース手順¶
magic-pocket (runtime lib) と magic-pocket-cli (deploy CLI) を PyPI へ
リリースするときの手順。tag X.Y.Z の push で GitHub Actions
(.github/workflows/release.yml、PyPI Trusted Publishing / OIDC) が両パッケージを
build & publish する。
バージョンの決め方 (SemVer)¶
- バグ修正のみ → patch (例:
0.2.1→0.2.2) - 後方互換な新機能 → minor (例:
0.3.0→0.4.0)。0.x でも feature は minor - 破壊的変更 → 0.x ではコミット内容次第で minor に含める (1.0 以降は major)
### Features を含むリリースは原則 minor バンプ。
手順¶
- version をバンプする (tag と一致が必須。
release.ymlの "Check tag matches package versions" が両 pyproject の version == tag を検証する): pyproject.tomlのversionpackages/magic-pocket-cli/pyproject.tomlのversionと依存magic-pocket>=X.Y.Zuv.lockを反映する (version バンプで差分が出る。uv lockかuv runで更新)。- CHANGELOG を確定する:
[Unreleased]を## [X.Y.Z](https://github.com/worgue/magic-pocket/releases/tag/X.Y.Z) - YYYY-MM-DDに書き換える。 - コミットする:
:bookmark: X.Y.Z リリース (<要約>)。 - main を push する:
git push origin main(pre-push hook で gitleaks / ruff / semgrep / pyright / pytest が走る。green でないと push されない)。 - tag を作成して push する:
git tag -a X.Y.Z -m "..."→git push origin X.Y.Z。 これでrelease.ymlが発火し PyPI publish される。 - publish を確認する:
gh run watch <id>で workflow 成功を確認し、curl -s https://pypi.org/pypi/magic-pocket/json等で latest がX.Y.Zになることを確認。
リリース後に必ず実行する (毎回)¶
- example の vendor wheel を更新する (
example-neon/example-tidbは magic-pocket を git 管理外の vendor wheel で参照しているため、Dependabot では 更新できない。手動対応が必要): - repo root で
uv build→dist/magic_pocket-X.Y.Z-py3-none-any.whlを生成 - 各
example-*/vendor/に新 wheel をコピーし、旧バージョンの wheel は削除 - 各
example-*/pyproject.tomlの[tool.uv.sources]の wheel filename をX.Y.Zに更新 - 各 example で
uv lock --upgrade-package magic-pocket -
4 ファイル (pyproject.toml + uv.lock × 2 example) をコミット:
:arrow_up: example の magic-pocket vendor wheel を X.Y.Z に更新(.whl本体は git 管理外なのでコミットされない) -
GitHub Release オブジェクトを作成する (毎回。CHANGELOG の当該節を本文にする):
main / tag の push について
magic-pocket は main ベース運用なので、main / tag はそのまま
git push origin main / git push origin X.Y.Z でよい。