Skip to content

Minimal-versions check skipped in CI since #452, and it fails on serde 1.0.60 #851

Description

@glaziermag

The last block of ci/test-stable.sh (cargo check --benches and the minimal-versions check) has not run in CI since #452. It is gated on RUST_VERSION:

bytes/ci/test-stable.sh

Lines 14 to 25 in 7930d93

if [[ "${RUST_VERSION}" == "nightly"* ]]; then
# Check benchmarks
cargo check --benches
# Check minimal versions
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
# from determining minimal versions based on dev-dependencies.
cargo hack --remove-dev-deps --workspace
# Update Cargo.lock to minimal version dependencies.
cargo update -Z minimal-versions
cargo check --all-features
fi

#452 removed RUST_VERSION: nightly-2019-09-25 from the nightly job in favour of the workflow-level nightly variable, and nothing sets RUST_VERSION now (grep -rn RUST_VERSION .github ci finds only line 14). The job still passes because the block is skipped. In the 2026-09-06 scheduled run (job log), set -x shows the all-features tests followed directly by an empty comparison, and then the job ends:

+ cargo test --all-features
...
+ [[ '' == \n\i\g\h\t\l\y* ]]

With the condition fixed on a fork, cargo check --benches passes, but the minimal-versions check fails. cargo update -Z minimal-versions selects serde 1.0.60, the floor in Cargo.toml, and it does not compile with the alloc feature on the CI nightly (fork job log):

 Downgrading serde v1.0.229 -> v1.0.60 (latest compatible: v1.0.229)
...
error[E0432]: unresolved imports `alloc::BTreeMap`, `alloc::BTreeSet`, `alloc::BinaryHeap`, `alloc::LinkedList`, `alloc::VecDeque`
   --> /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.60/src/lib.rs:192:21
...
error: could not compile `serde` (lib) due to 1 previous error

So fixing the condition alone would turn nightly red, and skip publish_docs, which needs it, unless the serde requirement changes too. #797 would change it to serde_core 1.0.220; I have not run the check with that change. Cargo stopped at this first error, so bytes itself was not checked against the minimal versions.

The condition change I used on the fork:

-if [[ "${RUST_VERSION}" == "nightly"* ]]; then
+if [[ "$(rustc --version)" == *nightly* ]]; then

Fork runs on glaziermag/bytes run the full CI workflow; the baseline adds only a workflow_dispatch trigger. Baseline nightly job: green, block skipped. With the change: red at the serde floor.

I found this while auditing the CI jobs, read the job logs through the Actions API, and ran the fork builds linked above. I used AI assistance (Claude) for the investigation and drafting.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions