Every release uses ./scripts/release.sh. Do not bump versions, tag, or create GitHub Releases manually.
- Install GitHub CLI (
gh) and authenticate. - Ensure PyPI trusted publishing is configured for this repo (
publish.ymluses thepypiGitHub environment).
-
Add user-facing notes under
## [Unreleased]inCHANGELOG.md. -
Prepare the release PR:
./scripts/release.sh prepare patch # or minor | major | 1.2.3 -
Merge the PR after CI passes (including the changelog check).
-
Publish from a clean default branch checkout:
git checkout main # or master for hotdata-marimo git pull ./scripts/release.sh publish
Pushing a vX.Y.Z tag triggers two workflows:
| Workflow | Purpose |
|---|---|
publish.yml |
Build wheel/sdist and publish to PyPI |
release.yml |
Create the GitHub Release with notes from CHANGELOG.md |
- PR check (
check-release.yml): ifpyproject.tomlversion changes,CHANGELOG.mdmust contain a matching## [X.Y.Z]section. - Tag check (
publish.yml): the tag (withoutv) must match[project].versioninpyproject.toml. - Publish guard (
release.sh publish): refuses to tag if the changelog section is missing.
Together, these make it hard to ship a version without changelog notes or a GitHub Release.