Release process

This checklist is for maintainers preparing a beta or public release.

Pre-release checks

Run the standard quality gates from a clean checkout:

python -m pip install -e ".[dev,docs]"
python -m pytest -q
python -m ruff check .
python -m mypy archledger tests
python -m sphinx -b html docs docs/_build/html

Build and metadata validation

Build the actual distribution artifacts and verify their metadata:

rm -rf dist build *.egg-info
python -m build
python -m twine check dist/*

Installed-wheel smoke test

Always verify the built wheel from outside the source checkout:

python -m venv /tmp/archledger-wheel-test
/tmp/archledger-wheel-test/bin/python -m pip install dist/*.whl
/tmp/archledger-wheel-test/bin/python -I - <<'PY'
import importlib.metadata
import archledger

assert importlib.metadata.version("archledger") == archledger.__version__
print(archledger.__version__)
PY
workdir="$(mktemp -d)"
cd "$workdir"
/tmp/archledger-wheel-test/bin/archledger --version
/tmp/archledger-wheel-test/bin/archledger init --source-format markdown
/tmp/archledger-wheel-test/bin/archledger seed arc42-minimal
/tmp/archledger-wheel-test/bin/archledger new requirement --title "Smoke" --status accepted
/tmp/archledger-wheel-test/bin/archledger build --format markdown
/tmp/archledger-wheel-test/bin/archledger --json read --body

Converter-backed release confidence

If the release promises converter-backed exports, run the optional integration coverage in an environment with the tools installed:

python -m pytest -q -m integration tests/test_converter_integration.py

Release decision

Before tagging or publishing:

  1. Confirm the changelog is updated.

  2. Confirm CI is green on the supported Python versions.

  3. Confirm the built artifact version matches archledger.__version__ when installed.

  4. Confirm the installed console script works outside the repository checkout.