git tag hook-contract-py/v0.1.0
│
▼
┌──────────────────────┐
│ preflight │ • tag regex match
│ │ • tag version == pyproject version
│ │ • codegen --check passes
└──────────┬───────────┘
▼
┌──────────────────────┐
│ build │ • python -m build (hatchling)
│ │ • emits wheel + sdist
│ │ • sha256 + size to step summary
└──────────┬───────────┘
▼
┌──────────────────────┐
│ test │ • pytest -v on built source tree
│ │ (82 cases must all pass)
└──────────┬───────────┘
▼
┌──────────────────────┐
│ publish-testpypi │ • OIDC trusted publishing
│ │ • environment: testpypi
└──────────┬───────────┘
▼
┌──────────────────────┐
│ smoke-testpypi │ • wait for CDN propagation (poll)
│ │ • fresh ubuntu, fresh python
│ │ • pip install from test.pypi.org
│ │ • import + assert 19 events
│ │ • Pydantic typed instantiation works
└──────────┬───────────┘
▼
┌──────────────────────┐
│ publish-pypi │ • OIDC trusted publishing
│ │ • environment: pypi (production)
└──────────┬───────────┘
▼
┌──────────────────────┐
│ github-release │ • gh release create
│ │ • wheel + sdist + SHA256SUMS as assets
└──────────────────────┘
pkg/<name>/v<version> tag-format pattern (adapted to hook-contract-py/v* since this is a single-package workflow)workflow_dispatch with tag input as recovery leverpypa/gh-action-pypi-publishpython -m build, NOT uv build --package (we're not in a uv workspace)
Register orchestkit-hook-contract as a Trusted Publisher on PyPI and TestPyPI. See packages/hook-contract-py/RELEASING.md for the exact form fields.
| Field | Value |
|---|---|
| PyPI project name | orchestkit-hook-contract |
| Owner | yonatangross |
| Repository | orchestkit |
| Workflow filename | publish-hook-contract-py.yml |
| Environment (testpypi) | testpypi |
| Environment (pypi) | pypi |
$ # bump version (already 0.1.0 in pyproject, ready to ship) $ git tag hook-contract-py/v0.1.0 $ git push origin hook-contract-py/v0.1.0 $ # watch CI at /actions/workflows/publish-hook-contract-py.yml $ # when green: pip install orchestkit-hook-contract works for everyone
pip install it normallypip install orchestkit-hook-contract@orchestkit/hook-contract