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

59 lines
1.9 KiB
Markdown

# 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.toml``version = "X.Y.Z"`
- [ ] Build artefacts clean: `python -m build && twine check dist/*`
## Tagging and releasing
```bash
# 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](https://semver.org/):
| 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)