Make a release - firedrakeproject/firedrake GitHub Wiki
Note that the processes here apply to the majority of Firedrake packages, not just Firedrake itself. Some packages (e.g. petsctools) do not have a release
branch and so there is no difference between a major and patch release.
How to make a patch release
- Create a branch off of
release
with a suitable name (e.g.myusername/2025.4.3rc
). - Address all
# TODO RELEASE
comments found in the code. These will mostly be to use specific version of downstream packages instead of branches, and to specify theversion
attribute in thepyproject.toml
. - Validate that the release should work by opening a 'DO NOT MERGE' PR into
release
(example). - If this passes then you should manually trigger the release workflow, passing in the name of your branch and the version number.
- Once this runs, review the changelog auto-generated by GitHub for the release (example) and clean it up if necessary. It can be helpful to break the changes apart by topic.
- Bump the
version
attribute in thepyproject.toml
on therelease
branch. For instance, if you have just released2025.4.2
then the version number in thepyproject.toml
should now be2025.4.3.dev0
. - Announce the new release in the Firedrake Slack, sharing a link to the release notes.
How to make a major release
- Make a final patch release for the current major version (e.g. release
2025.4.3
before releasing2025.10.0
). This should pin dependencies that are known to having breaking changes betweenrelease
andmain
branches (e.g. FIAT, UFL) (example). This should be done to make sure that users are still able to install the older version for at least a little longer. To do this follow the procedure for making patch releases described above. - Coordinate the releases of the upstream packages that use branches (e.g. FIAT, UFL).
- Create a branch off
release
and merge inmain
(here calledmyusername/merge-main
). Make sure that anymain
-specific bits of information are not carried through. In particular make sure to checkpyproject.toml
. Note that the documentation may fail to build as it will be using an older container. - At the same time bump the versions of dependencies that have just been updated (e.g. FIAT, UFL, pyadjoint). Also bump the PETSc version.
- Merge (via a PR)
myusername/merge-main
intorelease
. - Follow the steps to make a patch release.
- Bump the
version
attribute in thepyproject.toml
on themain
branch. For instance, if you have just released2025.10.0
then the version number in thepyproject.toml
should now be2025.11.0.dev0
(just choose the next possible major version number, don't worry about the specific release date). - Merge
release
intomain
. This is helpful to do immediately as care is needed to resolve the conflicts that took place during the release.