|
| 1 | +# Release Process |
| 2 | + |
| 3 | +**Date**: 8-10-2020 |
| 4 | +**Author **: Fotis Koutoulakis, [email protected] |
| 5 | +**Domain**: Release & Packaging |
| 6 | + |
| 7 | +## Process |
| 8 | + |
| 9 | +The current process we follow through to make a new release is the following: |
| 10 | + |
| 11 | +1. At the point in time we want to make the release, we make a change to |
| 12 | + `src/config.inc`, and update the configuration variable `CBMC_VERSION`. |
| 13 | + This is important as it informs the various tools of the current version |
| 14 | + of CBMC. |
| 15 | + |
| 16 | + (This needs to be pushed as a PR, and after it gets merged we move on to:) |
| 17 | + |
| 18 | +2. Then we make a `git tag` out of that commit, and push it to github. The |
| 19 | + tag needs to be of the form `cbmc-<version>` with version being a version |
| 20 | + number of the form of `x.y.z`, with `x` denoting the major version, `y` |
| 21 | + denoting the minor version, and `z` identifying the patch version (useful |
| 22 | + for a hotfix or patch.) |
| 23 | + |
| 24 | +At this point, the rest of the process is automated, so we don't need to do |
| 25 | +anything more, but the process is described below for reference: |
| 26 | + |
| 27 | +3. `.github/workflows/regular-release.yaml` gets triggered on the `push` |
| 28 | + of the tag, and creates a Github release of the version that was |
| 29 | + described in thetag pushed (so, tag `cbmc-5.15.20` is going to |
| 30 | + create the release titled `cbmc-5.15.20` on the release page). |
| 31 | + |
| 32 | +4. `.github/workflows/release-packages.yaml` gets triggered automatically |
| 33 | + at the creation of the release, and its job is to build packages for |
| 34 | + Windows, Ubuntu 18.04 and Ubuntu 20.04 (for now, we may support more |
| 35 | + specific Ubuntu versions later) and attaches them (after it has finished |
| 36 | + building them) to the release page as release artifacts. |
| 37 | + |
| 38 | + It also makes a PR to the homebrew repository that updates the version |
| 39 | + of CBMC in homebrew. That's then approved and merged by the maintainers |
| 40 | + of homebrew. |
| 41 | + |
| 42 | +## Constraints |
| 43 | + |
| 44 | +Initial design of the release process suggested that the release cadence |
| 45 | +of CBMC was going to be one regular release (incrementing the `y` part |
| 46 | +of the version) every two weeks, on Thursday. |
| 47 | + |
| 48 | +Originally we wanted to automate this part, but we were limited by the |
| 49 | +fact that we needed to update `src/config.inc` before doing the release, |
| 50 | +and that couldn't be done in an automated fashion, as any update needs |
| 51 | +to go through a PR, and gets stuck on code-owners approvals, making the |
| 52 | +whole process more manual than intended. |
| 53 | + |
| 54 | +Following this original limitation, we decided to settle on doing manual |
| 55 | +releases every two weeks, but having the process being initiated by a |
| 56 | +developer manually making the change to `src/config.inc`, and after that |
| 57 | +has been merged, mark that specific commit as with a version tag, and push |
| 58 | +that version tag to Github. At that point, the rest of the process is automated. |
| 59 | + |
| 60 | +The change to the current implementation was part of https://github.com/diffblue/cbmc/pull/5517. |
0 commit comments