Release Workflow#
We have regular releases and bugfix releases. We use 26.6 as an example for a regular release and 26.6.1 as an example for a bugfix release.
Note: We moved away from Ubuntu's naming convention of two-digit months (26.06 instead of 26.6) because we now use Fast Downward version numbers on PyPI, which removes such leading zeros.
Release steps:
-
Check that our information on required Python versions is consistent. Our current policy is to require the oldest Python version tested by one of the Github actions. The tested versions are shown in
README.md; the source of truth for these are the yml files defining the github actions (grep -R 'python:' .github/workflowsfrom the repository root). The lowest version number should be the same as the minimum required one insrc/translate/pyproject.toml. -
Set the variables used in the following steps as in this example for a regular release:
Set them as in this example for a bugfix release: - Regular releases only: make sure that you are on the commit on which you want to base the release.
- Bugfix releases only: check out the release branch and cherry-pick each commit with hash
HASHthat you want to include: - Make sure that the list of contributors and copyright years in the
README.mdfile are up to date. - Make sure the changelog (see ChangelogFormat) is up to date and committed. In particular:
- Make sure the changelog includes the line giving the date of the release.
- Add a new section like
## Fast Downward 26.6or## Fast Downward 26.6.1and gather all changes since the last release from the commit messages. Use an existing regular/bugfix release as an example.
- Make sure that the working directory is clean and that any last-minute changes from the above steps are committed.
- Update version number and create branches, tags and recipe files by running the
prepare-release.shscript: - Verify the following manually:
- The
fast-downward-$RELEASE.tar.gztarball created in the previous step contains the appropriate files. - Branches and tags were created as expected. In a bugfix release, a tag like
26.6.1should have been created on the existing release branch26.6. - A new commit was created with the right recipe files and version changes.
- The
- Push all changes.
- Make sure that all Github actions are green on the release branch.
- Build the Docker image and push it to the Docker Hub. Note that we build the
26.6Docker image in both cases, not26.6.0/26.6.1. Under normal conditions, Docker needs root rights. The actual push to Docker hub needs appropriate credentials. Malte has them; not sure anyone else does. (Please edit if you do.) - Build the Apptainer image: Note: Ubuntu (*.deb) packages for Apptainer are available here: https://github.com/apptainer/apptainer/releases. Tested with Apptainer 1.3.6.
- Test:
- that we can build and successfully run the planner from the produced tarball
- that we can successfully run the planner from the produced Apptainer image, including a configuration using SoPlex
- that we can successfully run the planner from the produced Vagrantfile (automatically includes SoPlex; to also build the VM with CPLEX, you need an environment variable
DOWNWARD_LP_INSTALLERSthat points to a directory containing the CPLEX installer in the correct version)
- Build and upload the Python package to PyPI (requires credentials, Gabi has them.)
- Prepare the Python package.
- Follow the instructions printed by the script to test and upload the package to PyPI.
- Regular releases only: create a documentation page for the release in the downward-markdown repository. We suggest starting from a copy of the page for the latest release in
docs/releases.- Update the date and release version name.
- Update the links and references in section "Downloads".
- Update the changelog.
- Add the tarball to a new folder for the release in
docs/files. - Add the Vagrant file created by the
prepare-release.shscript to the same folder. - Create a link in
docs/releases/index.mdanddocs/releases/SUMMARY.mdto the page of the new release.
- Bugfix releases only: update the documentation page of the release (for bugfix release
26.6.1, reuse the release page26.6). See the page for release 22.06 for an example. The Vagrantfile does not need to be updated for a bugfix release.- Adjust the date and mention the bugfix release version name.
- Update the changelog.
- Update the name of the tarball (it should include the bugfix number) and add the tarball to the respective folder in
docs/files. - Update the bash instructions.
- Regular releases only: create a documentation version for the release in the downward-markdown repository.
- Branch from the
head-docsbranch to a new branchrelease-$TAGand updateREADME.mdfile to state that this is the branch for that release (instead of being auto-generated like the head-docs branch). This assumes that you make a release from the current HEAD of main in the Fast Downward code repository. If not, you can modify the branch as described for a bugfix release (next step). - Add an entry for the release in
releases.jsonof themainbranch. Move thelatestalias to the new release.
- Branch from the
- Bugfix releases only: create a documentation version for the release in the downward-markdown repository.
- Branch from the earlier
release-{$TAG-1}branch to a new branchrelease-$TAGand updateREADME.mdfile to state that this is the branch for that bugfix release. - Make necessary changes in the documentation in this branch. If the generated documentation for the search plugins has changed, generate it with the
misc/autodocs/generate-docs.pyscript in the code repository. It writes the documentation todocs/searchthere. You just have to copy the content intodocs/searchof the new branch. - Update entry for the release in
releases.jsonof themainbranch, e.g. from "26.6.0" to "26.6.1".
- Branch from the earlier
- Create a new release on github:
- On https://github.com/aibasel/downward/releases click on
Draft a new release. - Set
Tagtorelease-$TAG,Release Titleto$RELEASE, andDescriptiontoFor information about this release, please visit the [Fast Downward website](https://www.fast-downward.org/$BRANCH/releases/$BRANCH/).. - Click on
Publish Release.
- On https://github.com/aibasel/downward/releases click on
- Send an announcement e-mail to the Fast Downward list including changelog information.
- Send the same announcement as a message in the Fast Downward Discord server.