Files
marki-docx/docs/release-process.md
Bernd Worsch 6cf973b017 feat: WP-0006 — packaging & distribution infrastructure
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>
2026-03-17 14:30:08 +00:00

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.md updated: move items from [Unreleased] to a new versioned section
  • Version bumped consistently:
    • src/markidocx/__init__.py__version__ = "X.Y.Z"
    • pyproject.tomlversion = "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 publishing
  • docker.yml — builds and pushes Docker image to ghcr.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)