Skip to content

Commit fbb160d

Browse files
committed
Update the release process to explain how to update the crate along with the main CBMC version
1 parent e0aa536 commit fbb160d

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

doc/ADR/release_process.md

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
\page release-process Release Process
22

33
**Date**: 2020-10-08
4-
**Updated**: 2022-06-23
4+
**Updated**: 2023-03-29
55
**Author**: Fotis Koutoulakis, fotis.koutoulakis@diffblue.com
66
**Domain**: Release & Packaging
77

@@ -10,7 +10,11 @@
1010
The current process we follow through to make a new release is the following:
1111

1212
1. At the point in time we want to make the release, we make a change to
13-
`src/config.inc`, and update the configuration variable `CBMC_VERSION`.
13+
two files: `src/config.inc`, wherein we update the configuration variable
14+
`CBMC_VERSION`, and `src/libcprover-rust/Cargo.toml`, wherein we update
15+
the `version` variable to be the same as `CBMC_VERSION` (e.g. set both
16+
to `5.80.0`).
17+
1418
This is important as it informs the various tools of the current version
1519
of CBMC.
1620

@@ -22,6 +26,19 @@ The current process we follow through to make a new release is the following:
2226
denoting the minor version, and `z` identifying the patch version (useful
2327
for a hotfix or patch.)
2428

29+
3. Pushing the Rust crate, which is documented [here](https://doc.rust-lang.org/cargo/commands/cargo-publish.html)
30+
but effectively entails logging in with an API token generated from
31+
https://crates.io with `cargo login`, and then issuing `cargo publish`.
32+
33+
The usual environment variables are required (part of the `publish`
34+
step is that the crate can be built) - these are documented in the
35+
`readme.md` file at the root of the `src/libcprover-rust/` directory,
36+
and online at [libcprover_rust](https://crates.io/crates/libcprover_rust).
37+
38+
For the crate to be pushed successfully, the user performing the `cargo
39+
publish` step needs to be a member of the [diffblue/diffblue-opensource](https://github.com/orgs/diffblue/teams/diffblue-opensource)
40+
team.
41+
2542
At this point, the rest of the process is automated, so we don't need to do
2643
anything more, but the process is described below for reference:
2744

@@ -63,6 +80,24 @@ detectable change including bugfixes can do that. Instead, major version
6380
increments should signal that we expect many users will have to review their
6481
workflows for potential breakages, not just any.
6582

83+
### Rust API versioning
84+
85+
Following discussions during the development of `libcprover_rust`, it was decided
86+
that it would be easiest if the Rust API version was following the same scheme
87+
that CBMC does, so that it's clear which version of the Rust API corresponds to
88+
which version of CBMC.
89+
90+
This means that the Rust API has two "versions" it can report.
91+
92+
1. The library version, as reported in `Cargo.toml`, and
93+
2. The (C++) API version, which is coming from CBMC and aligns with the version
94+
number in `config.inc` (reported via the `get_api_version()` API call).
95+
96+
Most of the time, these two numbers will be the same - but there can be scenarios
97+
where they can diverge: if the user for example uses a later version of the
98+
Rust API (say, `5.80.0`) to link against a static library representing an older
99+
version of CBMC (say `5.79.0`).
100+
66101
## Constraints
67102

68103
Initial design of the release process suggested that the release cadence

0 commit comments

Comments
 (0)