blob: 8e6f447cd639d5ee0b1a8e16abc6b4e862aaa2ae [file] [view] [edit]
# Standard library semantic versioning breakage check
The `test-x86_64-gnu-stdlib-semver-check` job runs the [`cargo-semver-checks`][csc] (c-s-c) tool on the standard library (`core`, `alloc` and `std`) in order to find potential unintended semantic versioning (semver) breakages.
It does so by analyzing the rustdoc JSON output (from the `rust-docs-json` component) of the parent merge commit, and the current commit being merged.
When it runs, one of five things can happen:
1. Everything proceeds correctly, c-s-c does not find any breakage.
2. The rustdoc JSON version was bumped recently, and c-s-c cannot handle it yet.
This case will result in the test ending with a success,
and printing a warning that c-s-c needs to be updated.
Once c-s-c releases a version that supports the new JSON format, it should go to 1. again.
- We currently install the latest released version of c-s-c in this job,r
so its version does not need to be updated manually in the `rust-lang/rust` repository.
3. c-s-c detects a breakage, but it is a false positive.
In this case, please report the false positive to [this Zulip topic][semver-topic],
and [bump the stamp file](#bumping-the-stdlib-semver-stamp-file).
4. c-s-c detects a real breakage, and it helped you find unintended beakage.
Yay!
In this case, please consider reporting the success to [this Zulip topic][semver-topic].
5. c-s-c detects a real breakage, but you want to land it anyway (maybe it is an edge case that was FCPed).
In that case, [bump the stamp file](#bumping-the-stdlib-semver-stamp-file).
## Bumping the stdlib semver stamp file
If you want to let CI pass on a PR where c-s-c detects breakage (whether it is real or not),
you have to modify the `src/bootstrap/stdlib-semver-check-stamp` file.
Please update the PR number in which you modify this file at the bottom of the file.
This will ensure that the test will stay green, regardless of what c-s-c detects.
## Running the check manually
You can manually run the semver check locally using `./x test std-semver-check --set rust.stdlib-semver-baseline=${PARENT}`,
where `PARENT` is a commit SHA against which you want to compare the in-tree stdlib.
If you do not specify it,
bootstrap will select the latest upstream commit that it finds in your local git history.
[semver-topic]: https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/Breakages.20detected.20by.20cargo-semver-checks/with/615570111
[csc]: https://github.com/obi1kenobi/cargo-semver-checks