From 3f9429dd2ca0ecbd9e3d3b89d99a6fb53df5962e Mon Sep 17 00:00:00 2001 From: kingchenc Date: Sat, 23 May 2026 20:30:46 +0200 Subject: [PATCH] build: lift workspace MSRV further to 1.85 for criterion's clap_lex The first MSRV bump to 1.80 fixed the rayon-core floor but ran into a second transitive-dep floor on the same CI run: error: failed to parse manifest at clap_lex-1.1.0/Cargo.toml Caused by: feature `edition2024` is required The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.80.1). clap_lex 1.1.0 is pulled in by criterion (dev-dep on the wickra crate) via clap 4.6 -> clap_builder 4.6 -> clap_lex 1.1. edition2024 was stabilized in Rust 1.85, so lift the workspace MSRV one more step. The 1.85 floor subsumes the rayon-core 1.80 requirement; bindings/node stays at 1.88 (napi-build) which already covers everything below it. Also fix the fuzz job: cargo-fuzz defaulted to building for x86_64-unknown-linux-musl, which is not installed on the GitHub-hosted ubuntu runner. Pass --target x86_64-unknown-linux-gnu explicitly on every cargo fuzz run invocation so it builds for the actual host target. --- .github/workflows/ci.yml | 28 +++++++++++++++------------- CHANGELOG.md | 11 ++++++----- Cargo.toml | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2446471..1b28c7d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,12 +56,14 @@ jobs: run: cargo build -p wickra-examples --bins # Verify the crates still build and test on their declared minimum supported - # Rust version. The workspace pins rust-version = "1.80" (raised from 1.75 - # so rayon-core >= 1.13.0 keeps compiling); bindings/node pins - # rust-version = "1.88" because napi-build 2.3.2 requires it (and that - # subsumes the older 1.77 floor needed for `cargo::` directives). Without - # this job an accidental use of a newer API would only surface for - # downstream users. + # Rust version. The workspace pins rust-version = "1.85" — that floor is + # set by clap_lex 1.1.0 (transitively pulled in by the criterion dev-dep) + # which needs the stabilized edition2024 feature (stable since Rust 1.85); + # rayon-core 1.13.0 only needed 1.80 and is subsumed by the 1.85 floor. + # bindings/node pins rust-version = "1.88" because napi-build 2.3.2 + # requires it (and that subsumes the older 1.77 floor needed for + # `cargo::` directives). Without this job an accidental use of a newer + # API would only surface for downstream users. msrv: name: ${{ matrix.name }} runs-on: ubuntu-latest @@ -69,8 +71,8 @@ jobs: fail-fast: false matrix: include: - - name: MSRV workspace (Rust 1.80) - toolchain: "1.80" + - name: MSRV workspace (Rust 1.85) + toolchain: "1.85" packages: "-p wickra-core -p wickra -p wickra-data" - name: MSRV node binding (Rust 1.88) toolchain: "1.88" @@ -174,23 +176,23 @@ jobs: tool: cargo-fuzz - name: Fuzz csv_reader (30 s) - run: cargo +nightly fuzz run csv_reader -- -max_total_time=30 + run: cargo +nightly fuzz run --target x86_64-unknown-linux-gnu csv_reader -- -max_total_time=30 working-directory: fuzz - name: Fuzz binance_envelope (30 s) - run: cargo +nightly fuzz run binance_envelope -- -max_total_time=30 + run: cargo +nightly fuzz run --target x86_64-unknown-linux-gnu binance_envelope -- -max_total_time=30 working-directory: fuzz - name: Fuzz indicator_update (30 s) - run: cargo +nightly fuzz run indicator_update -- -max_total_time=30 + run: cargo +nightly fuzz run --target x86_64-unknown-linux-gnu indicator_update -- -max_total_time=30 working-directory: fuzz - name: Fuzz indicator_update_candle (30 s) - run: cargo +nightly fuzz run indicator_update_candle -- -max_total_time=30 + run: cargo +nightly fuzz run --target x86_64-unknown-linux-gnu indicator_update_candle -- -max_total_time=30 working-directory: fuzz - name: Fuzz tick_aggregator (30 s) - run: cargo +nightly fuzz run tick_aggregator -- -max_total_time=30 + run: cargo +nightly fuzz run --target x86_64-unknown-linux-gnu tick_aggregator -- -max_total_time=30 working-directory: fuzz python: diff --git a/CHANGELOG.md b/CHANGELOG.md index e3ed7cc3..cec6b9fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,13 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed -- **MSRV bumped.** Workspace minimum supported Rust version is now **1.80** +- **MSRV bumped.** Workspace minimum supported Rust version is now **1.85** (was 1.75) and the Node binding (`wickra-node`) is now **1.88** (was 1.77). The bumps are driven by transitive-dependency floors that were lifted in - recent updates: `rayon-core >= 1.13.0` requires Rust 1.80, and - `napi-build >= 2.3.2` requires Rust 1.88. Pinning the deps to the older - versions would have frozen us out of future security fixes from those - upstreams, so lifting the MSRV is the cleaner path for a young 0.x + recent updates: `clap_lex >= 1.1.0` (pulled in via the criterion dev-dep) + requires the stabilized `edition2024` feature (stable since Rust 1.85), + and `napi-build >= 2.3.2` requires Rust 1.88. Pinning the deps to the + older versions would have frozen us out of future security fixes from + those upstreams, so lifting the MSRV is the cleaner path for a young 0.x library. Downstream consumers on older Rust toolchains can stay on Wickra 0.2.0. diff --git a/Cargo.toml b/Cargo.toml index 68c0e545..f6a49afe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ exclude = ["fuzz"] version = "0.2.0" authors = ["kingchenc "] edition = "2021" -rust-version = "1.80" +rust-version = "1.85" license = "PolyForm-Noncommercial-1.0.0" repository = "https://github.com/kingchenc/wickra" homepage = "https://github.com/kingchenc/wickra"