-
Ensure that you are in a repository that:
- is clean and up-to-date with no uncommitted changes,
- was cloned with SSH so that you can push to it, and
- has the intended branch checked out (usually
master
, but may be another mainline branch such asmain-3.x
).
-
Get the version number from
Source/Directory.Build.props
. It should look like "3.0.0" (or "3.0.0-alpha"). It's referred to as$VER
in the following. Themajor
.minor
.patch
numbers should already have been incremented since the last release, so they do not need to be updated. However, you may want to increment the minor or major version depending the types of changes that are in the release. -
Run
Scripts/prepare_release.py $VER prepare --source-branch <this branch>
(--source-branch
is optional and defaults to 'master') from the root of the repository. The script will check that the repository is in a good state, create and check out a new release branch, updateSource/Directory.Build.props
andRELEASE_NOTES.md
. -
You don't need to update the version number as the patch number is already set for the next release. However, if you wish to change the minor or major version, see VERSIONBUMP.md
-
Run
./Scripts/prepare_release.py $VER release
from the root of the repository. The script will tag the current commit and push it. A GitHub action will automatically run in reaction to the tag being pushed, which will run the deep integration test suite, build the artifacts and reference manual, publish artifacts to nuget.org, and then create a draft GitHub release. You can find and watch the progress of this workflow at https://github.com/dafny-lang/dafny/actions. -
Once the action completes, you should find the draft release at https://github.com/dafny-lang/dafny/releases. Edit the release body to add in the release notes from
RELEASE_NOTES.md
. If this is not a pre-release, check the box to create a new discussion based on the release. -
Push the "Publish" button. This will trigger yet another workflow that will download the published artifacts and run a smoke test on multiple platforms. Again you can watch for this workflow at https://github.com/dafny-lang/dafny/actions.
-
We are going to merge the release branch into master to take into account any fix that was implemented there, and also update the version number. With the release branch checked out, run
./Scripts/prepare_release.py $NEXT_VER set-next version
to set the version number for the next release, where$NEXT_VER
is$VER
with the patch incremented. Then follow the instructions VERSIONBUMP.md to keep Dafny up-to-date with the new version number. Create a new pull request for this change, have it approved and merged. -
Clone https://github.com/dafny-lang/ide-vscode and run
publish_process.js
to create a new release of the VSCode plugin. -
Make a documentation snapshot
- Run the (bash) command
dafny/docs/make-snapshot -b <branch> x.y.z
wherex.y.z
is the new version number and is the branch used (defaults to 'master') - The script creates new PRs in dafny-lang/dafny and dafny-lang/dafny-lang.github.io. Approve and merge these PRs.
- Run the (bash) command
-
Add the new version to the list of versions to be checked in the library repo, namely the list in the file libraries/.github/workflows/tests.yml.
-
Update the Homebrew formula for Dafny (see below). Note that it is fine to leave this for the next day, and other members of the community may update the formula in the meantime anyway.
-
Once the Homebrew formula is merged, test that it works correctly by going to https://github.com/dafny-lang/dafny/actions and manually running the "Test Brew release on Mac" workflow. It doesn't matter what branch you run it on because it won't actually check out the code. It will just install Dafny from Homebrew and run it on some examples.
If something goes wrong with the prepare
step:
- Remove the release commit (
git reset --hard HEAD~1
) - Commit fixes
- Re-run the
prepare
step; the script will recognize therelease-
branch and will not recreate it.
If something goes wrong with the release
step:
- Delete the local tag:
git tag -d vA.B.C
- Delete the remote tag:
git push --delete origin vA.B.C
- Return to the
prepare
step.
- Announce the new release to the world.
Homebrew (brew
) is a package manager for macOS. The Dafny project
maintains a brew "formula" that allows easy installation of Dafny and
its dependencies on macOS.
These are the instructions for updating the formula, which must be done each time a new release is issued.
These instructions are meant to be executed on a Mac, in a Terminal shell. All the Homebrew formulas are held in a GitHub repo, so some familiarity with git commands and concepts is helpful.
-
Install Homebrew if it is not already present on your machine. Running
which brew
will tell you if it is. See https://docs.brew.sh/Installation if not. -
Create a GitHub personal access token (if you don't have one handy), and put it in an environment variable:
export HOMEBREW_GITHUB_API_TOKEN=your_token_here
-
Create a pull request following the instructions here:
https://docs.brew.sh/How-To-Open-a-Homebrew-Pull-Request
These instructions currently involve the following command:
brew bump-formula-pr \
--url <source .tar.gz for the release> \
--sha256 <sha256 of the source .tar.gz for the release>
-
Expect comments from the reviewers. If changes are needed, do 4-6 again. Eventually the reviewers will accept and merge the PR.
-
Test the installation by running
brew reinstall dafny
and then execute
dafny /version
see if it has the correct version number. Even better is to try this step on a different machine than the one on which thedafny.rb
file was edited