Release checklist

This checklist is for maintainers cutting a new Capper release (including 1.0.0 and future 1.x versions).

  1. Verify CI is green on main
  2. Ensure the latest commits on main pass the CI workflow in .github/workflows/ci.yml.

  3. Update CHANGELOG.md

  4. Move entries from [Unreleased] into a new ## [X.Y.Z] - YYYY-MM-DD section.
  5. Summarize noteworthy changes (features, fixes, deprecations).

  6. Update version metadata

  7. Bump the version in pyproject.toml under [project].version.
  8. Update the fallback __version__ in capper/__init__.py if necessary.

  9. Check docs and README

  10. Ensure README.md and docs/ (especially docs/ROADMAP.md, docs/compatibility.md, and user guides) reflect the new release where it matters.
  11. Run:

    • python -m mkdocs build --strict
  12. Run full checks locally

  13. From a clean environment:

    • ruff format .
    • ruff check .
    • mypy capper
    • pytest capper/tests -m "not benchmark" --cov=capper --cov-report=term-missing --cov-fail-under=98
  14. Tag the release

  15. Commit all changes.
  16. Create an annotated tag: git tag -a vX.Y.Z -m "Release X.Y.Z".
  17. Push: git push && git push origin vX.Y.Z.

  18. Verify publish workflow

  19. Confirm that .github/workflows/publish.yml completes successfully for the new tag.
  20. Check that the new version is visible on PyPI and can be installed with pip install capper==X.Y.Z.

  21. Update roadmap and docs index

  22. Update docs/ROADMAP.md milestones and “Current release” to include the new version.
  23. If needed, add a short note to docs/README.md or other entry points highlighting major changes.