Skip to content

Commit e4e535b

Browse files
authored
chore: check minimal versions on CI (#596)
As reported in issue #592, in our release of `console-api` 0.8.1, we specified that we required a tonic version of 0.12 in teh Cargo.toml file. However, since we had generated Rust code with `tonic-build` 0.12.3, we had some code that was only present in `tonic` from 0.12.3 as well. This error was fixed in #593. However, this showed a gap in our CI testing, we don't test against minimum versions of our dependencies to catch this kind of error. This change adds a CI job to check the minimal versions of our direct dependencies. We perform a cargo update with the `-Z direct-minimal-versions` flag and then perform cargo check. This would have caught the previous error and will catch any new ones of a similar type. One downside to this approach is that we must explicitly give a minimum version for our direct dependencies that is equal to or greater than the minimum version that any of of transitive dependencies specify for that same crate. However this check is probably worth the annoyance.
1 parent 6ef148a commit e4e535b

File tree

5 files changed

+55
-32
lines changed

5 files changed

+55
-32
lines changed

.github/workflows/ci.yml

+23
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ env:
2525
RUSTUP_MAX_RETRIES: 10
2626
# Don't emit giant backtraces in the CI logs.
2727
RUST_BACKTRACE: short
28+
# Pin a nightly version for minimal versions
29+
rust_nightly: nightly-2024-05-05
2830

2931
jobs:
3032
check:
@@ -42,6 +44,27 @@ jobs:
4244
- name: Run cargo check
4345
run: cargo check
4446

47+
minimal-versions:
48+
name: minimal-versions
49+
runs-on: ubuntu-latest
50+
steps:
51+
- uses: actions/checkout@v4
52+
- name: Install Rust ${{ env.rust_nightly }}
53+
uses: dtolnay/rust-toolchain@stable
54+
with:
55+
toolchain: ${{ env.rust_nightly }}
56+
- name: Install cargo-hack
57+
uses: taiki-e/install-action@cargo-hack
58+
- uses: Swatinem/rust-cache@v2
59+
- name: "check -Z direct-minimal-versions"
60+
run: |
61+
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
62+
# from determining minimal versions based on dev-dependencies.
63+
cargo hack --remove-dev-deps --workspace
64+
# Update Cargo.lock to minimal version dependencies.
65+
cargo +${{ env.rust_nightly }} update -Z direct-minimal-versions
66+
cargo check
67+
4568
test_os:
4669
name: Tests on ${{ matrix.os }} with Rust ${{ matrix.rust }}
4770
runs-on: ${{ matrix.os }}

console-api/Cargo.toml

+5-5
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ tonic = { version = "0.12.3", default-features = false, features = [
3434
"codegen",
3535
"transport",
3636
] }
37-
prost = "0.13.1"
38-
prost-types = "0.13.1"
39-
tracing-core = "0.1.17"
40-
futures-core = "0.3"
37+
prost = "0.13.3"
38+
prost-types = "0.13.3"
39+
tracing-core = "0.1.30"
40+
futures-core = "0.3.31"
4141

4242
[dev-dependencies]
43-
tonic-build = { version = "0.12", default-features = false, features = [
43+
tonic-build = { version = "0.12.3", default-features = false, features = [
4444
"prost", "transport"
4545
] }
4646
# explicit dep so we can get the version with fixed whitespace.

console-subscriber/Cargo.toml

+15-15
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,33 @@ grpc-web = ["dep:tonic-web"]
3232

3333
[dependencies]
3434
crossbeam-utils = "0.8.7"
35-
tokio = { version = "^1.21", features = ["sync", "time", "macros", "tracing"] }
36-
tokio-stream = { version = "0.1", features = ["net"] }
37-
thread_local = "1.1.3"
38-
console-api = { version = "0.8.1", path = "../console-api", features = ["transport"] }
39-
tonic = { version = "0.12", features = ["transport"] }
40-
tracing-core = "0.1.24"
41-
tracing = "0.1.26"
35+
tokio = { version = "1.34", features = ["sync", "time", "macros", "tracing"] }
36+
tokio-stream = { version = "0.1.16", features = ["net"] }
37+
thread_local = "1.1.4"
38+
console-api = { version = "0.8.0", path = "../console-api", features = ["transport"] }
39+
tonic = { version = "0.12.3", features = ["transport"] }
40+
tracing-core = "0.1.30"
41+
tracing = "0.1.35"
4242
tracing-subscriber = { version = "0.3.17", default-features = false, features = ["fmt", "registry"] }
43-
futures-task = { version = "0.3", default-features = false }
44-
hdrhistogram = { version = "7.3.0", default-features = false, features = ["serialization"] }
45-
parking_lot = { version = "0.12", optional = true }
43+
futures-task = { version = "0.3.31", default-features = false }
44+
hdrhistogram = { version = "7.4.0", default-features = false, features = ["serialization"] }
45+
parking_lot = { version = "0.12.1", optional = true }
4646
humantime = "2.1.0"
47-
prost = "0.13.1"
48-
prost-types = "0.13.1"
47+
prost = "0.13.3"
48+
prost-types = "0.13.3"
4949
hyper-util = { version = "0.1.6", features = ["tokio"] }
5050

5151
# Required for recording:
52-
serde = { version = "1", features = ["derive"] }
52+
serde = { version = "1.0.145", features = ["derive"] }
5353
serde_json = "1"
5454
crossbeam-channel = "0.5"
5555

5656
# Only for the web feature:
5757
tonic-web = { version = "0.12", optional = true }
5858

5959
[dev-dependencies]
60-
tokio = { version = "^1.21", features = ["full", "rt-multi-thread"] }
61-
tower = { version = "0.4", default-features = false }
60+
tokio = { version = "1.34", features = ["full", "rt-multi-thread"] }
61+
tower = { version = "0.4.12", default-features = false }
6262
futures = "0.3"
6363
http = "1.1"
6464
tower-http = { version = "0.5", features = ["cors"] }

tokio-console/Cargo.toml

+10-10
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,26 @@ eula = false
3636
console-api = { version = "0.8.1", path = "../console-api", features = ["transport"] }
3737
clap = { version = "~4.5.4", features = ["wrap_help", "cargo", "derive", "env"] }
3838
clap_complete = "~4.5.2"
39-
tokio = { version = "1", features = ["full", "rt-multi-thread"] }
40-
tonic = { version = "0.12", features = ["transport"] }
39+
tokio = { version = "1.34", features = ["full", "rt-multi-thread"] }
40+
tonic = { version = "0.12.3", features = ["transport"] }
4141
futures = "0.3"
4242
ratatui = { version = "0.26.2", default-features = false, features = ["crossterm"] }
4343
tower = "0.4.12"
44-
tracing = "0.1"
45-
tracing-subscriber = { version = "0.3" }
44+
tracing = "0.1.35"
45+
tracing-subscriber = { version = "0.3.17" }
4646
tracing-journald = { version = "0.2", optional = true }
47-
prost-types = "0.13.1"
47+
prost-types = "0.13.3"
4848
crossterm = { version = "0.27.0", features = ["event-stream"] }
4949
color-eyre = { version = "0.6", features = ["issue-url"] }
50-
hdrhistogram = { version = "7.3.0", default-features = false, features = ["serialization"] }
50+
hdrhistogram = { version = "7.4.0", default-features = false, features = ["serialization"] }
5151
# Keep this in sync with the version from `tonic`.
5252
# Because we inspect the error from tonic, we need to make sure that the
5353
# version of h2 we use is compatible with the version of tonic we use.
54-
h2 = "0.4"
55-
regex = "1.5"
56-
once_cell = "1.8"
54+
h2 = "0.4.6"
55+
regex = "1.11"
56+
once_cell = "1.17.1"
5757
humantime = "2.1.0"
58-
serde = { version = "1", features = ["derive"] }
58+
serde = { version = "1.0.145", features = ["derive"] }
5959
toml = "0.5"
6060
dirs = "5"
6161
hyper-util = { version = "0.1.6", features = ["tokio"] }

xtask/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ rust-version = "1.74.0"
77
publish = false
88

99
[dependencies]
10-
tonic-build = { version = "0.12", default-features = false, features = [
10+
tonic-build = { version = "0.12.3", default-features = false, features = [
1111
"prost", "transport"
1212
] }
1313
clap = { version = "~4.5.4", features = ["derive"] }
1414
color-eyre = "0.6"
15-
regex = "1.11.0"
15+
regex = "1.11"

0 commit comments

Comments
 (0)