generated from coulomb/repo-seed
CI matrix (Python 3.11/3.12) with pip cache and coverage job. PyPI publish workflow (OIDC trusted publishing, triggered on v*.*.* tags). Docker image for REST service with non-root user + ghcr.io push workflow. markidocx --version flag. Diagram optional extras (diagram-mermaid/graphviz/plantuml) and readme/urls in pyproject.toml. CHANGELOG.md (Keep a Changelog format) with retrospective v0.1.0 entry. docs/release-process.md with executable checklist. All 272 tests pass; ruff and mypy clean; twine check PASSED. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
Release Process
Pre-release checklist
Before tagging a release, verify every item:
- All tests pass:
pytest --tb=short -q - Lint clean:
ruff check . - Type-check clean:
mypy src/ - Corpus regression passes:
markidocx test - SBOM is current (re-run after any dependency change — see CLAUDE.md)
CHANGELOG.mdupdated: move items from[Unreleased]to a new versioned section- Version bumped consistently:
src/markidocx/__init__.py—__version__ = "X.Y.Z"pyproject.toml—version = "X.Y.Z"
- Build artefacts clean:
python -m build && twine check dist/*
Tagging and releasing
# Verify version strings match
python -c "import markidocx; print(markidocx.__version__)"
# Create a signed tag
git tag -s vX.Y.Z -m "Release vX.Y.Z"
# Push tag — triggers publish.yml (PyPI) and docker.yml (ghcr.io) automatically
git push origin vX.Y.Z
Pushing the tag triggers two GitHub Actions workflows:
publish.yml— builds and publishes to PyPI via OIDC trusted publishingdocker.yml— builds and pushes Docker image toghcr.io
Post-release
- Create a GitHub release from the tag and paste the relevant CHANGELOG section
- Verify installation:
pip install markidocx==X.Y.Z && markidocx --version - Verify Docker image:
docker run --rm ghcr.io/tegwick/marki-docx:vX.Y.Z --version
Versioning policy
markidocx follows Semantic Versioning:
| Change type | Version bump |
|---|---|
| Breaking change to CLI/API/round-trip contract | MAJOR |
| New feature, backwards-compatible | MINOR |
| Bug fix, docs, tooling | PATCH |
Setting up PyPI trusted publishing (one-time)
In the PyPI project settings, add a trusted publisher:
- Publisher: GitHub Actions
- Repository owner:
tegwick - Repository name:
marki-docx - Workflow filename:
publish.yml - Environment name: (leave blank)