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
1010The current process we follow through to make a new release is the following:
1111
12121 . 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+
2542At this point, the rest of the process is automated, so we don't need to do
2643anything more, but the process is described below for reference:
2744
@@ -63,6 +80,24 @@ detectable change including bugfixes can do that. Instead, major version
6380increments should signal that we expect many users will have to review their
6481workflows 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
68103Initial design of the release process suggested that the release cadence
0 commit comments