Repository navigation
Release v0.7.0
TopMark v0.7.0 — Release Notes
🎉 This release ships a refreshed
versioncommand, a hardened release pipeline, and stricter docs quality gates. It also finalizes the CI/release split introduced in the RCs.
🚀 Highlights
-
Version CLI overhaul
topmark versionnow defaults to PEP 440 output.- New
--format {pep440,semver,json,markdown}(and shortcut--semver) lets you pick your preferred representation. - Shared converter:
topmark.utils.version.pep440_to_semver().
-
Release hardening
- GitHub Actions release flow now enforces strict gates:
- Version/tag match (
pyproject.toml↔ tag) - Docs must build with
mkdocs --strict - Artifacts verified (sdist/wheel exist and embed the expected version)
- Pre-releases go to TestPyPI, finals to PyPI
- Final releases are checked to be newer than the latest final on PyPI
- Version/tag match (
- Trusted Publishing (OIDC) for TestPyPI/PyPI.
- GitHub Actions release flow now enforces strict gates:
✨ Added
- CLI –
versioncommand--semverand--format json|markdown|pep440|semver.- Stable JSON schema:
{"version": "<str>", "format": "pep440|semver"}
- Tests
- Parameterized coverage for text/JSON/Markdown + SemVer vs PEP 440.
🔧 Changed
-
CLI output
- Markdown now shows the format label:
**TopMark version (pep440|semver): <version>** - Plain text remains just the version (script-friendly).
- Markdown now shows the format label:
-
CI / Release
- CI runs on PRs,
main, andv*tags; release workflow is triggered on tag push or post-CI. - New
detailsjob derives normalized versions (PEP 440 & SemVer), channel (TestPyPI vs PyPI), and prerelease flag. - Concurrency guard prevents duplicate publishes.
- CI runs on PRs,
📚 Docs
- New/updated workflow docs:
docs/ci/release-workflow.md(RC vs final, gates, publishing).CONTRIBUTING.md(CI expectations, local checks).
README.mdand site examples updated for the newversionoutputs.
🧪 Tooling & Reproducibility
- Adopt pinned lockfiles:
requirements.txt,requirements-dev.txt,requirements-docs.txt+constraints.txt. - Consistent
python -m pip; caches keyed on lockfiles.
🗑️ Removed
- Duplicate “Build docs (strict)” step in CI lint job.
- Stray
topmark.tomlat repo root.
⚠️ Breaking (pre-1.0)
- JSON schema changed from:
to:
{"topmark_version": "<str>"}{"version": "<str>", "format": "pep440|semver"} - Markdown output for
versionnow explicitly includes the format label:**TopMark version (pep440|semver): <version>**If you parse
topmark versionoutput, update your consumers accordingly.
🔁 Pre-releases
0.7.0-rc1and0.7.0-rc2were published to TestPyPI and are fully subsumed by this GA.
📦 Installing / Upgrading
pip install -U topmark
# or with optional extras (examples)
pip install -U "topmark[dev]" # development toolchain
pip install -U "topmark[docs]" # docs toolchainLinks
- PyPI: https://pypi.org/project/topmark/
- Docs: https://shutterfreak.github.io/topmark/
- Changelog: see
CHANGELOG.mdin the repo - Full Changelog: v0.6.2...v0.7.0