fix(ci): remove weekly MSRV release run
Some checks failed
CI / rust-skia (Rust only) (push) Successful in 2m43s
CI / required (push) Failing after 4m12s

This commit is contained in:
2026-08-16 06:19:02 +00:00
parent 969a289efb
commit c5b81afb91
20 changed files with 80 additions and 139 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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.

View File

@@ -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",

View File

@@ -1,6 +1,5 @@
{
"schema": 1,
"msrv": "1.96.0",
"current": "stable",
"reviewed_on": "2026-08-13",
"review_by": "2026-11-11",

View File

@@ -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",

View File

@@ -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:

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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

View File

@@ -205,30 +205,11 @@ pub fn run_release_gate(root: &Path, evidence_path: &Path) -> Result<()> {
];
let stages: [(&str, Vec<CommandSpec>); 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 {

View File

@@ -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) {

View File

@@ -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<T> = std::result::Result<T, MatrixError>;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ReleaseMatrix {
pub schema: u32,
pub msrv: String,
pub current: String,
pub native_prerequisites: Vec<NativePrerequisite>,
pub manual_gates: Vec<String>,
@@ -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 {

View File

@@ -33,7 +33,7 @@ fn execute() -> Result<(), Box<dyn std::error::Error>> {
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()
);
}