Release Management#
This section provides detailed instructions used to release a new version of skbase.
This task is carried out by core developers with write access to the skbase
repository and designated as release managers by the
Community Council.
Summary of release process#
The release process includes, in sequence:
troubeleshooting and accident remediation, if applicable (see troubeleshooting tips in each of the prior sections)
Details follow below.
Release preparation cycle#
skbase aims for a release every month, typically coinciding with the start of
the month. To ensure releases go smoothly, the following steps are taken leading
up to each release:
1 week before release date, update the release project board and alert project contributors of upcoming release on Discord.
For major releases or substantial features, optionally extend the release cycle, if needed, so that the changes can be completed and incorporated in the release. If a release will be delayed, notify project contributors on Discord.
All changes to the main branch of the repository are frozen 1 day prior to the release. At this point only the release managers (for this release) should merge any pull requests. Remind core developers of the timing of the feature freeze on Discord when announcing the upcoming release date. Remind core developers of the feature freeze again 1 day prior to its start. Make sure to keep core developers in the loop if any delays or extensions to the feature freeze arise.
If “must have” pull requests are not merged by the planned release date, the release manager should coordinate with the Community Council to either delay the release date and extend freeze period, or move the pull requests target completion to a later release.
Preparing the release version#
The release process is as follows, on high-level:
Ensure deprecation actions are carried out. Deprecation actions for a version should be marked by “version number” annotated comments in the code. E.g., for the release 0.2.0, search for the string 0.2.0 in the code and carry out the described deprecation actions. Collect list of deprecation actions in an issue, as they will have to go in the release notes. Deprecation actions should be merged only by release managers.
Create a “release” Pull Request from a branch following the naming pattern
release-vm.x.y, where “m”, “x” and “y” are placeholders for the major, minor, and patch version numbers. This pull request should:Update the package version numbers (see version number locations)
Add complete release notes (see generating release notes)
Update the
switcher.jsonfile located at./docs/source/_static/relative to the project’s root. This involves creating a new entry for the prior release (which was the “stable” doc release previously) and rename the stable release to reference the updated version number.
The PR and release notes should be reviewed by the other core developers, then merged once tests pass.
Create a GitHub draft release with a new tag following the syntax v[MAJOR].[MINOR].[PATCH]. E.g., the string
v0.12.0for version 0.12.0. The GitHub release notes should contain only “new contributors” and “all contributors” section, and otherwise link to the release notes in the changelog, following the pattern of current GitHub release notes.
pypi release and release validation#
Publish the GitHub draft release. Creation of the new tag will trigger the
pypirelease CI/CD.Wait for the
pypirelease CI/CD to finish. If tests fail due to sporadic failures unrelated to the content being released, restart the CI/CD routine. If tests fail genuinely, something went wrong in the above steps, investigate, fix, and repeat. Common possibilities are core devs not respecting the feature freeze period, new releases of dependencies that happen in the period between release PR and release.Once release CI/CD has passed, check the
skbaseversion onpypi, this should be the new version. It should be checked that all wheels have been uploaded, here. As a test, one install ofskbasein a newpythonenvironment should be carried out according to the install instructions (choose an arbitrary version/OS). If the install does not succeed or wheels have not been uploaded, urgent action to diagnose and remedy must be taken. All core developers should be informed of the situation through mail-all in the core developer channel on Discord. In the most common case, the install instructions need to be updated. If wheel upload has failed, the tag in 5. needs to be deleted and recreated. The tag can be deleted using thegitcommandgit push --delete origin tagnamefrom a local repo.
conda release and release validation#
If the release on
pypihas succeeded, there should be an automated release PR created against theskbaseconda-forge repo: conda-forge/skbase-feedstock.
Note
- Manual creation of release pull request
In cases where the release PR is not created automatically it can be created and submitted manually. For general guidelines related to maintaining conda feedstcok packages see conda-forge package.
After forking and cloning the repo, edit the
meta.ymlfile by:
incrementing the version in the line that contains
{% set version = "M.X.Y" %}pasting the sha256 sum of the source archive from github in the
source/sha256sectionOnce finished, submit the PR and ask for review.
The conda release PR needs to be reviewed and in dependencies should be checked against any changes in the main
skbaserepo. In case the dependencies (or python version support) have changes, themeta.ymlfile in the conda recipe needs to be updated to reflect those changes.Once reviewed, the conda release PR should merged, and it will automatically trigger a release of the conda package.
After 1h, it should be checked whether the package has been released on conda. Once the package is available on
conda, a test install should be carried out to validate the release. Should either of these fail, alert the core developers and follow an urgent action plan in line with the description in step 7.
Version number locations#
Version numbers need to be updated in:
root
__init__.pyREADME.mdpyproject.toml
Generating release notes#
Release notes can be generated using the build_tools.changelog.py script,
and should be placed at the top of the changelog.rst. Generally, release notes
should follow the general pattern of previous release notes, with sections:
highlights
dependency changes, if any
deprecations and removals, if any. In PATCH versions, there are no deprecation actions, but there can be new deprecations. Deprecation action usually happen with the MINOR release cycle.
core interface changes, if any. This means, changes to the base class interfaces. Only MINOR or MAJOR releases should have core interface changes that are not downwards compatible.
enhancements, by module/area
bugfixes
documentation
maintenance
all contributor credits