Release process¶
Releases are automated. Tagging a GitHub Release triggers a build and a publish to PyPI via OIDC trusted publishing, so no API token needs to be stored in the repo.
Versioning¶
Semantic Versioning, in effect as of 1.0.0: breaking changes require a major version
bump; minor versions are additive; patch versions are bug fixes only.
See CHANGELOG.md for what shipped in each release, and the roadmap for what's next.
Cutting a release¶
- Green CI on
main. All tests pass across the OS × Python matrix. - Bump the version in
pyproject.toml(project.version). - Update
CHANGELOG.md. Move## [Unreleased]items under a new## [x.y.z] - YYYY-MM-DDheading, then update the compare links at the bottom. - Commit and tag:
- Publish a GitHub Release for the tag. Write release notes for the page — a concise summary and highlights aimed at someone deciding whether to upgrade, not a verbatim copy of the changelog section.
- The Release workflow (
.github/workflows/release.yml) builds the sdist + wheel, runstwine check, and publishes to PyPI. - The Docs workflow redeploys the site on the next push to
main.
First-time PyPI setup¶
Trusted publishing must be configured once on PyPI:
- Create the
postman-mcpproject (or reserve the name with a first manual upload). - Add a trusted publisher for the GitHub repo + the
Releaseworkflow + thepypienvironment. - Create a GitHub Environment named
pypi(optionally with required reviewers).
After that, every published Release deploys automatically.
Pre-release checklist¶
- [ ]
pytest --cov≥ 80% locally and in CI - [ ]
mkdocs build --strictpasses - [ ]
python -m build && twine check dist/*clean - [ ]
CHANGELOG.mdupdated - [ ] README badges and quickstart still accurate
- [ ] A real end-to-end
init→syncallrun against a live Postman workspace