diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 95ce1e6..b566144 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -2,8 +2,6 @@ name: Non-routine release validation on: workflow_dispatch: - schedule: - - cron: "17 3 * * 0" push: tags: - "v*" @@ -43,13 +41,10 @@ jobs: toolchain: 1.97.1 components: clippy,rustfmt targets: x86_64-pc-windows-gnu,x86_64-apple-darwin - - uses: dtolnay/rust-toolchain@master - with: - toolchain: 1.96.0 - name: Validate the native release dependency run: tools/install_openjpeg_2_5_4.sh "$OPENJPEG_PREFIX" - name: Run the Rust-owned non-routine release graph - run: cargo +1.97.1 run --locked -p metacrate-ci-matrix -- release-gate --evidence artifacts/release/release-gate.json + run: cargo run --locked -p metacrate-ci-matrix -- release-gate --evidence artifacts/release/release-gate.json - name: Upload release evidence and packages if: always() uses: actions/upload-artifact@v3 diff --git a/CHANGELOG.md b/CHANGELOG.md index eeee098..10c60ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,8 +18,7 @@ also fixed by `api/SEMVER-BASELINE.json`. ### Release requirements -- Normal development and release validation use Rust 1.97.1. Rust 1.96.0 is - retained only as the declared minimum-supported-version compatibility gate. +- Normal development and release validation use Rust 1.97.1. - The release candidate is not approved while `metacrate-ci-matrix release-candidate-audit` reports any blocker. Fuzz-smoke is temporarily deferred by explicit project direction; every other gate is diff --git a/Cargo.toml b/Cargo.toml index b146873..29358fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,7 +43,7 @@ default-members = [ [workspace.package] version = "0.0.1" edition = "2024" -rust-version = "1.96" +rust-version = "1.97.1" license = "BSD-3-Clause" repository = "https://git.rfc1437.de/hugo/MetaCrate" diff --git a/README.md b/README.md index 05ec700..42c420f 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ API mappings record ownership, async, error, overload, and native implementation decisions, and the generated rustdoc keeps those contracts attached to their exact C# documentation IDs. -Building MetaCrate requires Rust 1.96 or newer. +Building MetaCrate requires Rust 1.97.1 or newer. ```sh cargo build --workspace @@ -84,7 +84,7 @@ offline-build, cache, and redistribution details are in the [`OpenJPEG adapter guide`](crates/libremetaverse-openjpeg/README.md) and [`Skia adapter guide`](crates/libremetaverse-imaging-skia/README.md). -The validated Linux/MSRV/Windows/macOS target and feature inventory, clean +The validated Linux/Windows/macOS target and feature inventory, clean profile runner, native prerequisite evidence, and manual platform boundaries are documented in the [release CI matrix](docs/release-ci-matrix.md). The [native release artifact audit](docs/release-artifacts.md) documents the diff --git a/RUSTREWRITE.md b/RUSTREWRITE.md index a1b19bd..d270c2e 100644 --- a/RUSTREWRITE.md +++ b/RUSTREWRITE.md @@ -165,7 +165,7 @@ crates under `types`, `structured_data`, and `imaging_abstractions`. Rendering, voice, RLV, LSL tools, and native Skia remain separate so users do not pay for large or platform-specific dependency trees unless requested. -The workspace uses Rust 2024 with MSRV 1.96. Generated code is committed so +The workspace uses Rust 2024 with Rust 1.97.1. Generated code is committed so ordinary consumers do not need Python, .NET, Roslyn, or the upstream checkout. ## 3. Public API translation policy @@ -868,7 +868,7 @@ not part of the default smoke test. 11. **Programs/live grid:** offline inspector, four core examples, TestClient, then voice adapters and opt-in live/device validation. 12. **Hardening/release:** fuzz untrusted parsers, cross-platform native CI, - MSRV, docs/examples, semver/API audit, license/asset audit, performance + docs/examples, semver/API audit, license/asset audit, performance comparison against the separately run pinned C# implementation, and an artifact/dependency audit proving there is no CLR, .NET assembly, subprocess, RPC, or LibreMetaverse foreign-interface dependency. diff --git a/ci/ci-coverage.json b/ci/ci-coverage.json index 702b48f..62c99c1 100644 --- a/ci/ci-coverage.json +++ b/ci/ci-coverage.json @@ -89,10 +89,10 @@ }, { "workflow": "release-matrix.yml", - "responsibility": "MSRV, default, minimal, features, release profiles, and portable cross-target checks", + "responsibility": "Default, minimal, features, release profiles, and portable cross-target checks", "destination": "split", - "checks": ["minimal-features", "jpeg2000", "rust-j2k", "skia-binary", "msrv", "portable-cross-targets", "release-profile"], - "rationale": "Fast feature isolation remains required; clean MSRV, cross-target, and release-profile builds run non-routinely." + "checks": ["minimal-features", "jpeg2000", "rust-j2k", "skia-binary", "portable-cross-targets", "release-profile"], + "rationale": "Fast feature isolation remains required; cross-target and release-profile builds run non-routinely." }, { "workflow": "rust-workspace.yml", diff --git a/ci/dependency-policy.json b/ci/dependency-policy.json index 9559b07..725bbc6 100644 --- a/ci/dependency-policy.json +++ b/ci/dependency-policy.json @@ -1,6 +1,5 @@ { "schema": 1, - "msrv": "1.96.0", "current": "stable", "reviewed_on": "2026-08-13", "review_by": "2026-11-11", diff --git a/ci/release-matrix.json b/ci/release-matrix.json index c7898a1..cfd0d15 100644 --- a/ci/release-matrix.json +++ b/ci/release-matrix.json @@ -1,6 +1,5 @@ { "schema": 1, - "msrv": "1.96.0", "current": "stable", "native_prerequisites": [ { @@ -35,26 +34,6 @@ "Proprietary services, credentials, and redistributable platform packages are never inferred or downloaded by the matrix." ], "profiles": [ - { - "id": "linux-msrv-portable", - "platform": "linux", - "host": "ubuntu-latest", - "execution": "native", - "toolchain": "1.96.0", - "target": "x86_64-unknown-linux-gnu", - "feature_sets": ["no-default-features", "rust-j2k", "rust-skia"], - "prerequisites": ["libopus-1.3"], - "commands": [ - { - "label": "Compile the portable public crates on the declared MSRV", - "args": ["check", "--locked", "-j", "1", "--all-targets", "--no-default-features", "--features", "libremetaverse-imaging/rust-j2k,libremetaverse-imaging-skia/rust-skia", "-p", "libremetaverse-types", "-p", "libremetaverse-structured-data", "-p", "libremetaverse-imaging", "-p", "libremetaverse-imaging-skia", "-p", "libremetaverse-prim-mesher", "-p", "libremetaverse-lsl-tools", "-p", "libremetaverse-rlv", "-p", "metacrate-ci-matrix"] - }, - { - "label": "Compile the safe native Opus boundary and WebRTC voice on the declared MSRV", - "args": ["check", "--locked", "-j", "1", "--all-targets", "--no-default-features", "-p", "libremetaverse-opus", "-p", "libremetaverse-voice-webrtc"] - } - ] - }, { "id": "linux-stable-default", "platform": "linux", diff --git a/crates/libremetaverse-imaging-skia/README.md b/crates/libremetaverse-imaging-skia/README.md index 18ebad3..02e8bba 100644 --- a/crates/libremetaverse-imaging-skia/README.md +++ b/crates/libremetaverse-imaging-skia/README.md @@ -42,8 +42,8 @@ decodes BMP, GIF, ICO, baseline/progressive JPEG, interlaced PNG, WBMP, and lossless/lossy/animated WebP. GIF and WebP return frame one composited on the logical canvas; ICO chooses its largest valid entry. Both Skia features may be enabled together, and each codec remains independently constructible. -The graph builds on the workspace Rust 1.96 MSRV; both selected direct codecs -declare older compatible Rust floors. +The graph builds with the workspace Rust 1.97.1 toolchain; both selected direct +codecs declare older compatible Rust floors. Enable native decoding with: diff --git a/docs/dependency-policy.md b/docs/dependency-policy.md index 6f9f496..7178716 100644 --- a/docs/dependency-policy.md +++ b/docs/dependency-policy.md @@ -14,11 +14,9 @@ missing, or the dependency lacks an implemented responsibility in consumer and dependency scope, all approved duplicate sets, native direct dependencies, review dates, and the resolved external package count. -The policy intentionally distinguishes Rust 1.96.0, the minimum supported Rust -version, from current stable Rust used for development and release validation. -The release matrix checks both. Raising the MSRV requires an explicit policy, -matrix, documentation, and changelog review; ordinary dependency updates may -not raise it accidentally. +Development and release validation use the current stable Rust toolchain pinned +by the workflows. Dependency review records compiler requirements without +installing or testing an additional historical toolchain. ## Automated gates @@ -67,7 +65,7 @@ The graph is reviewed at least quarterly using `reviewed_on` and `review_by`. RustSec advisories are reviewed immediately. For every update: 1. identify the implemented caller and confirm the dependency remains needed; -2. inspect release notes, maintenance state, license, MSRV, enabled features, +2. inspect release notes, maintenance state, license, compiler requirements, enabled features, native code, and target-specific build behavior; 3. update one crate deliberately with `cargo update -p NAME --precise VERSION`; 4. rerun the dependency audit, `cargo-deny`, `cargo-machete`, and the affected diff --git a/docs/release-artifacts.md b/docs/release-artifacts.md index fb5b442..91326be 100644 --- a/docs/release-artifacts.md +++ b/docs/release-artifacts.md @@ -14,9 +14,8 @@ duplicate inventory. ## Clean Ubuntu prerequisites -The automated gate runs only on `ubuntu-latest`, using Rust 1.97.1 for normal -release work. Rust 1.96.0 remains a separate minimum-supported-version check; -it is not used to build these release artifacts. The clean worker installs: +The automated gate runs only on `ubuntu-latest`, using Rust 1.97.1 for all +release work. The clean worker installs: - a C/C++ build toolchain, Clang, CMake, Ninja, `pkg-config`, Python 3, and `curl` for the pinned Skia build/download path; diff --git a/docs/release-candidate.md b/docs/release-candidate.md index af0e837..f246db6 100644 --- a/docs/release-candidate.md +++ b/docs/release-candidate.md @@ -12,8 +12,7 @@ is evidence of remaining work, never permission to waive it. - Portable, default-feature-disabled library surfaces are cross-compiled from Ubuntu for Windows GNU x86-64 and macOS x86-64. Those checks do not claim native runtime, installer, physical-device, CoreAudio, or WASAPI validation. -- Rust 1.97.1 is the release toolchain. Rust 1.96.0 is exercised separately and - only supports the minimum-version compatibility claim. +- Rust 1.97.1 is the release toolchain. ## Features and prerequisites diff --git a/docs/release-ci-matrix.md b/docs/release-ci-matrix.md index 7d3407b..225932a 100644 --- a/docs/release-ci-matrix.md +++ b/docs/release-ci-matrix.md @@ -4,8 +4,8 @@ MetaCrate has one routine code-ready signal: the `required` job in `.gitea/workflows/ci.yml`. It runs for every push and pull request on `ubuntu-latest`, has a hard 15-minute timeout, and cancels an older run for the same branch or pull request. `.gitea/workflows/release.yml` is the only other -workflow. It is manual, weekly, and tag-only; it never runs for an ordinary -source push or pull request. +workflow. It runs only when manually dispatched or when a release tag is +pushed; it never runs for an ordinary source push or pull request. The reviewed coverage map is `ci/ci-coverage.json`. It maps every responsibility from the former 13 workflows to the required gate, the non-routine release @@ -107,8 +107,8 @@ cargo clean --target-dir target/release-gate ## Non-routine release gate -The Rust `release-gate` command owns clean MSRV and portable cross-target -checks, benchmark compilation, the 16-cycle resource soak, all 16 source +The Rust `release-gate` command owns portable cross-target checks, benchmark +compilation, the 16-cycle resource soak, all 16 source packages, release binaries, native artifact inspection, and the aggregate release-candidate audit. Reference C# performance regeneration and live-grid, physical-audio, proprietary-service, signing, and platform-native installer diff --git a/release/DISTRIBUTION-MANIFEST.json b/release/DISTRIBUTION-MANIFEST.json index c56b67d..05f7cd5 100644 --- a/release/DISTRIBUTION-MANIFEST.json +++ b/release/DISTRIBUTION-MANIFEST.json @@ -22,8 +22,8 @@ }, { "path": ".gitea/workflows/release.yml", - "bytes": 2371, - "sha256": "1db8899a6745f61bec38809f78f1475c0f6afc06b450ef112fea4d03deca069b" + "bytes": 2240, + "sha256": "44dd79fb44ca3f4b1990d3b8a429d83711d2340c1973095205cf49419580003f" }, { "path": ".gitignore", @@ -37,8 +37,8 @@ }, { "path": "CHANGELOG.md", - "bytes": 1334, - "sha256": "8b651436e558670a4349fa7a080b0790b21dfd988213804c2328525d78178e38" + "bytes": 1241, + "sha256": "c44e7bfa30c3d819275c9b0c86c9a7f755f24a020523ceba29fe65190073c048" }, { "path": "Cargo.lock", @@ -47,8 +47,8 @@ }, { "path": "Cargo.toml", - "bytes": 2343, - "sha256": "10ed9e5e0eabc6ea30a2901c6977b38e603254bf70dbd2cb5f74627f0757e46f" + "bytes": 2345, + "sha256": "3f803f7815378375cb46b206c1140db2134418ac93f8143976101841f6334c4d" }, { "path": "LICENSE.md", @@ -62,13 +62,13 @@ }, { "path": "README.md", - "bytes": 36362, - "sha256": "5e760dd80557d199eaaac1913cc3774a3858639f6296f5f173e58d681349d705" + "bytes": 36359, + "sha256": "be3d4681dd6664243126a57e602172a8e8bcda0aacbf5097325872e8434885be" }, { "path": "RUSTREWRITE.md", - "bytes": 55222, - "sha256": "0bcc41a325c382c9c0d1d6861f46512f50d87d701bd30951c9009f492c9277c9" + "bytes": 55218, + "sha256": "4fb62088b3167936b57e63d63aaff0f1102118f2b14e92d2de6c7f53b06363fd" }, { "path": "api/API-COVERAGE.md", @@ -212,8 +212,8 @@ }, { "path": "ci/ci-coverage.json", - "bytes": 5695, - "sha256": "248294710a97ac541882a44d37e8e5b527c32506f2ed95b19b2f255146d866a0" + "bytes": 5668, + "sha256": "96f79c76158a96cc4a9d7215bdb4af3e9e8055f385e8c798d7358cefb64aa686" }, { "path": "ci/concurrency-thresholds.json", @@ -222,8 +222,8 @@ }, { "path": "ci/dependency-policy.json", - "bytes": 12019, - "sha256": "2f214c869cfe2c8c9b50bfe68ffc8596afe469f9cd3aa42b5e6ce5038417eb32" + "bytes": 11999, + "sha256": "61c351d07acbec5429e9f60a24ced1a49a74a1d5be63c6dafffdafb28de89b3d" }, { "path": "ci/evidence/api-audit.json", @@ -267,8 +267,8 @@ }, { "path": "ci/release-matrix.json", - "bytes": 9206, - "sha256": "c87d86bd754b0c6d98971e0bae83b89bee33be1068f080b02ce897adbd22414e" + "bytes": 8016, + "sha256": "1a6a63e59756376c2f7837ae492e5516166f6b8f841ce8e7c8b989b9ce54dab4" }, { "path": "codegen/README.md", @@ -337,8 +337,8 @@ }, { "path": "crates/libremetaverse-imaging-skia/README.md", - "bytes": 6559, - "sha256": "b00a3cf7d487b9dbaacbf16c4ff7bc6b5a794094b786cf7cecd79f2b79fbb80c" + "bytes": 6568, + "sha256": "ba597b91942ecfc16418c4b4098868f47213a39e31874b86b115605424ac5511" }, { "path": "crates/libremetaverse-imaging-skia/src/backend.rs", @@ -1677,8 +1677,8 @@ }, { "path": "docs/dependency-policy.md", - "bytes": 4712, - "sha256": "a37f6d3948e0ceb048a494b17081900c43d1db3a1c9dea15c1b83f81a294077e" + "bytes": 4601, + "sha256": "94162120c749017b095c3796b68ee7538735498100370f3cd6c3ba19c7475db6" }, { "path": "docs/discovery.md", @@ -1717,18 +1717,18 @@ }, { "path": "docs/release-artifacts.md", - "bytes": 4663, - "sha256": "4f8571ce3520d5aaf0ded8722330ab4892ba40b1092048c8f955fe623726f688" + "bytes": 4547, + "sha256": "fecd31af670e38bd1243df4639761846d3138bd56a03c3fc130c8b3ba3cb7e96" }, { "path": "docs/release-candidate.md", - "bytes": 4530, - "sha256": "2d5eda70494a9bd1acbbdc505b779bcddbd04abc8f6a73c2020960302ded2e63" + "bytes": 4433, + "sha256": "1e2ff61971e2c635fd269f88b785f0cbb10c8cc6b156faf3c8d9853ce7998529" }, { "path": "docs/release-ci-matrix.md", - "bytes": 7149, - "sha256": "d6f2fa58bbbc361c9d02ca41c8764f7c2f2d328d998f61b85b4c32a64fe25355" + "bytes": 7169, + "sha256": "4118f3a8b91050b6a97680020a2fc03b32396e6390dc8a068df875348a4e8b71" }, { "path": "docs/release-provenance.md", @@ -2092,8 +2092,8 @@ }, { "path": "tests/api-compile/Cargo.toml", - "bytes": 1210, - "sha256": "d1a81c3da6a95b0c40405451f108d5a6cba809417ec7850d28c04d0ce9a54bbd" + "bytes": 1212, + "sha256": "83dfa9e7becd166279fa1c12b523de8eebe7a521d5e4942e5c8d60fe90792914" }, { "path": "tests/api-compile/src/lib.rs", @@ -2477,8 +2477,8 @@ }, { "path": "tests/semver-port/Cargo.toml", - "bytes": 610, - "sha256": "9a4527b6f5c17cf133b7df2448f06b4dc4bba24159ca5a2d31b949405b421694" + "bytes": 612, + "sha256": "3439e402ac02d740fda2848a1e3549759f87a8158c9df0d081085192d2fe4490" }, { "path": "tests/semver-port/src/main.rs", @@ -2637,13 +2637,13 @@ }, { "path": "tools/ci-matrix/src/ci_gate.rs", - "bytes": 45878, - "sha256": "e445e48b7fd7b1e37dbe7d6347c52324bffeea234d5be08ce08fe93068b8eccf" + "bytes": 45127, + "sha256": "02e0c6569efd7275296262bbc6e2c4b64d4dbe1afad8c9c85d02acc8f5155f4c" }, { "path": "tools/ci-matrix/src/dependency.rs", - "bytes": 12796, - "sha256": "e430e63adf20d38b8c0eb3d7c160395d06b3bdd9c25811b74eea7e0bb07d2ea7" + "bytes": 12695, + "sha256": "1b65164246f5effa4f7d812d91ddd9993c73f1e3330e5c6a44df375efab8c470" }, { "path": "tools/ci-matrix/src/documentation.rs", @@ -2652,13 +2652,13 @@ }, { "path": "tools/ci-matrix/src/lib.rs", - "bytes": 21395, - "sha256": "1d5d27526b1a45897338c198b04ce401c8e8307dfdefebb1cb35a66e4c7bebaf" + "bytes": 21291, + "sha256": "5b8b3c27e2cfd789adb6a32b4ecc0c635684a2f0c2cf6a5fe5fa414d3abff2e5" }, { "path": "tools/ci-matrix/src/main.rs", - "bytes": 9422, - "sha256": "33a3c408f2347b48b4ec43ca3771fa561dd9d58657fda5b067c4e06c4fe7c7fb" + "bytes": 9416, + "sha256": "80bf73e58a256063d63c53df43feb3208aebde4ebb2466a5ffd877000034bb8f" }, { "path": "tools/ci-matrix/src/provenance.rs", diff --git a/tests/api-compile/Cargo.toml b/tests/api-compile/Cargo.toml index d900183..aef3fab 100644 --- a/tests/api-compile/Cargo.toml +++ b/tests/api-compile/Cargo.toml @@ -2,7 +2,7 @@ name = "metacrate-api-compile" version = "0.0.0" edition = "2024" -rust-version = "1.96" +rust-version = "1.97.1" license = "BSD-3-Clause" publish = false diff --git a/tests/semver-port/Cargo.toml b/tests/semver-port/Cargo.toml index 24bf466..623d44f 100644 --- a/tests/semver-port/Cargo.toml +++ b/tests/semver-port/Cargo.toml @@ -2,7 +2,7 @@ name = "metacrate-semver-port" version = "0.0.0" edition = "2024" -rust-version = "1.96" +rust-version = "1.97.1" license = "BSD-3-Clause" publish = false diff --git a/tools/ci-matrix/src/ci_gate.rs b/tools/ci-matrix/src/ci_gate.rs index 29587fa..d2763e3 100644 --- a/tools/ci-matrix/src/ci_gate.rs +++ b/tools/ci-matrix/src/ci_gate.rs @@ -205,30 +205,11 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { ]; let stages: [(&str, Vec); 4] = [ ( - "msrv-and-portable-cross-targets", + "portable-cross-targets", vec![ CommandSpec::new( "cargo", &[ - "+1.96.0", - "check", - "--locked", - "--all-targets", - "--no-default-features", - "-p", - "libremetaverse-types", - "-p", - "libremetaverse-structured-data", - "-p", - "libremetaverse-imaging", - "-p", - "libremetaverse-prim-mesher", - ], - ), - CommandSpec::new( - "cargo", - &[ - "+1.97.1", "check", "--locked", "--target", @@ -247,7 +228,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "check", "--locked", "--target", @@ -271,7 +251,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "bench", "--locked", "-p", @@ -284,7 +263,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "bench", "--locked", "-p", @@ -297,7 +275,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "run", "--locked", "-p", @@ -317,7 +294,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "package", "--locked", "--no-verify", @@ -358,7 +334,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "build", "--locked", "--release", @@ -375,7 +350,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "run", "--locked", "-p", @@ -393,7 +367,6 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> { CommandSpec::new( "cargo", &[ - "+1.97.1", "run", "--locked", "-p", @@ -1102,9 +1075,15 @@ fn validate_workflows(root: &Path, manifest: &CoverageManifest) -> Result<()> { "tracked mtimes must be blob-stable across commits, not commit-wide", )); } - if release.contains("pull_request:") || !release.contains("workflow_dispatch:") { + if release.contains("pull_request:") + || release.contains("schedule:") + || !release.contains("workflow_dispatch:") + || !release.contains("tags:") + || !release.contains("toolchain: 1.97.1") + || release.matches("toolchain:").count() != 1 + { return Err(MatrixError::new( - "release workflow must be explicitly non-routine", + "release workflow must be manual or tag-triggered and install only Rust 1.97.1", )); } for path in &workflow_paths { diff --git a/tools/ci-matrix/src/dependency.rs b/tools/ci-matrix/src/dependency.rs index c85a7da..e9300fe 100644 --- a/tools/ci-matrix/src/dependency.rs +++ b/tools/ci-matrix/src/dependency.rs @@ -14,7 +14,6 @@ const REWRITE_PATH: &str = "RUSTREWRITE.md"; #[derive(Debug, Deserialize)] struct DependencyPolicy { schema: u32, - msrv: String, current: String, reviewed_on: String, review_by: String, @@ -56,7 +55,6 @@ struct ObservedGraph { #[derive(Debug, Serialize)] struct DependencyEvidence<'a> { schema: u32, - msrv: &'a str, current: &'a str, reviewed_on: &'a str, review_by: &'a str, @@ -98,7 +96,6 @@ pub fn audit_dependencies(root: &Path, evidence: &Path) -> Result<()> { .collect(); let evidence_record = DependencyEvidence { schema: 1, - msrv: &policy.msrv, current: &policy.current, reviewed_on: &policy.reviewed_on, review_by: &policy.review_by, @@ -127,9 +124,9 @@ pub fn audit_dependencies(root: &Path, evidence: &Path) -> Result<()> { } fn validate_policy(policy: &DependencyPolicy, rewrite: &str) -> Result<()> { - if policy.schema != 1 || policy.msrv != "1.96.0" || policy.current != "stable" { + if policy.schema != 1 || policy.current != "stable" { return Err(MatrixError::new( - "dependency policy must use schema 1, MSRV 1.96.0, and current stable", + "dependency policy must use schema 1 and current stable Rust", )); } if !date_shape(&policy.reviewed_on) || !date_shape(&policy.review_by) { diff --git a/tools/ci-matrix/src/lib.rs b/tools/ci-matrix/src/lib.rs index 6c0451f..907970f 100644 --- a/tools/ci-matrix/src/lib.rs +++ b/tools/ci-matrix/src/lib.rs @@ -29,8 +29,7 @@ pub use release_candidate::audit_release_candidate; pub const MATRIX_PATH: &str = "ci/release-matrix.json"; const WORKFLOW_PATH: &str = ".gitea/workflows/release.yml"; -const REQUIRED_PROFILES: [&str; 7] = [ - "linux-msrv-portable", +const REQUIRED_PROFILES: [&str; 6] = [ "linux-stable-default", "linux-stable-minimal", "linux-stable-features", @@ -99,7 +98,6 @@ pub type Result = std::result::Result; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ReleaseMatrix { pub schema: u32, - pub msrv: String, pub current: String, pub native_prerequisites: Vec, pub manual_gates: Vec, @@ -194,9 +192,9 @@ pub fn audit_shape(matrix: &ReleaseMatrix) -> Result<()> { if matrix.schema != 1 { return Err(MatrixError::new("release matrix schema must be 1")); } - if matrix.msrv != "1.96.0" || matrix.current != "stable" { + if matrix.current != "stable" { return Err(MatrixError::new( - "release matrix must cover Rust 1.96.0 and current stable", + "release matrix must use the current stable Rust toolchain", )); } @@ -238,11 +236,10 @@ pub fn audit_shape(matrix: &ReleaseMatrix) -> Result<()> { let (platforms, toolchains, feature_sets) = audit_profiles(matrix, &prerequisite_ids)?; audit_release_surface(matrix)?; if platforms != BTreeSet::from(["linux", "macos", "windows"]) - || !toolchains.contains("stable") - || !toolchains.contains("1.96.0") + || toolchains != BTreeSet::from(["stable"]) { return Err(MatrixError::new( - "matrix must cover Linux, macOS, Windows, MSRV, and stable", + "matrix must cover Linux, macOS, and Windows with stable Rust", )); } for required in REQUIRED_FEATURE_SETS { diff --git a/tools/ci-matrix/src/main.rs b/tools/ci-matrix/src/main.rs index bc2b2cf..dfb7449 100644 --- a/tools/ci-matrix/src/main.rs +++ b/tools/ci-matrix/src/main.rs @@ -33,7 +33,7 @@ fn execute() -> Result<(), Box> { Some("audit") if arguments.next().is_none() => { audit(&root, &matrix)?; println!( - "release CI matrix: {} validated profiles; Linux, Windows, macOS, MSRV, stable, default/minimal/optional features, tests, examples, and docs covered", + "release CI matrix: {} validated profiles; Linux, Windows, macOS, stable, default/minimal/optional features, tests, examples, and docs covered", matrix.profiles.len() ); }