12. Maintaining#

12.1. Versioning#

Version numbers are as follows: MAJOR.MINOR.MICRO. Additionally, development version append devN where N is the distance (in commits) to the last release.

This is done automatically by setuptools_scm.

This plugin reads the latest tagged version from git and automatically increments the MICRO segment and appends devN. This is considered a pre-release.

The CI scripts will publish every tag with the format v.X.Y.Z to PyPI as version “X.Y.Z”. Additionally, for every push to main, it will be published as pre-release to PyPI.

12.2. Releasing a new version#

Once the milestone is reached (all issues closed), it is time to do a new release. Make sure you have towncrier installed before proceeding.

  1. Make sure you are in sync with the main branch.

    git checkout main
    git pull --rebase origin main
    
  2. Run the following to check changelog is properly generated:

    towncrier build --draft
    
  3. Then, run:

    towncrier
    

    to generate the proper changelog that should be reflected in docs/whats_new.rst.

  4. Commit the changes, make a PR and merge via a merge commit.

  5. Make sure you are in sync with the main branch.

    git checkout main
    git pull --rebase origin main
    
  6. Create tag (replace X.Y.Z with the proper version) on the merged PR’s merge commit.

    git tag -a vX.Y.Z -m "Release X.Y.Z"
    
  7. Check that the build system is creating the proper version

    SETUPTOOLS_SCM_DEBUG=1 python -m build --outdir dist/ .
    
  8. Push the tag

    git push origin --follow-tags
    
  9. Optional: bump the MAJOR or MINOR segment of next release (replace D.E.0 with the proper version).

    git tag -a vD.E.0.dev -m "Set next release to D.E.0"
    git push origin --follow-tags