Release process

Feature development takes places on the “master” branch. Periodically, a release is created by increasing the version number and tagging the relevant commit with the new version number.

  • Check that the release passes all of the tests:

  • Update the version number according to the versioning scheme.

    • Update the version number in doc/ The full version must always be updated, the short (X.Y) version does not need to be updated if the version number is being increased from X.Y.Z to X.Y.Z+1.

    • Update the version number in pyproject.toml.

  • Check whether the copyright year(s) need to be updated in:


    • doc/

  • Describe the changes at the top of NEWS.rst under a heading of the form X.Y.Z (YYYY-MM-DD), which identifies the new version number and the date on which this version was released.

  • Commit these changes; set the commit message to Release lhs X.Y.Z.

    git add NEWS.rst doc/ pyproject.toml
    git commit -m "Release lhs X.Y.Z"
  • Tag this commit X.Y.Z.

    git tag -a X.Y.Z -m "lhs X.Y.Z"
  • Push this commit and the new tag upstream.

    git push --follow-tags

Publishing to PyPI

These instructions are based on the Packaging Python Projects tutorial.

Ensure that all uncommitted changes are stashed, or they will be packaged!

git stash

Build the wheel ./dist/lhs-X.Y.Z-py3-none-any.whl:

nox -s build

Upload this wheel to the PyPI test server, so that any problems can be identified and fixed:

nox -s publish -- upload -r testpypi dist/lhs-X.Y.Z-py3-none-any.whl

Then upload this wheel to PyPI:

nox -s publish -- upload dist/lhs-X.Y.Z-py3-none-any.whl