Releases#
A release of Iris is a tag on the SciTools/Iris Github repository.
Below is How to Create an Iris Release, followed by some prose on the main areas that constitute the release.
How to Create an Iris Release#
The step-by-step process is walked-through by a script at:
<Iris repo root>/tools/release_do_nothing.py
, and also available here:
Release Do-Nothing Script.
Release Manager#
A Release Manager will be nominated for each release of Iris. This role involves:
deciding which features and bug fixes should be included in the release
managing the GitHub Projects board for the release
using GitHub Discussion releases category for documenting intent and capturing any discussion about the release
holding a developer retrospective post release, to look for potential future improvements
The Release Manager will make the release, ensuring that all the steps outlined on this page are completed.
Versioning#
Iris’ version numbers conform to Semantic Versioning (MAJOR.MINOR.PATCH
)
and PEP 440.
Iris uses setuptools-scm to automatically manage versioning based on Git tags. No manual versioning work is required within the files themselves.
Release Candidate#
Prior to a release, a release candidate tag may be created, marked as a
pre-release in GitHub, with a tag ending with rc
followed by a
number (0-based), e.g.,:
v1.9.0rc0
If created, the pre-release shall be available for a minimum of 2 weeks prior to the release being cut. However a 4 week period should be the goal to allow user groups to be notified of the existence of the pre-release and encouraged to test the functionality.
A pre-release is expected for a major or minor release, but not for a patch release.
If new features are required for a release after a release candidate has been cut, a new pre-release shall be issued first.
Release candidates are made available as a conda package on the conda-forge Anaconda channel using the rc_iris label. This is achieved via the conda-forge iris-feedstock following CFEP-05. For further information see the conda-forge User Documentation.
Patch Releases#
Patch releases may be implemented to fix problems with previous major or minor
releases. E.g. v1.9.1
to fix a problem in v1.9.0
, both being part of
the v1.9
series.
New features shall not be included in a patch release, these are for bug fixes.
A patch release does not require a release candidate, but the rest of the release process is to be followed.
Before Release#
Deprecations#
Any behaviour which has been deprecated for the correct number of previous releases is now finally changed. More detail, including the correct number of releases, is in Deprecations.
Standard Names#
The file etc/cf-standard-name-table.xml
is updated to the latest CF standard names,
from the latest CF standard names.
( This is used during build to automatically generate the sourcefile
lib/iris/std_names.py
. )
The Release#
Release Branch#
Once the features intended for the release are on main
, a release branch
should be created, in the SciTools/iris
repository. This will have the name:
v{major release number}.{minor release number}.x
for example:
v1.9.x
This branch shall be used to finalise the release details in preparation for the release candidate.
Changes for a patch release should target to the same release branch as the
rest of the series. For example, a fix
for a problem with the v1.9.0
release will be merged into v1.9.x
release
branch, and then released with the tag v1.9.1
.
Documentation#
The documentation should include a dedicated What’s New file for this release
series (e.g. v1.9.rst
), incorporating all of the What’s New entries for the release.
This content should be reviewed and adapted as required, including highlights
at the top of the What’s New document.
What’s New entries for patch releases should be added to the existing file
for that release series (e.g. v1.9.1
section in the v1.9.rst
file).
A template for What’s New formatting can be found in the
docs/src/whatsnew/latest.rst.template
file.
Tagging#
Once all checks are complete, the release is published from the release
branch - via the GitHub release functionality in the SciTools/iris
repository - which simultaneously creates a Git tag for the release.
Post Release#
PyPI#
Iris is available on PyPI as scitools-iris
.
Iris’ Continuous-Integration (CI) includes the automatic building and publishing of PyPI artifacts in a dedicated GitHub Action.
Legacy manual instructions are appended to this page for reference purposes (Updating PyPI Manually)
conda-forge#
Iris is available on conda-forge as iris
.
This is managed via the the Iris conda recipe on the conda-forge iris-feedstock, which is updated after the release is cut on GitHub, followed by automatic build and publish of the conda package on the conda-forge Anaconda channel.
Announcement#
Iris uses Twitter (@scitools_iris) to announce new releases, as well as any internal message boards that are accessible (e.g. at the UK Met Office). Announcements usually include a highlighted feature to hook readers’ attention.
Citation#
docs/src/userguide/citation.rst
is updated to include
the latest [non-release-candidate] version, date and Zenodo DOI
of the new release. Ideally this would be updated before the release, but
the DOI for the new version is only available once the release has been
created in GitHub.
Merge Back#
After any release is published, including patch releases, the changes from the
release branch should be merged back onto the SciTools/iris
main
branch.
Appendices#
Updating PyPI Manually#
Note
As part of our Continuous-Integration (CI), the building and publishing of PyPI artifacts is now automated by a dedicated GitHub Action.
The following instructions no longer require to be performed manually, but remain part of the documentation for reference purposes only.
Update the scitools-iris project on PyPI with the latest Iris release.
To do this perform the following steps.
Create a conda environment with the appropriate conda packages to build the
source distribution (sdist
) and pure Python wheel (bdist_wheel
):
> conda create -n iris-pypi -c conda-forge --yes build twine
> . activate iris-pypi
Checkout the appropriate Iris <release>
tag from the appropriate <repo>
.
For example, to checkout tag v1.0
from upstream
:
> git fetch upstream --tags
> git checkout v1.0
Build the source distribution and wheel from the Iris root directory:
> python -m build
This ./dist
directory should now be populated with the source archive
.tar.gz
file, and built distribution .whl
file.
Check that the package description will render properly on PyPI for each of the built artifacts:
> python -m twine check dist/*
To list and check the contents of the binary wheel:
> python -m zipfile --list dist/*.whl
If all seems well, sufficient maintainer privileges will be required to upload these artifacts to scitools-iris on PyPI:
> python -m twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
Ensure that the artifacts are successfully uploaded and available on scitools-iris before creating a conda test environment to install Iris from PyPI:
> conda deactivate
> conda env create --file ./requirements/iris.yml
> . activate iris-dev
> python -m pip install --no-deps scitools-iris
For further details on how to test Iris, see Running the Tests.
See also
For further information on packaging and uploading a project to PyPI, please refer to Generating Distribution Archives and Packaging Your Project.