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