Prove clean native release artifacts (#106)
Some checks failed
API and SemVer surface / api-surface (push) Failing after 1m28s
Native release artifact audit / audit (push) Failing after 1h6m34s
Native code generation / deterministic (push) Failing after 2m15s
Concurrency and resource soak audit / soak (push) Failing after 6m33s
Documentation / documentation (push) Failing after 2m0s
Imaging and meshing gate / native (push) Failing after 55s
JPEG 2000 feature / linux (push) Successful in 2m46s
performance evidence / audit (push) Failing after 13m45s
Release platform and feature matrix / audit (push) Successful in 1m3s
Native Rust workspace compile / compile (push) Failing after 55s
Skia feature / linux (push) Successful in 31m58s
Dependency and supply-chain audit / audit (push) Failing after 9m34s
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Failing after 10m2s
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Failing after 2m0s
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Failing after 1m56s
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Failing after 6m19s
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Failing after 6m57s
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Failing after 7m6s
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Failing after 8m8s
Some checks failed
API and SemVer surface / api-surface (push) Failing after 1m28s
Native release artifact audit / audit (push) Failing after 1h6m34s
Native code generation / deterministic (push) Failing after 2m15s
Concurrency and resource soak audit / soak (push) Failing after 6m33s
Documentation / documentation (push) Failing after 2m0s
Imaging and meshing gate / native (push) Failing after 55s
JPEG 2000 feature / linux (push) Successful in 2m46s
performance evidence / audit (push) Failing after 13m45s
Release platform and feature matrix / audit (push) Successful in 1m3s
Native Rust workspace compile / compile (push) Failing after 55s
Skia feature / linux (push) Successful in 31m58s
Dependency and supply-chain audit / audit (push) Failing after 9m34s
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Failing after 10m2s
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Failing after 2m0s
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Failing after 1m56s
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Failing after 6m19s
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Failing after 6m57s
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Failing after 7m6s
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Failing after 8m8s
This commit is contained in:
90
docs/release-artifacts.md
Normal file
90
docs/release-artifacts.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Native release artifact audit
|
||||
|
||||
MetaCrate's release gate builds and inspects every release crate and every
|
||||
shipped program. The gate proves that the deliverables are native Rust
|
||||
artifacts: they neither contain nor load LibreMetaverse assemblies, a CLR or
|
||||
Mono host, generated foreign bindings, RPC bridges, downloaded fallbacks, or
|
||||
helper subprocesses.
|
||||
|
||||
The authoritative inventory and allowlists are
|
||||
[`ci/artifact-policy.json`](../ci/artifact-policy.json). Adding a publishable
|
||||
crate, binary target, native FFI boundary, copied package input, or offline
|
||||
smoke requires an explicit policy update. The auditor rejects an incomplete or
|
||||
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:
|
||||
|
||||
- a C/C++ build toolchain, Clang, CMake, Ninja, `pkg-config`, Python 3, and
|
||||
`curl` for the pinned Skia build/download path;
|
||||
- Fontconfig and FreeType development libraries for Skia;
|
||||
- OpenJPEG 2.5.4 through `tools/install_openjpeg_2_5_4.sh`; and
|
||||
- the distribution Opus development package.
|
||||
|
||||
No reference LibreMetaverse checkout, .NET SDK/runtime, Mono installation,
|
||||
credentials, `.env` file, or live grid is present. The release runtime smoke is
|
||||
deliberately offline. Live OpenSim validation is a separate credentialed gate
|
||||
documented in [the live-grid guide](live-grid-smoke.md).
|
||||
|
||||
## What the gate verifies
|
||||
|
||||
The `artifact-audit` command performs all of these checks and fails closed:
|
||||
|
||||
1. Resolve the locked Cargo graph and require all 16 release/source packages to
|
||||
use versioned internal dependencies. Reject known managed-host dependencies.
|
||||
2. Scan production Rust and manifest sources for helper processes, runtime
|
||||
loading, managed assemblies, and unreviewed `extern "C"` boundaries. The only
|
||||
native FFI allowlist is the reviewed OpenJPEG and Opus adapters.
|
||||
3. Inspect every `.crate` archive with byte and entry limits. Reject path
|
||||
traversal, links, special files, managed-code extensions, forbidden runtime
|
||||
markers, and retained workspace dependency paths.
|
||||
4. Extract the packages into a new temporary workspace and build every library
|
||||
and binary offline. All internal crates are resolved from the extracted
|
||||
archives and `METACRATE_REFERENCE_ROOT` points to a path that cannot exist.
|
||||
5. Parse each executable as ELF, PE, or Mach-O and record imported symbols and
|
||||
linked libraries. Reject forbidden CLR/Mono/LibreMetaverse markers.
|
||||
6. Remove all grid credentials, install traps for common managed/download
|
||||
helpers, disable external networking with invalid proxy endpoints, run
|
||||
`--help` for every binary, and execute the declared deeper fake/offline
|
||||
smokes. A helper invocation, timeout, external-service dependency, or absent
|
||||
required output fails the audit.
|
||||
|
||||
The resulting JSON records the source commit, exact Rust compiler, host,
|
||||
package and executable hashes, binary formats, linked libraries, import counts,
|
||||
runtime smoke results, and zero forbidden findings. It is created with
|
||||
create-new semantics so prior evidence cannot be silently overwritten.
|
||||
|
||||
## Reproducing the gate
|
||||
|
||||
After installing the prerequisites above, package all release members in one
|
||||
Cargo invocation. Atomic packaging lets Cargo resolve the versioned internal
|
||||
crate set exactly as a registry publication batch would:
|
||||
|
||||
```sh
|
||||
cargo package --locked --no-verify \
|
||||
-p libremetaverse-types -p libremetaverse-structured-data \
|
||||
-p libremetaverse-imaging -p libremetaverse-imaging-skia \
|
||||
-p libremetaverse-openjpeg -p libremetaverse-opus \
|
||||
-p libremetaverse-prim-mesher -p libremetaverse-lsl-tools \
|
||||
-p libremetaverse -p libremetaverse-rendering-simple \
|
||||
-p libremetaverse-rendering-mesh-foundry -p libremetaverse-rlv \
|
||||
-p libremetaverse-utilities -p libremetaverse-voice-vivox \
|
||||
-p libremetaverse-voice-webrtc -p libremetaverse-programs
|
||||
|
||||
METACRATE_RUST_COMMIT=$(git rev-parse --verify HEAD) \
|
||||
cargo build --locked --release -j 1 -p libremetaverse-programs --bins
|
||||
|
||||
cargo run --locked -p metacrate-ci-matrix -- artifact-audit \
|
||||
--artifact-dir target/release \
|
||||
--package-dir target/package \
|
||||
--evidence artifacts/release/artifact-audit.json
|
||||
```
|
||||
|
||||
`--no-verify` prevents Cargo from building each archive redundantly. It does
|
||||
not skip release verification: the following audit extracts all archives and
|
||||
performs one stricter offline build of the complete package set. The generated
|
||||
core is large, so the workspace release profile uses bounded optimization and
|
||||
single-job CI to remain within an 8 GiB clean worker.
|
||||
Reference in New Issue
Block a user