Skip to content

Commit 1ce2de7

Browse files
author
Fotis Koutoulakis
committed
Add an ADR describing our release process.
1 parent 0614bd7 commit 1ce2de7

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

doc/ADR/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Architecture Decision Records
2+
3+
This folder is designated to contain our ADRs (Architecture
4+
Decision Records) - documentation for why specific decision
5+
where taken at the time they were, so that future maintainers
6+
can more easily identify constraints that shaped the architecture
7+
of the system and the surrounding infrastructure.
8+
9+
## Release & Packaging
10+
11+
* [Release Process](release_process.md)

doc/ADR/release_process.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

Comments
 (0)