Core: Feature Freeze Checklist
So it's that time again when it's time to feature freeze and create a new release branch, this checklist is a list of things to do as part of that process. When the checklist is finished you should be able to tag an rc from the newly created release branch.
The following steps are to be taken on the main branch (via PR) prior to branching:
- Update the
.mailmap
and.zenodo.json
files. These are metadata files about the authorship of the code.- The
.mailmap
file needs updating manually, to remove any duplicates and where possible to add peoples real names. The best way to do this is to first rungit shortlog -es vX.Ydev..HEAD
wherevX.Y
is the previous release number. Look down this list and check for duplicates and people without real names. Edit the.mailmap
file until all these are fixed. - Next run the
tools/update_zenodo.py
file, this script uses the output ofgit shortlog
to update the.zenodo.json
file. Check the printed output of the script and the diff for sanity.
- The
- Update the vendored modules in
/sunpy/extern/
if they need updating, these should be copied from their latest releases on GitHub. - Update the stored
sunpy/net/vso/data/attrs.json
andsunpy/net/jsoc/data/attrs.json
files by running thetools/update_attrs_json.py
file, commit and PR the changes. - Check if the API stability yaml needs updating.
- Generate the statistics for the what's new with with
./tools/generate_releaserst.xsh X.Y.0 vX.Zdev --pat=<YOUR GH PAT>
, whereX.Y
is the previous major version number andX.Z
is the version of the dev tag since that last major release. - Check license end year and update if needed.
The next step is to create the release branch, to do this following series of git commands:
git remote update
git fetch upstream
git switch -c X.Y upstream/main
git push upstream X.Y
This will add a new branch to the upstream sunpy/sunpy which is level with the main branch. Note the branch names (unlikle tags) are not prefixed with v
.
Once this is done there is a couple of things left to do before the first rc release:
-
Create a new backport label for the newly created branch (https://github.com/sunpy/sunpy/labels). The label should have the name "backport X.Y" and description "on-merge: backport to X.Y".
-
On release branches we use the milestone checker in the Giles bot to ensure that all backport PRs are attached to a release. We need to enable this by editing the
pyproject.toml
file. Add the following to this file, somewhere under the[tool.gilesbot]
heading:[ tool.gilesbot.milestones ] enabled = true missing_message_long = "This pull request does not have a milestone assigned to it. Only maintainers can change this, so you don't need to worry about it. :smile:"
-
Remove all changelog fragments on the main branch.
-
Commit (and PR) the removed changelog fragments to main.
-
Tag the main branch with the "start of development" tag for the next version using
git tag vX.Ydev
So if you just branched 3.0 you would tag main withv3.1dev
. Push this tag to upstream withgit push upstream vX.Ydev
. -
Enable the new branch on read the docs. Mark it as hidden, so it does not show up on the version picker. This is mainly to ensure that the builds work on that branch.
Making a pre-release (normally we just use "release candidate" rcZ
versions) should follow the normal release procedure: https://github.com/sunpy/sunpy/wiki/Core%3A-Release-Checklist
Unlike a normal release, DO NOT RENDER THE CHANGELOG.
Things to remember to test during the pre-release phase are:
- Open a PR to the conda-forge feedstock testing building the conda package with at least one rc release, following the instructions for pre releases.
- Ensure all sponsored packages tests pass with the rc (or latest main if tested regularly), sunpy core versions which break sponsored packages should not be released. Make a new release of the package if needed.