Releasing
Release metadata
The version in pyproject.toml, nosible.__version__, and
docs/conf.py must match. A publishing tag must be exactly that version
prefixed with v. For example, package version 0.4.0 may only be
published from tag v0.4.0.
The CI build validates this relationship before creating distributions. A tag
such as v0.4.1 cannot publish artifacts that identify themselves as
0.4.0.
Local release checks
Run the same offline checks before creating a release tag:
python scripts/check_release.py
python scripts/check_python_rules.py
python -m ruff check .
python -m pytest
python -m sphinx -W --keep-going -E -b html docs docs/_build/html
python -m build
The GitHub workflow repeats the test matrix on Linux, macOS, and Windows,
using every advertised Python version: 3.9, 3.10, 3.11, 3.12, and 3.13. It
verifies a no-isolation build with the declared minimum
setuptools==75.1.0, builds both the wheel and source distribution,
validates them with Twine, and publishes only after every prerequisite
succeeds.
A scheduled or manually dispatched workflow also runs the opt-in live Search
and World contract suite. It requires the repository’s NOSIBLE_API_KEY
secret and fails instead of silently skipping when the secret is absent. PyPI
authentication uses trusted publishing; no long-lived upload token is stored
in the workflow.