Release ProcedureΒΆ

We follow semantic versioning, e.g., v1.0.0. A major version causes incompatible API changes, a minor version adds functionality, and a patch covers bug fixes.

  1. Create a new branch release-vX.x.x with the version for the release.
  • Update CHANGELOG.rst
  • Make sure all new changes, features are reflected in the documentation.
  1. Open a new pull request for this branch targeting master

  2. After all tests pass and the PR has been approved, merge the PR into master

  3. Tag a release and push to github:

    $ git tag -a v1.0.0 -m "Version 1.0.0"
    $ git push origin master --tags
  4. Build and publish release on PyPI:

    $ git clean -xfd  # remove any files not checked into git
    $ python sdist bdist_wheel --universal  # build package
    $ twine upload dist/*  # register and push to pypi
  5. Update the stable branch (used by ReadTheDocs):

    $ git checkout stable
    $ git rebase master
    $ git push -f origin stable
    $ git checkout master
  6. Update esmtools conda-forge feedstock

  • Fork esmtools-feedstock repository

  • Clone this fork and edit recipe:

    $ git clone
    $ cd esmtools-feedstock
    $ cd recipe
    $ # edit meta.yaml
  • Update version
  • Get sha256 from for esmtools
  • Fill in the rest of information as described here
  • Commit and submit a PR