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:
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
crates/libremetaverse/assets/avatar_lad.xml -whitespace
|
||||||
94
.gitea/workflows/artifact-audit.yml
Normal file
94
.gitea/workflows/artifact-audit.yml
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
name: Native release artifact audit
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".gitea/workflows/artifact-audit.yml"
|
||||||
|
- "ci/artifact-policy.json"
|
||||||
|
- "ci/dependency-policy.json"
|
||||||
|
- "ci/provenance-policy.json"
|
||||||
|
- "tools/ci-matrix/**"
|
||||||
|
- "tools/install_openjpeg_2_5_4.sh"
|
||||||
|
- "docs/release-artifacts.md"
|
||||||
|
- "Cargo.toml"
|
||||||
|
- "Cargo.lock"
|
||||||
|
- "crates/**"
|
||||||
|
- "programs/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".gitea/workflows/artifact-audit.yml"
|
||||||
|
- "ci/artifact-policy.json"
|
||||||
|
- "ci/dependency-policy.json"
|
||||||
|
- "ci/provenance-policy.json"
|
||||||
|
- "tools/ci-matrix/**"
|
||||||
|
- "tools/install_openjpeg_2_5_4.sh"
|
||||||
|
- "docs/release-artifacts.md"
|
||||||
|
- "Cargo.toml"
|
||||||
|
- "Cargo.lock"
|
||||||
|
- "crates/**"
|
||||||
|
- "programs/**"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_BUILD_JOBS: 1
|
||||||
|
CARGO_INCREMENTAL: 0
|
||||||
|
FORCE_SKIA_BINARIES_DOWNLOAD: 1
|
||||||
|
OPENJPEG_PREFIX: /tmp/metacrate-openjpeg-artifact-audit
|
||||||
|
PKG_CONFIG_PATH: /tmp/metacrate-openjpeg-artifact-audit/lib/pkgconfig
|
||||||
|
LD_LIBRARY_PATH: /tmp/metacrate-openjpeg-artifact-audit/lib
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
audit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: 1.97.1
|
||||||
|
- name: Install documented native prerequisites
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install --yes build-essential clang cmake curl ninja-build pkg-config python3 libfontconfig1-dev libfreetype6-dev libopus-dev
|
||||||
|
tools/install_openjpeg_2_5_4.sh "$OPENJPEG_PREFIX"
|
||||||
|
pkg-config --exact-version 2.5.4 libopenjp2
|
||||||
|
pkg-config --modversion opus
|
||||||
|
- name: Record source identity without a shipped build helper
|
||||||
|
run: echo "METACRATE_RUST_COMMIT=$(git rev-parse --verify HEAD)" >>"$GITHUB_ENV"
|
||||||
|
- name: Fetch the locked dependency graph
|
||||||
|
run: cargo fetch --locked
|
||||||
|
- name: Create every release source package atomically
|
||||||
|
run: |
|
||||||
|
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
|
||||||
|
- name: Build every shipped native executable
|
||||||
|
run: cargo build --locked --release -j 1 -p libremetaverse-programs --bins
|
||||||
|
- name: Inspect packages, binaries, links, and offline runtime behavior
|
||||||
|
run: |
|
||||||
|
cargo run --locked -p metacrate-ci-matrix -- artifact-audit \
|
||||||
|
--artifact-dir target/release \
|
||||||
|
--package-dir target/package \
|
||||||
|
--evidence artifacts/release/artifact-audit.json
|
||||||
|
- name: Upload immutable audit evidence and source packages
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: native-release-artifact-audit
|
||||||
|
path: |
|
||||||
|
artifacts/release/artifact-audit.json
|
||||||
|
target/package/*.crate
|
||||||
|
if-no-files-found: error
|
||||||
40
Cargo.lock
generated
40
Cargo.lock
generated
@@ -1071,6 +1071,17 @@ version = "0.3.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b"
|
checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "goblin"
|
||||||
|
version = "0.10.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "983a6aafb3b12d4c41ea78d39e189af4298ce747353945ff5105b54a056e5cd9"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
"plain",
|
||||||
|
"scroll",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "group"
|
name = "group"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
@@ -1773,9 +1784,12 @@ dependencies = [
|
|||||||
name = "metacrate-ci-matrix"
|
name = "metacrate-ci-matrix"
|
||||||
version = "0.0.1"
|
version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"flate2",
|
||||||
|
"goblin",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.11.0",
|
"sha2 0.11.0",
|
||||||
|
"tar",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2302,6 +2316,12 @@ version = "0.3.33"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
|
checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "plain"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "poly1305"
|
name = "poly1305"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
@@ -2777,6 +2797,26 @@ dependencies = [
|
|||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scroll"
|
||||||
|
version = "0.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c1257cd4248b4132760d6524d6dda4e053bc648c9070b960929bf50cfb1e7add"
|
||||||
|
dependencies = [
|
||||||
|
"scroll_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scroll_derive"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ed76efe62313ab6610570951494bdaa81568026e0318eaa55f167de70eeea67d"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.119",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sctp-proto"
|
name = "sctp-proto"
|
||||||
version = "0.10.3"
|
version = "0.10.3"
|
||||||
|
|||||||
13
Cargo.toml
13
Cargo.toml
@@ -1,11 +1,11 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
exclude = ["crates/libremetaverse-openjpeg"]
|
|
||||||
members = [
|
members = [
|
||||||
"crates/libremetaverse-types",
|
"crates/libremetaverse-types",
|
||||||
"crates/libremetaverse-structured-data",
|
"crates/libremetaverse-structured-data",
|
||||||
"crates/libremetaverse-imaging",
|
"crates/libremetaverse-imaging",
|
||||||
"crates/libremetaverse-imaging-skia",
|
"crates/libremetaverse-imaging-skia",
|
||||||
|
"crates/libremetaverse-openjpeg",
|
||||||
"crates/libremetaverse-prim-mesher",
|
"crates/libremetaverse-prim-mesher",
|
||||||
"crates/libremetaverse",
|
"crates/libremetaverse",
|
||||||
"crates/libremetaverse-rendering-simple",
|
"crates/libremetaverse-rendering-simple",
|
||||||
@@ -29,7 +29,7 @@ version = "0.0.1"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.96"
|
rust-version = "1.96"
|
||||||
license = "BSD-3-Clause"
|
license = "BSD-3-Clause"
|
||||||
repository = "https://github.com/cinderblocks/libremetaverse"
|
repository = "https://git.rfc1437.de/hugo/MetaCrate"
|
||||||
|
|
||||||
[workspace.lints.rust]
|
[workspace.lints.rust]
|
||||||
unsafe_code = "forbid"
|
unsafe_code = "forbid"
|
||||||
@@ -38,6 +38,15 @@ unsafe_code = "forbid"
|
|||||||
all = { level = "warn", priority = -1 }
|
all = { level = "warn", priority = -1 }
|
||||||
pedantic = { level = "warn", priority = -1 }
|
pedantic = { level = "warn", priority = -1 }
|
||||||
|
|
||||||
|
# The generated compatibility core is intentionally large. A bounded release
|
||||||
|
# profile keeps clean-machine packaging viable on the documented 8 GiB worker
|
||||||
|
# while still producing optimized, debug-free native artifacts.
|
||||||
|
[profile.release]
|
||||||
|
opt-level = 1
|
||||||
|
debug = 0
|
||||||
|
incremental = false
|
||||||
|
codegen-units = 256
|
||||||
|
|
||||||
# The generated core API is intentionally very large; full release LTO-style
|
# The generated core API is intentionally very large; full release LTO-style
|
||||||
# optimization can exceed small Gitea worker memory before diagnostic fixture
|
# optimization can exceed small Gitea worker memory before diagnostic fixture
|
||||||
# benchmarks run. This stable profile retains optimization without debug or
|
# benchmarks run. This stable profile retains optimization without debug or
|
||||||
|
|||||||
@@ -81,6 +81,9 @@ offline-build, cache, and redistribution details are in the
|
|||||||
The validated Linux/MSRV/Windows/macOS target and feature inventory, clean
|
The validated Linux/MSRV/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
|
||||||
|
clean-machine package build, binary/link inspection, offline runtime smokes,
|
||||||
|
and evidence proving that shipped artifacts have no CLR or bridge dependency.
|
||||||
Deterministic task, socket, file, subscription, cancellation, and allocation
|
Deterministic task, socket, file, subscription, cancellation, and allocation
|
||||||
baselines are documented in the
|
baselines are documented in the
|
||||||
[concurrency hardening guide](docs/concurrency-hardening.md).
|
[concurrency hardening guide](docs/concurrency-hardening.md).
|
||||||
|
|||||||
@@ -412,6 +412,7 @@ MSRV, features, and licenses at adoption time.
|
|||||||
| ZLogger / Microsoft logging | [`tracing` 0.1.44](https://crates.io/crates/tracing/0.1.44), [`tracing-subscriber` 0.3.23](https://crates.io/crates/tracing-subscriber/0.3.23) | Libraries emit spans/events; binaries choose formatting and filters. Never log credentials or capability tokens. |
|
| ZLogger / Microsoft logging | [`tracing` 0.1.44](https://crates.io/crates/tracing/0.1.44), [`tracing-subscriber` 0.3.23](https://crates.io/crates/tracing-subscriber/0.3.23) | Libraries emit spans/events; binaries choose formatting and filters. Never log credentials or capability tokens. |
|
||||||
| rate limiting | [`governor` 0.10.4](https://crates.io/crates/governor/0.10.4) | Candidate for caps categories. First reproduce burst/refill/cancellation behavior with deterministic clock tests. |
|
| rate limiting | [`governor` 0.10.4](https://crates.io/crates/governor/0.10.4) | Candidate for caps categories. First reproduce burst/refill/cancellation behavior with deterministic clock tests. |
|
||||||
| compression and tar archives | [`flate2` 1.1.9](https://crates.io/crates/flate2/1.1.9), [`tar` 0.4.46](https://crates.io/crates/tar/0.4.46) | Enforce decompressed-size, path traversal, and entry-count limits on untrusted OAR data. |
|
| compression and tar archives | [`flate2` 1.1.9](https://crates.io/crates/flate2/1.1.9), [`tar` 0.4.46](https://crates.io/crates/tar/0.4.46) | Enforce decompressed-size, path traversal, and entry-count limits on untrusted OAR data. |
|
||||||
|
| release artifact inspection | [`goblin` 0.10.5](https://crates.io/crates/goblin/0.10.5) | Parse ELF, PE, and Mach-O imports, symbols, and linked libraries without executing an artifact or relying on platform-only inspection tools. |
|
||||||
| XML and URL | [`quick-xml` 0.41.0](https://crates.io/crates/quick-xml/0.41.0), [`url` 2.5.8](https://crates.io/crates/url/2.5.8), [`base64` 0.23.1](https://crates.io/crates/base64/0.23.1) | Streaming XML for LLSD/login; retain exact URL escaping behavior with fixtures. |
|
| XML and URL | [`quick-xml` 0.41.0](https://crates.io/crates/quick-xml/0.41.0), [`url` 2.5.8](https://crates.io/crates/url/2.5.8), [`base64` 0.23.1](https://crates.io/crates/base64/0.23.1) | Streaming XML for LLSD/login; retain exact URL escaping behavior with fixtures. |
|
||||||
| CoreJ2K 2.3.3.91 | system [OpenJPEG](https://www.openjpeg.org/) 2.5.4+ through the private `libremetaverse-openjpeg` adapter | Opt-in `jpeg2000` feature; checked-in minimal bindings avoid a libclang build dependency. Bounded memory streams and header validation isolate native code. Golden tests cover channel order, alpha, 16-bit precision, dimensions, discard levels, lossless/lossy modes, and malformed input. |
|
| CoreJ2K 2.3.3.91 | system [OpenJPEG](https://www.openjpeg.org/) 2.5.4+ through the private `libremetaverse-openjpeg` adapter | Opt-in `jpeg2000` feature; checked-in minimal bindings avoid a libclang build dependency. Bounded memory streams and header validation isolate native code. Golden tests cover channel order, alpha, 16-bit precision, dimensions, discard levels, lossless/lossy modes, and malformed input. |
|
||||||
| SkiaSharp 4.150.1 | [`skia-safe` 0.99.0](https://crates.io/crates/skia-safe/0.99.0) | Adopted behind the opt-in `skia` feature. Target-specific official binary-cache feature sets provide BMP/GIF/ICO/JPEG/PNG/WBMP/WebP decoding on macOS, Linux, and Windows; checked owned buffers keep Skia types out of the core image API. |
|
| SkiaSharp 4.150.1 | [`skia-safe` 0.99.0](https://crates.io/crates/skia-safe/0.99.0) | Adopted behind the opt-in `skia` feature. Target-specific official binary-cache feature sets provide BMP/GIF/ICO/JPEG/PNG/WBMP/WebP decoding on macOS, Linux, and Windows; checked owned buffers keep Skia types out of the core image API. |
|
||||||
@@ -443,7 +444,7 @@ The current adopted set is:
|
|||||||
| Wire data and parsing | `base64`, `serde`, `serde_json`, `roxmltree`, `regex`, `unicode-general-category` |
|
| Wire data and parsing | `base64`, `serde`, `serde_json`, `roxmltree`, `regex`, `unicode-general-category` |
|
||||||
| Identity, hashing, and platform facts | `uuid`, `getrandom`, `md-5`, `sha1`, `sha2`, `mac_address2`, `os_info` |
|
| Identity, hashing, and platform facts | `uuid`, `getrandom`, `md-5`, `sha1`, `sha2`, `mac_address2`, `os_info` |
|
||||||
| Archives, images, and audio | `flate2`, `tar`, `bcdec_rs`, `skia-safe`, `hound`, `vorbis_rs`, `str0m`, `cpal` |
|
| Archives, images, and audio | `flate2`, `tar`, `bcdec_rs`, `skia-safe`, `hound`, `vorbis_rs`, `str0m`, `cpal` |
|
||||||
| Code generation and program CLI | `syn`, `prettyplease`, `clap` |
|
| Code generation, program CLI, and artifact inspection | `syn`, `prettyplease`, `clap`, `goblin` |
|
||||||
| Build and compatibility-test support | `pkg-config`, `vcpkg`, `stats_alloc` |
|
| Build and compatibility-test support | `pkg-config`, `vcpkg`, `stats_alloc` |
|
||||||
|
|
||||||
System libopus is accessed only through the private `libremetaverse-opus`
|
System libopus is accessed only through the private `libremetaverse-opus`
|
||||||
@@ -867,6 +868,13 @@ not part of the default smoke test.
|
|||||||
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.
|
||||||
|
|
||||||
|
The native release artifact gate packages all 16 release/source crates as one
|
||||||
|
versioned set, rebuilds those extracted packages offline without the reference
|
||||||
|
checkout, parses every shipped ELF/PE/Mach-O program and its native imports, and
|
||||||
|
runs credential-free helper-trapped smoke modes for all ten executables. The
|
||||||
|
policy, clean-machine prerequisites, and reproducible commands are documented
|
||||||
|
in [`docs/release-artifacts.md`](docs/release-artifacts.md).
|
||||||
|
|
||||||
Each milestone ends with zero unreviewed generated shims in its owned modules,
|
Each milestone ends with zero unreviewed generated shims in its owned modules,
|
||||||
no weakened parity assertions, formatted/clippy-clean code, public Rust docs
|
no weakened parity assertions, formatted/clippy-clean code, public Rust docs
|
||||||
that cite the corresponding C# concept, and a refreshed completeness report
|
that cite the corresponding C# concept, and a refreshed completeness report
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ Generated by `metacrate-ci-matrix documentation-report`; do not edit by hand.
|
|||||||
| Mapped public members | 30789 | 30789 | 100% |
|
| Mapped public members | 30789 | 30789 | 100% |
|
||||||
| Compiled Rust guide snippets | 5 | 4 minimum | pass |
|
| Compiled Rust guide snippets | 5 | 4 minimum | pass |
|
||||||
| Linked native programs | 9 | 9 | 100% |
|
| Linked native programs | 9 | 9 | 100% |
|
||||||
| Checked local Markdown links | 69 | 69 | 100% |
|
| Checked local Markdown links | 84 | 84 | 100% |
|
||||||
|
|
||||||
Every mapped item is tied to its exact C# documentation ID and to the ownership, asyncness, error, overload, mapping-kind, and Rust-signature decisions in [`RUST-MAPPING.tsv`](RUST-MAPPING.tsv). Public types are tied to the corresponding type mapping. The upstream source is pinned to [`2aa70bb68513b39795da5d13c88f31b86e85a3ba`](https://github.com/cinderblocks/libremetaverse/tree/2aa70bb68513b39795da5d13c88f31b86e85a3ba).
|
Every mapped item is tied to its exact C# documentation ID and to the ownership, asyncness, error, overload, mapping-kind, and Rust-signature decisions in [`RUST-MAPPING.tsv`](RUST-MAPPING.tsv). Public types are tied to the corresponding type mapping. The upstream source is pinned to [`2aa70bb68513b39795da5d13c88f31b86e85a3ba`](https://github.com/cinderblocks/libremetaverse/tree/2aa70bb68513b39795da5d13c88f31b86e85a3ba).
|
||||||
|
|||||||
79
ci/artifact-policy.json
Normal file
79
ci/artifact-policy.json
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"schema": 1,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"release_packages": [
|
||||||
|
"libremetaverse-types",
|
||||||
|
"libremetaverse-structured-data",
|
||||||
|
"libremetaverse-imaging",
|
||||||
|
"libremetaverse-imaging-skia",
|
||||||
|
"libremetaverse-openjpeg",
|
||||||
|
"libremetaverse-opus",
|
||||||
|
"libremetaverse-prim-mesher",
|
||||||
|
"libremetaverse-lsl-tools",
|
||||||
|
"libremetaverse",
|
||||||
|
"libremetaverse-rendering-simple",
|
||||||
|
"libremetaverse-rendering-mesh-foundry",
|
||||||
|
"libremetaverse-rlv",
|
||||||
|
"libremetaverse-utilities",
|
||||||
|
"libremetaverse-voice-vivox",
|
||||||
|
"libremetaverse-voice-webrtc",
|
||||||
|
"libremetaverse-programs"
|
||||||
|
],
|
||||||
|
"binaries": [
|
||||||
|
{"name":"inventory-explorer","services":["OpenSim login, capabilities, AIS, UDP when explicitly given credentials"]},
|
||||||
|
{"name":"irc-gateway","services":["OpenSim and IRC TCP when explicitly given credentials and an IRC endpoint"]},
|
||||||
|
{"name":"live-grid-smoke","services":["none in audit/fake mode; explicit OpenSim endpoint in live mode"]},
|
||||||
|
{"name":"osd-inspector","services":["none; offline files and standard streams only"]},
|
||||||
|
{"name":"packet-dump","services":["OpenSim login and UDP when explicitly given credentials"]},
|
||||||
|
{"name":"prim-inspector","services":["OpenSim login, capabilities, and UDP when explicitly given credentials"]},
|
||||||
|
{"name":"simple-bot","services":["OpenSim login, capabilities, and UDP when explicitly given credentials"]},
|
||||||
|
{"name":"test-client","services":["OpenSim services selected by explicit login and commands"]},
|
||||||
|
{"name":"vivox-test","services":["none in help mode; explicit external Vivox control service in live mode"]},
|
||||||
|
{"name":"webrtc-test","services":["IPv4 loopback in fake mode; explicit OpenSim voice capabilities in live mode"]}
|
||||||
|
],
|
||||||
|
"offline_smokes": [
|
||||||
|
{"binary":"osd-inspector","args":["prim-to-osd"],"required_output":false},
|
||||||
|
{"binary":"live-grid-smoke","args":["--audit-only"],"required_output":false},
|
||||||
|
{"binary":"live-grid-smoke","args":["--fake","--evidence","{output}"],"required_output":true},
|
||||||
|
{"binary":"webrtc-test","args":["--fake","--timeout-seconds","10"],"required_output":false}
|
||||||
|
],
|
||||||
|
"allowed_native_ffi": [
|
||||||
|
"crates/libremetaverse-openjpeg/src/ffi.rs",
|
||||||
|
"crates/libremetaverse-openjpeg/src/lib.rs",
|
||||||
|
"crates/libremetaverse-opus/src/lib.rs"
|
||||||
|
],
|
||||||
|
"mirrored_inputs": [
|
||||||
|
{"source":"codegen/inputs/avatar_lad.xml","package_path":"crates/libremetaverse/assets/avatar_lad.xml"}
|
||||||
|
],
|
||||||
|
"forbidden_dependencies": [
|
||||||
|
"coreclr",
|
||||||
|
"grpc",
|
||||||
|
"grpcio",
|
||||||
|
"hostfxr",
|
||||||
|
"jsonrpsee",
|
||||||
|
"mono",
|
||||||
|
"netcorehost",
|
||||||
|
"pythonnet",
|
||||||
|
"tarpc",
|
||||||
|
"thrift",
|
||||||
|
"tonic",
|
||||||
|
"xmlrpc"
|
||||||
|
],
|
||||||
|
"forbidden_artifact_strings": [
|
||||||
|
"coreclr",
|
||||||
|
"hostfxr",
|
||||||
|
"mscoree.dll",
|
||||||
|
"libmono",
|
||||||
|
"libremetaverse.dll",
|
||||||
|
"system.runtime.loader",
|
||||||
|
"assemblyloadcontext"
|
||||||
|
],
|
||||||
|
"forbidden_source_strings": [
|
||||||
|
"std::process::Command",
|
||||||
|
"tokio::process",
|
||||||
|
"Command::new(\"dotnet\")",
|
||||||
|
"Command::new(\"mono\")",
|
||||||
|
"libloading::",
|
||||||
|
"include_bytes!(\"LibreMetaverse.dll\")"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,10 +9,11 @@
|
|||||||
{ "name": "bcdec_rs", "versions": ["0.2.0"], "purpose": "Pure Rust BC6H and BC7 texture block decoding", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`bcdec_rs`" },
|
{ "name": "bcdec_rs", "versions": ["0.2.0"], "purpose": "Pure Rust BC6H and BC7 texture block decoding", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`bcdec_rs`" },
|
||||||
{ "name": "clap", "versions": ["4.6.6"], "purpose": "Typed command-line parsing for shipped diagnostic programs", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`clap`" },
|
{ "name": "clap", "versions": ["4.6.6"], "purpose": "Typed command-line parsing for shipped diagnostic programs", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`clap`" },
|
||||||
{ "name": "cpal", "versions": ["0.18.1"], "purpose": "Opt-in cross-platform physical audio device access", "maintenance": "monitored-native", "transitive_cost": "high", "native": true, "rewrite_anchor": "`cpal`" },
|
{ "name": "cpal", "versions": ["0.18.1"], "purpose": "Opt-in cross-platform physical audio device access", "maintenance": "monitored-native", "transitive_cost": "high", "native": true, "rewrite_anchor": "`cpal`" },
|
||||||
{ "name": "flate2", "versions": ["1.1.9"], "purpose": "Bounded gzip and deflate asset/archive decoding", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`flate2`" },
|
{ "name": "flate2", "versions": ["1.1.9"], "purpose": "Bounded gzip and deflate asset/archive and release-package decoding", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`flate2`" },
|
||||||
{ "name": "futures-channel", "versions": ["0.3.33"], "purpose": "One-shot compatibility callbacks without another runtime", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`futures-channel`" },
|
{ "name": "futures-channel", "versions": ["0.3.33"], "purpose": "One-shot compatibility callbacks without another runtime", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`futures-channel`" },
|
||||||
{ "name": "futures-util", "versions": ["0.3.33"], "purpose": "Stream adaptation for HTTP capability bodies", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`futures-util`" },
|
{ "name": "futures-util", "versions": ["0.3.33"], "purpose": "Stream adaptation for HTTP capability bodies", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`futures-util`" },
|
||||||
{ "name": "getrandom", "versions": ["0.4.3"], "purpose": "Operating-system entropy for protocol identifiers", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`getrandom`" },
|
{ "name": "getrandom", "versions": ["0.4.3"], "purpose": "Operating-system entropy for protocol identifiers", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`getrandom`" },
|
||||||
|
{ "name": "goblin", "versions": ["0.10.5"], "purpose": "Cross-platform ELF, PE, and Mach-O release artifact inspection", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`goblin`" },
|
||||||
{ "name": "hound", "versions": ["3.5.1"], "purpose": "Bounded PCM WAV parsing for WebRTC playback", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`hound`" },
|
{ "name": "hound", "versions": ["3.5.1"], "purpose": "Bounded PCM WAV parsing for WebRTC playback", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`hound`" },
|
||||||
{ "name": "mac_address2", "versions": ["2.0.2"], "purpose": "Cross-platform machine identity compatibility input", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`mac_address2`" },
|
{ "name": "mac_address2", "versions": ["2.0.2"], "purpose": "Cross-platform machine identity compatibility input", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`mac_address2`" },
|
||||||
{ "name": "md-5", "versions": ["0.10.6"], "purpose": "Legacy protocol checksum compatibility", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`md-5`" },
|
{ "name": "md-5", "versions": ["0.10.6"], "purpose": "Legacy protocol checksum compatibility", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`md-5`" },
|
||||||
@@ -30,7 +31,7 @@
|
|||||||
{ "name": "stats_alloc", "versions": ["0.1.10"], "purpose": "Allocation-budget compatibility tests, concurrency leak audits, and reproducible performance evidence", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`stats_alloc`" },
|
{ "name": "stats_alloc", "versions": ["0.1.10"], "purpose": "Allocation-budget compatibility tests, concurrency leak audits, and reproducible performance evidence", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`stats_alloc`" },
|
||||||
{ "name": "str0m", "versions": ["0.22.0"], "purpose": "Native Rust ICE, DTLS, SRTP, RTP, and SCTP WebRTC transport", "maintenance": "active", "transitive_cost": "high", "native": false, "rewrite_anchor": "`str0m`" },
|
{ "name": "str0m", "versions": ["0.22.0"], "purpose": "Native Rust ICE, DTLS, SRTP, RTP, and SCTP WebRTC transport", "maintenance": "active", "transitive_cost": "high", "native": false, "rewrite_anchor": "`str0m`" },
|
||||||
{ "name": "syn", "versions": ["2.0.119"], "purpose": "Syntax validation for generated Rust sources", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`syn`" },
|
{ "name": "syn", "versions": ["2.0.119"], "purpose": "Syntax validation for generated Rust sources", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`syn`" },
|
||||||
{ "name": "tar", "versions": ["0.4.46"], "purpose": "Bounded OAR and asset archive traversal", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`tar`" },
|
{ "name": "tar", "versions": ["0.4.46"], "purpose": "Bounded OAR, asset, and release-package archive traversal", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`tar`" },
|
||||||
{ "name": "tokio", "versions": ["1.53.1"], "purpose": "Shared asynchronous networking, timers, channels, and tasks", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`tokio`" },
|
{ "name": "tokio", "versions": ["1.53.1"], "purpose": "Shared asynchronous networking, timers, channels, and tasks", "maintenance": "active", "transitive_cost": "medium", "native": false, "rewrite_anchor": "`tokio`" },
|
||||||
{ "name": "unicode-general-category", "versions": ["1.1.0"], "purpose": "Unicode category matching in the LSL lexer", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`unicode-general-category`" },
|
{ "name": "unicode-general-category", "versions": ["1.1.0"], "purpose": "Unicode category matching in the LSL lexer", "maintenance": "stable", "transitive_cost": "low", "native": false, "rewrite_anchor": "`unicode-general-category`" },
|
||||||
{ "name": "uuid", "versions": ["1.24.0"], "purpose": "Random UUID generation behind protocol-compatible wrappers", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`uuid`" },
|
{ "name": "uuid", "versions": ["1.24.0"], "purpose": "Random UUID generation behind protocol-compatible wrappers", "maintenance": "active", "transitive_cost": "low", "native": false, "rewrite_anchor": "`uuid`" },
|
||||||
|
|||||||
437
ci/evidence/artifact-audit.json
Normal file
437
ci/evidence/artifact-audit.json
Normal file
@@ -0,0 +1,437 @@
|
|||||||
|
{
|
||||||
|
"schema": 1,
|
||||||
|
"source_commit": "738fe3933eeb64d9081a53c71753e8d1e43c4d00",
|
||||||
|
"rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)",
|
||||||
|
"operating_system": "linux",
|
||||||
|
"architecture": "x86_64",
|
||||||
|
"cargo_graph_packages": 378,
|
||||||
|
"release_packages": [
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-types",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-types-0.0.1.crate",
|
||||||
|
"sha256": "18d44c43c3799938da5affd119519f20a9f380e626f6682d8ce42ccfdba2de8f",
|
||||||
|
"files": 19,
|
||||||
|
"unpacked_bytes": 648009
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-structured-data",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-structured-data-0.0.1.crate",
|
||||||
|
"sha256": "b482a76b2b785085da673df29a8dd7efe4d278cd69a8d7e5d822dfc407057f2a",
|
||||||
|
"files": 14,
|
||||||
|
"unpacked_bytes": 339585
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-imaging",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-imaging-0.0.1.crate",
|
||||||
|
"sha256": "bd797ee3dacf4475b078cc6e881b4db5419f01fe7267453bb140054051fd08a2",
|
||||||
|
"files": 10,
|
||||||
|
"unpacked_bytes": 87617
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-imaging-skia",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-imaging-skia-0.0.1.crate",
|
||||||
|
"sha256": "a408014f1051ab534d388ab268acf700e73317796eab8aceecb7271203ad6b43",
|
||||||
|
"files": 9,
|
||||||
|
"unpacked_bytes": 57306
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-openjpeg",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-openjpeg-0.0.1.crate",
|
||||||
|
"sha256": "72cee822e670b8db4d43c0ba03779e294b8b5c76aadfc50aa3c03d0295a3f18c",
|
||||||
|
"files": 8,
|
||||||
|
"unpacked_bytes": 39281
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-opus",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-opus-0.0.1.crate",
|
||||||
|
"sha256": "a3d6a8a5796198d2773c7e5c48c186f98387eaf994f6d492af6dd29d8e4d486c",
|
||||||
|
"files": 6,
|
||||||
|
"unpacked_bytes": 12860
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-prim-mesher",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-prim-mesher-0.0.1.crate",
|
||||||
|
"sha256": "436d85822576f512ba1223f0760786fc3050d02cb955d2191208caaa46706764",
|
||||||
|
"files": 12,
|
||||||
|
"unpacked_bytes": 208514
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-lsl-tools",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-lsl-tools-0.0.1.crate",
|
||||||
|
"sha256": "3f8a9697939c837c1fe8abbcea72fc4449195aa56d409d01769ab9325009f0ee",
|
||||||
|
"files": 14,
|
||||||
|
"unpacked_bytes": 648214
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-0.0.1.crate",
|
||||||
|
"sha256": "f06add7851122cfaece3589485ee027daf7f59e5ad7043207272a7e1085a8302",
|
||||||
|
"files": 90,
|
||||||
|
"unpacked_bytes": 28920093
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-rendering-simple",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-rendering-simple-0.0.1.crate",
|
||||||
|
"sha256": "92bfb18f10275bb9daafd7f7372a7c7a2df03f150e6b5fa0444881db7ed76379",
|
||||||
|
"files": 9,
|
||||||
|
"unpacked_bytes": 92992
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-rendering-mesh-foundry",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-rendering-mesh-foundry-0.0.1.crate",
|
||||||
|
"sha256": "6b17528c8c67270c0d84a3bad2c4fb580f123b6db38f296dabcdd97aa798fc16",
|
||||||
|
"files": 10,
|
||||||
|
"unpacked_bytes": 145049
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-rlv",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-rlv-0.0.1.crate",
|
||||||
|
"sha256": "c32d9b5eea214abe415f1463a20b985a426fa01fcdaf49a6511d5be3b110eef8",
|
||||||
|
"files": 12,
|
||||||
|
"unpacked_bytes": 487158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-utilities",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-utilities-0.0.1.crate",
|
||||||
|
"sha256": "2f339ac2503cf76e352c97f5fb85be62965db4510766c931e17b686bed7f19f6",
|
||||||
|
"files": 6,
|
||||||
|
"unpacked_bytes": 67245
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-voice-vivox",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-voice-vivox-0.0.1.crate",
|
||||||
|
"sha256": "914ccd0f2c5007828593b3edc7ee76289d37b50b422fd83254604f443b4fe651",
|
||||||
|
"files": 7,
|
||||||
|
"unpacked_bytes": 431677
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-voice-webrtc",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-voice-webrtc-0.0.1.crate",
|
||||||
|
"sha256": "e525c71c95d6e4ff4b98174ca13e5e175e9eb9e8a8cc9df693137c1d2165466c",
|
||||||
|
"files": 7,
|
||||||
|
"unpacked_bytes": 317685
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libremetaverse-programs",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"archive": "libremetaverse-programs-0.0.1.crate",
|
||||||
|
"sha256": "f3c4173c601f0e74f160055de9fb751d375525e00a2d9b398e91e96eacb74247",
|
||||||
|
"files": 47,
|
||||||
|
"unpacked_bytes": 1032987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binaries": [
|
||||||
|
{
|
||||||
|
"name": "inventory-explorer",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22508072,
|
||||||
|
"sha256": "bcbd78deb7b740db6b7fb396581a4316e47d7d81cc9ed9f9ccc13acbc156f82b",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 189,
|
||||||
|
"services": [
|
||||||
|
"OpenSim login, capabilities, AIS, UDP when explicitly given credentials"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "irc-gateway",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22257728,
|
||||||
|
"sha256": "56c6bbf4529567871ec2f3b04354d565b77b7630a06ce66f52b0955e5dd41a9e",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 189,
|
||||||
|
"services": [
|
||||||
|
"OpenSim and IRC TCP when explicitly given credentials and an IRC endpoint"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "live-grid-smoke",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 23545976,
|
||||||
|
"sha256": "6d0016b083b80c1d0a557d459ad278e5ef1e7d7d685185113f9115ed6db1db2d",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 194,
|
||||||
|
"services": [
|
||||||
|
"none in audit/fake mode; explicit OpenSim endpoint in live mode"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--audit-only"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--fake",
|
||||||
|
"--evidence",
|
||||||
|
"{output}"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "osd-inspector",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 7132752,
|
||||||
|
"sha256": "314836cbcda99bec0dca737d3764c84350d61453ecf42c4cddab48924b6092f2",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 94,
|
||||||
|
"services": [
|
||||||
|
"none; offline files and standard streams only"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"prim-to-osd"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "packet-dump",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22066600,
|
||||||
|
"sha256": "83dfc4ce10d86ed7b101adaee496c0850c8cfa7b37737056d66c4171a67732c3",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 189,
|
||||||
|
"services": [
|
||||||
|
"OpenSim login and UDP when explicitly given credentials"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prim-inspector",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22421512,
|
||||||
|
"sha256": "2ae167c2c66631411889c55ce3c16e80ffdf9a112591470905d1f27eec9ca597",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 188,
|
||||||
|
"services": [
|
||||||
|
"OpenSim login, capabilities, and UDP when explicitly given credentials"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "simple-bot",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22110160,
|
||||||
|
"sha256": "dc9166108675090ed1bfd18bf0605bd0cb6eb36966d2797f59784aaada66b66c",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 189,
|
||||||
|
"services": [
|
||||||
|
"OpenSim login, capabilities, and UDP when explicitly given credentials"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test-client",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 37352456,
|
||||||
|
"sha256": "3bb221c175ec5b0c16095b2cb533b68e24bf27ad53fcafb7e54477c60183ac3b",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libopenjp2.so.7",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 299,
|
||||||
|
"services": [
|
||||||
|
"OpenSim services selected by explicit login and commands"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vivox-test",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 22038904,
|
||||||
|
"sha256": "b3f91293f91c387360aa6becdb066dfef84b14b1a430d02c112a6799970696b0",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 191,
|
||||||
|
"services": [
|
||||||
|
"none in help mode; explicit external Vivox control service in live mode"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "webrtc-test",
|
||||||
|
"format": "ELF",
|
||||||
|
"bytes": 28176504,
|
||||||
|
"sha256": "f0db73115ad2c4cad7e187ae29ececde6f885fd9501398bd461fe2da755e594f",
|
||||||
|
"linked_libraries": [
|
||||||
|
"ld-linux-x86-64.so.2",
|
||||||
|
"libc.so.6",
|
||||||
|
"libgcc_s.so.1",
|
||||||
|
"libm.so.6",
|
||||||
|
"libopus.so.0",
|
||||||
|
"libstdc++.so.6"
|
||||||
|
],
|
||||||
|
"imported_symbols": 201,
|
||||||
|
"services": [
|
||||||
|
"IPv4 loopback in fake mode; explicit OpenSim voice capabilities in live mode"
|
||||||
|
],
|
||||||
|
"smokes": [
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--help"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"--fake",
|
||||||
|
"--timeout-seconds",
|
||||||
|
"10"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"output_created": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"clean_package_build": true,
|
||||||
|
"reference_checkout_required": false,
|
||||||
|
"helper_processes_invoked": [],
|
||||||
|
"forbidden_findings": 0
|
||||||
|
}
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
{"path":"codegen/inputs/attentions.xml","sha256":"bdbc4ca02dd3bde78b86e796f7eb4ada0000e47be9a127e35d2b77f3010a20af","kind":"linden-data","origin":"LibreMetaverse/linden/character/attentions.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/attentions.xml","sha256":"bdbc4ca02dd3bde78b86e796f7eb4ada0000e47be9a127e35d2b77f3010a20af","kind":"linden-data","origin":"LibreMetaverse/linden/character/attentions.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
{"path":"codegen/inputs/attentionsN.xml","sha256":"80055e12a04d05ef5bb16e8c542cd6c218735f8c72f7e48317b8a34282d1ac5b","kind":"linden-data","origin":"LibreMetaverse/linden/character/attentionsN.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/attentionsN.xml","sha256":"80055e12a04d05ef5bb16e8c542cd6c218735f8c72f7e48317b8a34282d1ac5b","kind":"linden-data","origin":"LibreMetaverse/linden/character/attentionsN.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
{"path":"codegen/inputs/avatar_lad.xml","sha256":"6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf","kind":"linden-data","origin":"LibreMetaverse/linden/character/avatar_lad.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/avatar_lad.xml","sha256":"6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf","kind":"linden-data","origin":"LibreMetaverse/linden/character/avatar_lad.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
|
{"path":"crates/libremetaverse/assets/avatar_lad.xml","sha256":"6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf","kind":"linden-data-package-mirror","origin":"codegen/inputs/avatar_lad.xml","license":"CC-BY-SA-3.0","distribution":"source-package-runtime-data"},
|
||||||
{"path":"codegen/inputs/avatar_skeleton.xml","sha256":"addb3cc4cd582ed4343d778e06daf90c6b77b61b4ecb4a20d4bf202c2b93908a","kind":"linden-data","origin":"LibreMetaverse/linden/character/avatar_skeleton.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/avatar_skeleton.xml","sha256":"addb3cc4cd582ed4343d778e06daf90c6b77b61b4ecb4a20d4bf202c2b93908a","kind":"linden-data","origin":"LibreMetaverse/linden/character/avatar_skeleton.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
{"path":"codegen/inputs/genepool.xml","sha256":"6fa1391cd98fddec0d7fe762343ea21e53a655a8ddd4f33af52f8a02aaa3f56d","kind":"linden-data","origin":"LibreMetaverse/linden/character/genepool.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/genepool.xml","sha256":"6fa1391cd98fddec0d7fe762343ea21e53a655a8ddd4f33af52f8a02aaa3f56d","kind":"linden-data","origin":"LibreMetaverse/linden/character/genepool.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
{"path":"codegen/inputs/grass.xml","sha256":"90015f9768afe3cfee761d04239bf9e284b2739b095b7ab8331966fa1fbfcb4e","kind":"linden-data","origin":"LibreMetaverse/linden/grass.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
{"path":"codegen/inputs/grass.xml","sha256":"90015f9768afe3cfee761d04239bf9e284b2739b095b7ab8331966fa1fbfcb4e","kind":"linden-data","origin":"LibreMetaverse/linden/grass.xml","license":"CC-BY-SA-3.0","distribution":"source-and-generated-data"},
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ default = []
|
|||||||
jpeg2000 = ["dep:libremetaverse-openjpeg"]
|
jpeg2000 = ["dep:libremetaverse-openjpeg"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
libremetaverse-openjpeg = { path = "../libremetaverse-openjpeg", optional = true }
|
libremetaverse-openjpeg = { version = "0.0.1", path = "../libremetaverse-openjpeg", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
stats_alloc = "0.1.10"
|
stats_alloc = "0.1.10"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ repository.workspace = true
|
|||||||
description = "Native LSL lexer and parser tooling for the MetaCrate LibreMetaverse rewrite"
|
description = "Native LSL lexer and parser tooling for the MetaCrate LibreMetaverse rewrite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
unicode-general-category = "1.1"
|
unicode-general-category = "1.1"
|
||||||
regex = "1"
|
regex = "1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "libremetaverse-openjpeg"
|
name = "libremetaverse-openjpeg"
|
||||||
version = "0.0.1"
|
version.workspace = true
|
||||||
edition = "2024"
|
edition.workspace = true
|
||||||
rust-version = "1.96"
|
rust-version.workspace = true
|
||||||
license = "BSD-3-Clause"
|
license.workspace = true
|
||||||
publish = false
|
repository.workspace = true
|
||||||
description = "Safe, bounded OpenJPEG 2.5.4 adapter for MetaCrate"
|
description = "Safe, bounded OpenJPEG 2.5.4 adapter for MetaCrate"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ rust-version.workspace = true
|
|||||||
license.workspace = true
|
license.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
description = "Safe system-libopus adapter for MetaCrate"
|
description = "Safe system-libopus adapter for MetaCrate"
|
||||||
publish = false
|
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ repository.workspace = true
|
|||||||
description = "Primitive meshing shims for the MetaCrate LibreMetaverse rewrite"
|
description = "Primitive meshing shims for the MetaCrate LibreMetaverse rewrite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse-imaging = { path = "../libremetaverse-imaging" }
|
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
stats_alloc = "0.1.10"
|
stats_alloc = "0.1.10"
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ description = "Bounded native MeshFoundry renderer for the MetaCrate LibreMetave
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
flate2 = "1.1.2"
|
flate2 = "1.1.2"
|
||||||
libremetaverse = { path = "../libremetaverse" }
|
libremetaverse = { version = "0.0.1", path = "../libremetaverse" }
|
||||||
libremetaverse-imaging = { path = "../libremetaverse-imaging" }
|
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||||
libremetaverse-prim-mesher = { path = "../libremetaverse-prim-mesher" }
|
libremetaverse-prim-mesher = { version = "0.0.1", path = "../libremetaverse-prim-mesher" }
|
||||||
libremetaverse-rendering-simple = { path = "../libremetaverse-rendering-simple" }
|
libremetaverse-rendering-simple = { version = "0.0.1", path = "../libremetaverse-rendering-simple" }
|
||||||
libremetaverse-structured-data = { path = "../libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
stats_alloc = "0.1.10"
|
stats_alloc = "0.1.10"
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ repository.workspace = true
|
|||||||
description = "Simple renderer shims for the MetaCrate LibreMetaverse rewrite"
|
description = "Simple renderer shims for the MetaCrate LibreMetaverse rewrite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse = { path = "../libremetaverse" }
|
libremetaverse = { version = "0.0.1", path = "../libremetaverse" }
|
||||||
libremetaverse-imaging = { path = "../libremetaverse-imaging" }
|
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||||
libremetaverse-prim-mesher = { path = "../libremetaverse-prim-mesher" }
|
libremetaverse-prim-mesher = { version = "0.0.1", path = "../libremetaverse-prim-mesher" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ repository.workspace = true
|
|||||||
description = "Bounded native RLV protocol, state, inventory, lock, camera, and permission layer"
|
description = "Bounded native RLV protocol, state, inventory, lock, camera, and permission layer"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ description = "OSD and LLSD shims for the MetaCrate LibreMetaverse rewrite"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
base64 = "0.22"
|
base64 = "0.22"
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
serde = "1"
|
serde = "1"
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ repository.workspace = true
|
|||||||
description = "Utility shims for the MetaCrate LibreMetaverse rewrite"
|
description = "Utility shims for the MetaCrate LibreMetaverse rewrite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse = { path = "../libremetaverse" }
|
libremetaverse = { version = "0.0.1", path = "../libremetaverse" }
|
||||||
libremetaverse-structured-data = { path = "../libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ repository.workspace = true
|
|||||||
description = "Vivox voice shims for the MetaCrate LibreMetaverse rewrite"
|
description = "Vivox voice shims for the MetaCrate LibreMetaverse rewrite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libremetaverse = { path = "../libremetaverse" }
|
libremetaverse = { version = "0.0.1", path = "../libremetaverse" }
|
||||||
libremetaverse-structured-data = { path = "../libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
roxmltree = "0.21.1"
|
roxmltree = "0.21.1"
|
||||||
tokio = { version = "1.47.1", features = ["io-util", "net", "time"] }
|
tokio = { version = "1.47.1", features = ["io-util", "net", "time"] }
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ description = "WebRTC voice shims for the MetaCrate LibreMetaverse rewrite"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
hound = "3.5"
|
hound = "3.5"
|
||||||
libremetaverse = { path = "../libremetaverse" }
|
libremetaverse = { version = "0.0.1", path = "../libremetaverse" }
|
||||||
libremetaverse-opus = { path = "../libremetaverse-opus" }
|
libremetaverse-opus = { version = "0.0.1", path = "../libremetaverse-opus" }
|
||||||
libremetaverse-structured-data = { path = "../libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
str0m = { version = "0.22", default-features = false, features = ["rust-crypto"] }
|
str0m = { version = "0.22", default-features = false, features = ["rust-crypto"] }
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ bcdec_rs = { version = "0.2.0", optional = true }
|
|||||||
flate2 = "1.1.2"
|
flate2 = "1.1.2"
|
||||||
futures-channel = "0.3.31"
|
futures-channel = "0.3.31"
|
||||||
futures-util = "0.3.31"
|
futures-util = "0.3.31"
|
||||||
libremetaverse-imaging = { path = "../libremetaverse-imaging" }
|
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||||
libremetaverse-structured-data = { path = "../libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||||
libremetaverse-types = { path = "../libremetaverse-types" }
|
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||||
mac_address2 = "2.0.2"
|
mac_address2 = "2.0.2"
|
||||||
os_info = { version = "3.15.0", default-features = false }
|
os_info = { version = "3.15.0", default-features = false }
|
||||||
reqwest = { version = "0.13.4", default-features = false, features = ["rustls", "stream"] }
|
reqwest = { version = "0.13.4", default-features = false, features = ["rustls", "stream"] }
|
||||||
|
|||||||
267
crates/libremetaverse/README.md
Normal file
267
crates/libremetaverse/README.md
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
# Rust API and C# migration guide
|
||||||
|
|
||||||
|
`MetaCrate` is a native Rust implementation of the API and behavior cataloged
|
||||||
|
from `LibreMetaverse`. The compatibility reference is the
|
||||||
|
[pinned C# source](https://github.com/cinderblocks/libremetaverse/tree/2aa70bb68513b39795da5d13c88f31b86e85a3ba);
|
||||||
|
it is never loaded, invoked, or shipped. Exact type/member mappings live in
|
||||||
|
[`RUST-TYPES.tsv`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/api/RUST-TYPES.tsv) and
|
||||||
|
[`RUST-MAPPING.tsv`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/api/RUST-MAPPING.tsv). Search those files by C#
|
||||||
|
documentation ID when a familiar member has a non-obvious Rust name.
|
||||||
|
|
||||||
|
## Choosing crates and features
|
||||||
|
|
||||||
|
Most applications start with `libremetaverse` and add narrower crates only when
|
||||||
|
they use those APIs directly.
|
||||||
|
|
||||||
|
| Crate | Choose it for | Features or system boundary |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `libremetaverse` | Grid client, login, network, agents, inventory, assets, appearance, world, and social APIs | Default pure-Rust BC6H/BC7; optional `jpeg2000` and `vorbis` |
|
||||||
|
| `libremetaverse-types` | UUIDs, vectors, matrices, colors, cancellation, compatibility collections, and boundary types | Pure Rust |
|
||||||
|
| `libremetaverse-structured-data` | LLSD/OSD XML, JSON, binary, and notation | Pure Rust |
|
||||||
|
| `libremetaverse-imaging` | Managed images, TGA/DDS, codec traits | Optional `jpeg2000` |
|
||||||
|
| `libremetaverse-imaging-skia` | Common raster formats through Skia | Optional `skia`; native Skia build/cache |
|
||||||
|
| `libremetaverse-prim-mesher` | Legacy prim and sculpt geometry | Pure Rust |
|
||||||
|
| `libremetaverse-rendering-simple` | Deterministic reference geometry | Pure Rust |
|
||||||
|
| `libremetaverse-rendering-mesh-foundry` | Prim, terrain, sculpt, and mesh-asset rendering | Pure Rust |
|
||||||
|
| `libremetaverse-lsl-tools` | LSL lexing, parsing, diagnostics, and generation | Pure Rust |
|
||||||
|
| `libremetaverse-rlv` | RLV commands, restrictions, locks, camera, and inventory policy | Pure Rust |
|
||||||
|
| `libremetaverse-utilities` | Compatible utility helpers | Pure Rust |
|
||||||
|
| `libremetaverse-voice-vivox` | Vivox XML control protocol | External Vivox service is explicit and never spawned |
|
||||||
|
| `libremetaverse-voice-webrtc` | Native ICE/DTLS/SRTP/SCTP and Opus voice | System libopus; optional `real-audio` uses CPAL |
|
||||||
|
| `libremetaverse-openjpeg` | Audited `OpenJPEG` adapter | System `OpenJPEG` 2.5.4 or newer |
|
||||||
|
| `libremetaverse-opus` | Audited Opus encoder/decoder adapter | System libopus |
|
||||||
|
|
||||||
|
Features are additive. Keep defaults unless you need a codec, and enable one
|
||||||
|
native adapter at a time while diagnosing installation problems. The
|
||||||
|
[release CI matrix](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/docs/release-ci-matrix.md) records every validated combination.
|
||||||
|
|
||||||
|
## Naming and overload migration
|
||||||
|
|
||||||
|
C# `PascalCase` types remain recognizable while methods and properties use
|
||||||
|
Rust `snake_case`. A property getter becomes `name()` and its setter becomes
|
||||||
|
`set_name(value)`. Events become `subscribe_*` methods returning an owned
|
||||||
|
subscription. Rust has no overloads, so the simplest form keeps the base name
|
||||||
|
and additional forms receive parameter-derived suffixes. The mapping ledger is
|
||||||
|
authoritative; do not guess a long suffix.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use libremetaverse::InventoryItem;
|
||||||
|
use libremetaverse_types::UUID;
|
||||||
|
|
||||||
|
let id = UUID::new_with_u_int64(42)?;
|
||||||
|
let mut item = InventoryItem::new_with_uuid(id)?;
|
||||||
|
item.base.set_name("Migrated item".into());
|
||||||
|
assert_eq!(item.base.uuid(), id);
|
||||||
|
assert_eq!(item.base.name(), "Migrated item");
|
||||||
|
# Ok::<(), libremetaverse::Error>(())
|
||||||
|
```
|
||||||
|
|
||||||
|
C# `null` usually maps to `Option<T>`, `ref`/`out` may become a return value or
|
||||||
|
an explicit mutable reference, and interface objects become `dyn Trait` behind
|
||||||
|
`Arc` or `Box` according to the ledger's `ownership` column.
|
||||||
|
|
||||||
|
## Ownership and disposal
|
||||||
|
|
||||||
|
Managers cloned from a `GridClient` share native state. `GridClient` owns its
|
||||||
|
cancellation root and cached services; event guards own registrations; session
|
||||||
|
objects own tasks and sockets. Explicit shutdown is recommended because it can
|
||||||
|
report errors, while `Drop` remains the final idempotent safety net.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use libremetaverse::{ClientLifecycleState, GridClient};
|
||||||
|
|
||||||
|
let client = GridClient::new()?;
|
||||||
|
assert_eq!(client.lifecycle_state(), ClientLifecycleState::Active);
|
||||||
|
client.dispose_with_method()?;
|
||||||
|
client.dispose_with_method()?; // idempotent
|
||||||
|
assert_eq!(client.lifecycle_state(), ClientLifecycleState::Disposed);
|
||||||
|
# Ok::<(), libremetaverse::Error>(())
|
||||||
|
```
|
||||||
|
|
||||||
|
The runnable version is
|
||||||
|
[`offline_client.rs`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/crates/libremetaverse/examples/offline_client.rs).
|
||||||
|
Never hold a manager lock while calling user code or awaiting I/O. Services
|
||||||
|
registered through `GridClient::builder()` must join every owned task before
|
||||||
|
their `shutdown` method returns.
|
||||||
|
|
||||||
|
## Async work and cancellation
|
||||||
|
|
||||||
|
Async APIs borrow no hidden runtime. Call them from the application executor and
|
||||||
|
pass `CancellationToken` explicitly where the C# API accepted one. Cloning a
|
||||||
|
token is cheap and observes the same cancellation source. Cancellation is a
|
||||||
|
typed `Error::Cancelled`, not a successful empty response.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use libremetaverse_types::compat::CancellationTokenSource;
|
||||||
|
|
||||||
|
# #[tokio::main(flavor = "current_thread")]
|
||||||
|
# async fn main() -> Result<(), libremetaverse::Error> {
|
||||||
|
let source = CancellationTokenSource::new();
|
||||||
|
let token = source.token();
|
||||||
|
source.cancel();
|
||||||
|
token.cancelled().await;
|
||||||
|
assert!(matches!(
|
||||||
|
token.throw_if_cancellation_requested(),
|
||||||
|
Err(libremetaverse::Error::Cancelled)
|
||||||
|
));
|
||||||
|
# Ok(())
|
||||||
|
# }
|
||||||
|
```
|
||||||
|
|
||||||
|
The same code is available as
|
||||||
|
[`cancellation.rs`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/crates/libremetaverse/examples/cancellation.rs).
|
||||||
|
Timeouts belong at the caller or documented operation boundary; cancellation
|
||||||
|
must still drain and join the underlying resource owner.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
Fallible compatibility APIs return the shared `libremetaverse::Error`; native
|
||||||
|
composition APIs may expose a narrower error such as `ClientCoreError` or
|
||||||
|
`WebRtcError`. Match variants for control flow and use display text only for
|
||||||
|
operators. Errors and `Debug` output redact credentials, capability URLs, and
|
||||||
|
session secrets.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use libremetaverse::http::DownloadRequest;
|
||||||
|
use libremetaverse_types::compat::Uri;
|
||||||
|
|
||||||
|
let result = DownloadRequest::new(Uri("file:///not-http".into()), None, None);
|
||||||
|
assert!(matches!(result, Err(libremetaverse::Error::Argument)));
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not translate C# exception swallowing into `unwrap_or_default()`. Preserve
|
||||||
|
the mapped error contract and handle cancellation separately from protocol,
|
||||||
|
I/O, authentication, and validation failures.
|
||||||
|
|
||||||
|
## Events and subscriptions
|
||||||
|
|
||||||
|
An `EventHandler<T>` is an `Arc` callback. Keep the returned `Subscription` for
|
||||||
|
exactly as long as notifications are wanted; dropping it unregisters the
|
||||||
|
callback. Dispatch clones the handler list and releases internal locks before
|
||||||
|
calling user code. Manager event dispatch isolates subscriber panics so one
|
||||||
|
consumer cannot stop later consumers.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use libremetaverse::{GridClient, Inventory, InventoryFolder};
|
||||||
|
use libremetaverse_types::UUID;
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
|
|
||||||
|
let client = Arc::new(GridClient::new()?);
|
||||||
|
let inventory = Inventory::new_with_grid_client_uuid(Arc::clone(&client), UUID::zero())?;
|
||||||
|
let calls = Arc::new(AtomicUsize::new(0));
|
||||||
|
let observed = Arc::clone(&calls);
|
||||||
|
let subscription = inventory.subscribe_inventory_object_added(Arc::new(move |_| {
|
||||||
|
observed.fetch_add(1, Ordering::AcqRel);
|
||||||
|
}));
|
||||||
|
let folder = InventoryFolder::new(UUID::new_with_u_int64(7)?)?;
|
||||||
|
inventory.update_node_for(&folder)?;
|
||||||
|
assert_eq!(calls.load(Ordering::Acquire), 1);
|
||||||
|
drop(subscription);
|
||||||
|
client.dispose_with_method()?;
|
||||||
|
# Ok::<(), libremetaverse::Error>(())
|
||||||
|
```
|
||||||
|
|
||||||
|
## Threading and callbacks
|
||||||
|
|
||||||
|
Public shared managers use `Arc`, atomics, mutexes, channels, and cancellation
|
||||||
|
tokens rather than a CLR synchronization context. A type being cloneable does
|
||||||
|
not make a callback re-entrant: keep handlers short, move expensive work to a
|
||||||
|
bounded queue, and never block an async runtime thread waiting for itself.
|
||||||
|
Download, inventory, client, and voice diagnostics expose owned task/queue
|
||||||
|
counts for shutdown checks. The [concurrency audit](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/docs/concurrency-hardening.md)
|
||||||
|
defines the exact baseline and soak thresholds.
|
||||||
|
|
||||||
|
## Security boundaries
|
||||||
|
|
||||||
|
The released graph contains no CLR host, .NET assembly loader, subprocess RPC,
|
||||||
|
or foreign `LibreMetaverse` bridge. HTTP uses rustls. Untrusted LLSD, archive,
|
||||||
|
image, packet, event, and signaling inputs have explicit size/depth limits.
|
||||||
|
Secrets belong in operation arguments or environment variables, never in
|
||||||
|
diagnostics, evidence, filenames, command lines, or committed fixtures.
|
||||||
|
|
||||||
|
Offline/fake modes are real deterministic executions, not skipped live tests.
|
||||||
|
Live login and every mutating smoke action require their own opt-in and literal
|
||||||
|
confirmation. See the [live-grid boundary](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/docs/live-grid-smoke.md).
|
||||||
|
|
||||||
|
## Native prerequisites
|
||||||
|
|
||||||
|
The default client build needs no image-codec system library. Optional native
|
||||||
|
features require:
|
||||||
|
|
||||||
|
- `OpenJPEG` 2.5.4 or newer for `jpeg2000`;
|
||||||
|
- the rust-skia prerequisites/cache for `skia`;
|
||||||
|
- system libopus for WebRTC voice and the `libremetaverse-opus` adapter;
|
||||||
|
- ALSA development headers on Linux, `CoreAudio` on macOS, or WASAPI on Windows
|
||||||
|
when `real-audio` enables CPAL;
|
||||||
|
- the Vorbis encoder build prerequisites for `vorbis`.
|
||||||
|
|
||||||
|
Discovery uses `pkg-config` on Unix/macOS and `vcpkg` on Windows MSVC where
|
||||||
|
applicable. The adapters remain cross-platform; Gitea workflows intentionally
|
||||||
|
run only on `ubuntu-latest`.
|
||||||
|
|
||||||
|
## Live `OpenSim` setup
|
||||||
|
|
||||||
|
Use a dedicated `OpenSim` account and put credentials in the workspace `.env` or
|
||||||
|
the process environment. The login URL is used directly; no Second Life host is
|
||||||
|
substituted.
|
||||||
|
|
||||||
|
```text
|
||||||
|
GRID_USER=First Last
|
||||||
|
GRID_PASSWORD=...
|
||||||
|
GRID_LOGIN_URL=https://your-opensim.example/login
|
||||||
|
```
|
||||||
|
|
||||||
|
Start with the credential-safe audit and fake smoke, then opt into live login:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo run -p libremetaverse-programs --bin live-grid-smoke -- --audit-only
|
||||||
|
cargo run -p libremetaverse-programs --bin live-grid-smoke -- --fake
|
||||||
|
cargo run -p libremetaverse-programs --bin live-grid-smoke -- \
|
||||||
|
--allow-live-login --confirm-live-login LOGIN
|
||||||
|
```
|
||||||
|
|
||||||
|
Chat, movement, and reversible inventory each require additional confirmations
|
||||||
|
documented in the [`OpenSim` live-grid guide](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/docs/live-grid-smoke.md). A test that
|
||||||
|
needs live credentials must fail clearly when they are absent; it must not
|
||||||
|
silently skip.
|
||||||
|
|
||||||
|
## Programs and operational tools
|
||||||
|
|
||||||
|
All pinned upstream programs have native Rust targets and deterministic offline
|
||||||
|
tests. Their arguments, exit statuses, fake/live boundaries, and focused test
|
||||||
|
commands are linked from the [program operations manual](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md):
|
||||||
|
|
||||||
|
- [`osd-inspector`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#osdinspector)
|
||||||
|
- [`simple-bot`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#simplebot)
|
||||||
|
- [`packet-dump`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#packetdump)
|
||||||
|
- [`prim-inspector`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#priminspector)
|
||||||
|
- [`inventory-explorer`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#inventoryexplorer)
|
||||||
|
- [`irc-gateway`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#ircgateway)
|
||||||
|
- [`test-client`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#testclient)
|
||||||
|
- [`vivox-test`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#vivoxtest)
|
||||||
|
- [`webrtc-test`](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/programs/README.md#webrtctest)
|
||||||
|
|
||||||
|
For services, run the client under an external supervisor, propagate shutdown
|
||||||
|
cancellation, bound queues/files, collect sanitized evidence, and call logout
|
||||||
|
before disposal. The tool never invents persistence or retry policy on behalf of
|
||||||
|
the application.
|
||||||
|
|
||||||
|
## Documentation validation
|
||||||
|
|
||||||
|
The complete documentation gate is:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo run --locked -p metacrate-ci-matrix -- documentation-audit \
|
||||||
|
--evidence /tmp/metacrate-documentation.json
|
||||||
|
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --locked -j 1
|
||||||
|
cargo test --locked -p libremetaverse --doc -j 1
|
||||||
|
cargo test --locked -p libremetaverse --examples -j 1
|
||||||
|
cargo run --locked -p libremetaverse --example offline_client
|
||||||
|
cargo run --locked -p libremetaverse --example cancellation
|
||||||
|
```
|
||||||
|
|
||||||
|
The generated [coverage report](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/api/DOCUMENTATION-COVERAGE.md) proves that
|
||||||
|
every mapped member/type retains its exact C# concept ID and mapping context,
|
||||||
|
all public crates have root docs, all local Markdown links resolve, all programs
|
||||||
|
are linked, and every Rust fence in this guide is compiled as a doctest.
|
||||||
17504
crates/libremetaverse/assets/avatar_lad.xml
Normal file
17504
crates/libremetaverse/assets/avatar_lad.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -113,7 +113,7 @@ impl LindenAvatarDefinition {
|
|||||||
owned_xml = read_bounded(&file_name)?;
|
owned_xml = read_bounded(&file_name)?;
|
||||||
owned_xml.as_str()
|
owned_xml.as_str()
|
||||||
} else {
|
} else {
|
||||||
include_str!("../../../codegen/inputs/avatar_lad.xml")
|
include_str!("../assets/avatar_lad.xml")
|
||||||
};
|
};
|
||||||
let document = Document::parse(xml).map_err(|_| Error::Argument)?;
|
let document = Document::parse(xml).map_err(|_| Error::Argument)?;
|
||||||
let mut attachment_points = Vec::new();
|
let mut attachment_points = Vec::new();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
//! world, and social APIs. The appended guide covers crate selection, C# name
|
//! world, and social APIs. The appended guide covers crate selection, C# name
|
||||||
//! migration, ownership, cancellation, events, security, and `OpenSim` setup.
|
//! migration, ownership, cancellation, events, security, and `OpenSim` setup.
|
||||||
|
|
||||||
#![doc = include_str!("../../../docs/rust-api-guide.md")]
|
#![doc = include_str!("../README.md")]
|
||||||
|
|
||||||
extern crate self as libremetaverse;
|
extern crate self as libremetaverse;
|
||||||
|
|
||||||
|
|||||||
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.
|
||||||
@@ -4,16 +4,18 @@ version.workspace = true
|
|||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
repository.workspace = true
|
||||||
|
description = "Native diagnostic and example programs for the MetaCrate LibreMetaverse rewrite"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.5", features = ["derive"] }
|
clap = { version = "4.5", features = ["derive"] }
|
||||||
libremetaverse = { path = "../crates/libremetaverse", default-features = false }
|
libremetaverse = { version = "0.0.1", path = "../crates/libremetaverse", default-features = false }
|
||||||
libremetaverse-imaging = { path = "../crates/libremetaverse-imaging", features = ["jpeg2000"] }
|
libremetaverse-imaging = { version = "0.0.1", path = "../crates/libremetaverse-imaging", features = ["jpeg2000"] }
|
||||||
libremetaverse-imaging-skia = { path = "../crates/libremetaverse-imaging-skia", features = ["skia"] }
|
libremetaverse-imaging-skia = { version = "0.0.1", path = "../crates/libremetaverse-imaging-skia", features = ["skia"] }
|
||||||
libremetaverse-structured-data = { path = "../crates/libremetaverse-structured-data" }
|
libremetaverse-structured-data = { version = "0.0.1", path = "../crates/libremetaverse-structured-data" }
|
||||||
libremetaverse-voice-vivox = { path = "../crates/libremetaverse-voice-vivox" }
|
libremetaverse-voice-vivox = { version = "0.0.1", path = "../crates/libremetaverse-voice-vivox" }
|
||||||
libremetaverse-voice-webrtc = { path = "../crates/libremetaverse-voice-webrtc" }
|
libremetaverse-voice-webrtc = { version = "0.0.1", path = "../crates/libremetaverse-voice-webrtc" }
|
||||||
regex = "1.12"
|
regex = "1.12"
|
||||||
roxmltree = "0.21.1"
|
roxmltree = "0.21.1"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
|||||||
@@ -1,46 +1,12 @@
|
|||||||
use std::process::Command;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("cargo:rerun-if-env-changed=METACRATE_RUST_COMMIT");
|
println!("cargo:rerun-if-env-changed=METACRATE_RUST_COMMIT");
|
||||||
println!("cargo:rerun-if-changed=../.git/HEAD");
|
|
||||||
println!("cargo:rerun-if-changed=../.git/packed-refs");
|
|
||||||
if let Some(reference) = git_reference() {
|
|
||||||
println!("cargo:rerun-if-changed=../.git/{reference}");
|
|
||||||
}
|
|
||||||
|
|
||||||
let commit = std::env::var("METACRATE_RUST_COMMIT")
|
let commit = std::env::var("METACRATE_RUST_COMMIT")
|
||||||
.ok()
|
.ok()
|
||||||
.filter(|value| valid_commit(value))
|
.filter(|value| valid_commit(value))
|
||||||
.or_else(git_commit)
|
|
||||||
.unwrap_or_else(|| "unavailable".to_owned());
|
.unwrap_or_else(|| "unavailable".to_owned());
|
||||||
println!("cargo:rustc-env=METACRATE_RUST_COMMIT={commit}");
|
println!("cargo:rustc-env=METACRATE_RUST_COMMIT={commit}");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn git_reference() -> Option<String> {
|
|
||||||
let output = Command::new("git")
|
|
||||||
.args(["symbolic-ref", "--quiet", "HEAD"])
|
|
||||||
.output()
|
|
||||||
.ok()?;
|
|
||||||
let reference = String::from_utf8(output.stdout).ok()?;
|
|
||||||
let reference = reference.trim();
|
|
||||||
(output.status.success()
|
|
||||||
&& reference.starts_with("refs/")
|
|
||||||
&& reference
|
|
||||||
.bytes()
|
|
||||||
.all(|byte| byte.is_ascii_alphanumeric() || b"/-_.".contains(&byte)))
|
|
||||||
.then(|| reference.to_owned())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn git_commit() -> Option<String> {
|
|
||||||
let output = Command::new("git")
|
|
||||||
.args(["rev-parse", "--verify", "HEAD"])
|
|
||||||
.output()
|
|
||||||
.ok()?;
|
|
||||||
let commit = String::from_utf8(output.stdout).ok()?;
|
|
||||||
let commit = commit.trim();
|
|
||||||
(output.status.success() && valid_commit(commit)).then(|| commit.to_owned())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn valid_commit(value: &str) -> bool {
|
fn valid_commit(value: &str) -> bool {
|
||||||
matches!(value.len(), 40 | 64) && value.bytes().all(|byte| byte.is_ascii_hexdigit())
|
matches!(value.len(), 40 | 64) && value.bytes().all(|byte| byte.is_ascii_hexdigit())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schema": 1,
|
"schema": 1,
|
||||||
"cargo_lock_sha256": "ff5b851139156d43915f08494c5723638d3b48abb9d7ab5de6eea9e9f5b5554b",
|
"cargo_lock_sha256": "b0f9593fd3cae923e08d9a75fb16772e749a0dfddafaadb7f2a610bc597284ac",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adler2",
|
"name": "adler2",
|
||||||
@@ -1806,6 +1806,19 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "goblin",
|
||||||
|
"version": "0.10.5",
|
||||||
|
"checksum": "983a6aafb3b12d4c41ea78d39e189af4298ce747353945ff5105b54a056e5cd9",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "https://github.com/m4b/goblin",
|
||||||
|
"notice_files": [
|
||||||
|
{
|
||||||
|
"path": "LICENSE",
|
||||||
|
"sha256": "655e3ee7a4c27430774962e62a6d37d7348e5f2f292010ad674ce1bebefd24bc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "group",
|
"name": "group",
|
||||||
"version": "0.13.0",
|
"version": "0.13.0",
|
||||||
@@ -3376,6 +3389,23 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "plain",
|
||||||
|
"version": "0.2.3",
|
||||||
|
"checksum": "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6",
|
||||||
|
"license": "MIT/Apache-2.0",
|
||||||
|
"repository": "https://github.com/randomites/plain",
|
||||||
|
"notice_files": [
|
||||||
|
{
|
||||||
|
"path": "LICENSE-APACHE",
|
||||||
|
"sha256": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "LICENSE-MIT",
|
||||||
|
"sha256": "bc12b75fd81829814d843a03fa52aad0e53355b1f13665e309ff7fa33c66e5b5"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "poly1305",
|
"name": "poly1305",
|
||||||
"version": "0.8.0",
|
"version": "0.8.0",
|
||||||
@@ -4151,6 +4181,32 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "scroll",
|
||||||
|
"version": "0.13.0",
|
||||||
|
"checksum": "c1257cd4248b4132760d6524d6dda4e053bc648c9070b960929bf50cfb1e7add",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "https://github.com/m4b/scroll",
|
||||||
|
"notice_files": [
|
||||||
|
{
|
||||||
|
"path": "LICENSE",
|
||||||
|
"sha256": "6e24b7455f0b9afefdf4f3efd59a56ce76a3020c2dc4371937e281fc5e587fd7"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "scroll_derive",
|
||||||
|
"version": "0.13.1",
|
||||||
|
"checksum": "ed76efe62313ab6610570951494bdaa81568026e0318eaa55f167de70eeea67d",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "https://github.com/m4b/scroll",
|
||||||
|
"notice_files": [
|
||||||
|
{
|
||||||
|
"path": "LICENSE",
|
||||||
|
"sha256": "b35d026cc7aca9d5859a02eb87ddf7a386a24c986838651bd1f283f94e003327"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "sctp-proto",
|
"name": "sctp-proto",
|
||||||
"version": "0.10.3",
|
"version": "0.10.3",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"schema": 1,
|
"schema": 1,
|
||||||
"cargo_lock_sha256": "ff5b851139156d43915f08494c5723638d3b48abb9d7ab5de6eea9e9f5b5554b",
|
"cargo_lock_sha256": "b0f9593fd3cae923e08d9a75fb16772e749a0dfddafaadb7f2a610bc597284ac",
|
||||||
"provenance_policy_sha256": "045859dcf317efc19e6e47fc73dfc15726f7a787556a3960c4732aa5f3afde7c",
|
"provenance_policy_sha256": "f95475a2284ab282e9432865d4a7ed103498a56ed5ec2393017bc312c77da890",
|
||||||
"upstream_repository": "https://github.com/cinderblocks/libremetaverse",
|
"upstream_repository": "https://github.com/cinderblocks/libremetaverse",
|
||||||
"upstream_commit": "2aa70bb68513b39795da5d13c88f31b86e85a3ba",
|
"upstream_commit": "2aa70bb68513b39795da5d13c88f31b86e85a3ba",
|
||||||
"source_files": [
|
"source_files": [
|
||||||
@@ -10,11 +10,21 @@
|
|||||||
"bytes": 164,
|
"bytes": 164,
|
||||||
"sha256": "0dd74dc81b612f3522abf818c4a31db298498f83cd198cc50982a27d19721d40"
|
"sha256": "0dd74dc81b612f3522abf818c4a31db298498f83cd198cc50982a27d19721d40"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": ".gitattributes",
|
||||||
|
"bytes": 56,
|
||||||
|
"sha256": "a7c5358f9d0b0ed236519fec9d5d4faee9c04127eedac9ba3ab536d3dcf1b1f2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": ".gitea/workflows/api-surface.yml",
|
"path": ".gitea/workflows/api-surface.yml",
|
||||||
"bytes": 2661,
|
"bytes": 2661,
|
||||||
"sha256": "d9e1890ad948d11d45b5d70fa30c30071dfa9e4c72989b9caa1afa58a55793ce"
|
"sha256": "d9e1890ad948d11d45b5d70fa30c30071dfa9e4c72989b9caa1afa58a55793ce"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": ".gitea/workflows/artifact-audit.yml",
|
||||||
|
"bytes": 3460,
|
||||||
|
"sha256": "af35254faef2be9b678820e14a73fddaff323c66821cd8415d319351ec3e2130"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": ".gitea/workflows/codegen.yml",
|
"path": ".gitea/workflows/codegen.yml",
|
||||||
"bytes": 7978,
|
"bytes": 7978,
|
||||||
@@ -77,13 +87,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "Cargo.lock",
|
"path": "Cargo.lock",
|
||||||
"bytes": 99427,
|
"bytes": 100372,
|
||||||
"sha256": "ff5b851139156d43915f08494c5723638d3b48abb9d7ab5de6eea9e9f5b5554b"
|
"sha256": "b0f9593fd3cae923e08d9a75fb16772e749a0dfddafaadb7f2a610bc597284ac"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "Cargo.toml",
|
"path": "Cargo.toml",
|
||||||
"bytes": 1480,
|
"bytes": 1766,
|
||||||
"sha256": "fa9a7e393968e0080672245dc7dc05b046c51307cdf734cc176f183e1d2e7404"
|
"sha256": "b1f014e37d153c46b56f971e99963a8a9a51cd9e30816331068f9d08bce02449"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "LICENSE.md",
|
"path": "LICENSE.md",
|
||||||
@@ -97,13 +107,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "README.md",
|
"path": "README.md",
|
||||||
"bytes": 34694,
|
"bytes": 34926,
|
||||||
"sha256": "34deadf940ab9e9f849e58d56f512504e0c816fd5df1c848ac15c2b8f1f638ce"
|
"sha256": "dd0508a28b65ea53961bf9df7a1ddc2b7906a96545962c523dc0fa204dad805f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "RUSTREWRITE.md",
|
"path": "RUSTREWRITE.md",
|
||||||
"bytes": 53386,
|
"bytes": 54108,
|
||||||
"sha256": "23981fd78a1664d86393a9e0bdbf3833025917294fa622f40c9b3e0cc28d2063"
|
"sha256": "6da24d9e0c2ca89122b4daa494376097acd90820efa5668654f4742bf484f965"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "api/API-COVERAGE.md",
|
"path": "api/API-COVERAGE.md",
|
||||||
@@ -113,7 +123,7 @@
|
|||||||
{
|
{
|
||||||
"path": "api/DOCUMENTATION-COVERAGE.md",
|
"path": "api/DOCUMENTATION-COVERAGE.md",
|
||||||
"bytes": 911,
|
"bytes": 911,
|
||||||
"sha256": "a0552d4869c03f221f105070f8639a4c4963a1c6c46ac073cff82782d2a8ebb0"
|
"sha256": "0d05fc115a7754074ba9c084654556ac32ce07b006236d21d406223cc5074de9"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "api/MAPPING-COVERAGE.md",
|
"path": "api/MAPPING-COVERAGE.md",
|
||||||
@@ -235,6 +245,11 @@
|
|||||||
"bytes": 37699,
|
"bytes": 37699,
|
||||||
"sha256": "9ffc240ca35d397ee848a6b313efcfefcf186ea01f61911aa3329cb2dcefd202"
|
"sha256": "9ffc240ca35d397ee848a6b313efcfefcf186ea01f61911aa3329cb2dcefd202"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "ci/artifact-policy.json",
|
||||||
|
"bytes": 3011,
|
||||||
|
"sha256": "718c065c78377c846ccd962922e06b19de276c32f427f73a026060eec9b7a45c"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/concurrency-thresholds.json",
|
"path": "ci/concurrency-thresholds.json",
|
||||||
"bytes": 169,
|
"bytes": 169,
|
||||||
@@ -242,14 +257,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/dependency-policy.json",
|
"path": "ci/dependency-policy.json",
|
||||||
"bytes": 10365,
|
"bytes": 10628,
|
||||||
"sha256": "4f545b31c6ea2d97eadc5a60423d13839cc9a71447a603806a8690de4c56f226"
|
"sha256": "2807ccae43c9f0cf011978e5d63217aa3ac827406b52db2b04945ce4064f988e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/evidence/api-audit.json",
|
"path": "ci/evidence/api-audit.json",
|
||||||
"bytes": 540,
|
"bytes": 540,
|
||||||
"sha256": "4e68a873ade8dc0b389c27ba8d377079abd441bd8fa34605e799e36899f8b77a"
|
"sha256": "4e68a873ade8dc0b389c27ba8d377079abd441bd8fa34605e799e36899f8b77a"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "ci/evidence/artifact-audit.json",
|
||||||
|
"bytes": 11830,
|
||||||
|
"sha256": "9c9c6ed236d04880bab504387251f7a9e283f338c48fe46a6fe0ece472eb8063"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/evidence/concurrency-audit.json",
|
"path": "ci/evidence/concurrency-audit.json",
|
||||||
"bytes": 1596,
|
"bytes": 1596,
|
||||||
@@ -262,8 +282,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/provenance-policy.json",
|
"path": "ci/provenance-policy.json",
|
||||||
"bytes": 11311,
|
"bytes": 11594,
|
||||||
"sha256": "045859dcf317efc19e6e47fc73dfc15726f7a787556a3960c4732aa5f3afde7c"
|
"sha256": "f95475a2284ab282e9432865d4a7ed103498a56ed5ec2393017bc312c77da890"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ci/release-matrix.json",
|
"path": "ci/release-matrix.json",
|
||||||
@@ -362,8 +382,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-imaging/Cargo.toml",
|
"path": "crates/libremetaverse-imaging/Cargo.toml",
|
||||||
"bytes": 606,
|
"bytes": 644,
|
||||||
"sha256": "022966d69dc37d0b230ba6c4f909c7eb0e659c37d8a2f0ffd90eadd011d924d5"
|
"sha256": "b28b70a09f4916624dfb1d54869a4084996615304b7e04449d331ccd067ff20b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-imaging/benches/image_pipeline.rs",
|
"path": "crates/libremetaverse-imaging/benches/image_pipeline.rs",
|
||||||
@@ -397,8 +417,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-lsl-tools/Cargo.toml",
|
"path": "crates/libremetaverse-lsl-tools/Cargo.toml",
|
||||||
"bytes": 417,
|
"bytes": 436,
|
||||||
"sha256": "068fbbc78e5d447713c05316ef933e069e9a398ed5432ef325936d6ab4448031"
|
"sha256": "aa30ad4c2c1f6c1119255c9e34d85b62019945127059682e6e1ff88a9268fbd3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-lsl-tools/README.md",
|
"path": "crates/libremetaverse-lsl-tools/README.md",
|
||||||
@@ -452,8 +472,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-openjpeg/Cargo.toml",
|
"path": "crates/libremetaverse-openjpeg/Cargo.toml",
|
||||||
"bytes": 774,
|
"bytes": 809,
|
||||||
"sha256": "5a51bb7dfc922a68a0f2e164d5f00139c8cfea6327cda62a1810ae7e3efaa0ff"
|
"sha256": "34c688a067c3718ede2686014feaa7910de33c3977c720fdae4bdfba089e7b54"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-openjpeg/README.md",
|
"path": "crates/libremetaverse-openjpeg/README.md",
|
||||||
@@ -477,8 +497,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-opus/Cargo.toml",
|
"path": "crates/libremetaverse-opus/Cargo.toml",
|
||||||
"bytes": 805,
|
"bytes": 789,
|
||||||
"sha256": "c0cbeb64ae8938f47ccbadef799789c201e79ca6d5bd97020fba0119c83a350c"
|
"sha256": "5a055b7d3f3b90bdcd5db3406683f393a730f3c701bbc441b94768a7e252938c"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-opus/build.rs",
|
"path": "crates/libremetaverse-opus/build.rs",
|
||||||
@@ -492,8 +512,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-prim-mesher/Cargo.toml",
|
"path": "crates/libremetaverse-prim-mesher/Cargo.toml",
|
||||||
"bytes": 513,
|
"bytes": 551,
|
||||||
"sha256": "d7ff49658b6914febeb1fe26e5208fdeeb5e2f99bc93470ae81e0e9deaf50952"
|
"sha256": "b4d44c464d3927c6b16b8bd917d19e0580173376f3a7f1be65a7e9dd6b98a00e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-prim-mesher/benches/meshing.rs",
|
"path": "crates/libremetaverse-prim-mesher/benches/meshing.rs",
|
||||||
@@ -537,8 +557,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rendering-mesh-foundry/Cargo.toml",
|
"path": "crates/libremetaverse-rendering-mesh-foundry/Cargo.toml",
|
||||||
"bytes": 839,
|
"bytes": 953,
|
||||||
"sha256": "e1f729b55a3e1a05b4637cfb92c9e4842d4a4aa4b08f4f1d4dff0a03c0db0ec0"
|
"sha256": "3b9f3cedf6f16b2c85068db821e1d65a790a2b157058536d0634edb0affc98a7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rendering-mesh-foundry/README.md",
|
"path": "crates/libremetaverse-rendering-mesh-foundry/README.md",
|
||||||
@@ -572,8 +592,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rendering-simple/Cargo.toml",
|
"path": "crates/libremetaverse-rendering-simple/Cargo.toml",
|
||||||
"bytes": 549,
|
"bytes": 625,
|
||||||
"sha256": "d95b49485b7636cdcf845a0bbab0c0eec0de92412ef1ce44bf7902c24610b0a0"
|
"sha256": "f3ced1ce8f17688a3315378ba3bcfc52683bbae71c6a346427d5246eb3223c58"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rendering-simple/README.md",
|
"path": "crates/libremetaverse-rendering-simple/README.md",
|
||||||
@@ -602,8 +622,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rlv/Cargo.toml",
|
"path": "crates/libremetaverse-rlv/Cargo.toml",
|
||||||
"bytes": 371,
|
"bytes": 390,
|
||||||
"sha256": "52d33afce3bb0b9d76e4a3724670da6fd019c33b8d920bea3db807a4dcc17f9c"
|
"sha256": "d0b65cc3e05a38d7e1f41d3863ecbb05820b5a118b9be3cca7370757080965af"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-rlv/README.md",
|
"path": "crates/libremetaverse-rlv/README.md",
|
||||||
@@ -647,8 +667,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-structured-data/Cargo.toml",
|
"path": "crates/libremetaverse-structured-data/Cargo.toml",
|
||||||
"bytes": 406,
|
"bytes": 425,
|
||||||
"sha256": "997000fc995703889f7e56034ed0bafdb0041a60e1d984308167b8a1a688ce84"
|
"sha256": "d86210a9d4a424c0feec5d1c3aed66892ed107364e4e47c751c5d1a4dd60f5f3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-structured-data/src/binary.rs",
|
"path": "crates/libremetaverse-structured-data/src/binary.rs",
|
||||||
@@ -782,8 +802,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-utilities/Cargo.toml",
|
"path": "crates/libremetaverse-utilities/Cargo.toml",
|
||||||
"bytes": 478,
|
"bytes": 535,
|
||||||
"sha256": "c9ab8ad171508aba0cb094afb92aeb53acd19e6e0010e844bec73bdbad094009"
|
"sha256": "44c88ae2dd2cfb8f1390f9fd671c92d96b7e9c792535bafde34d0f2c161c1c16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-utilities/src/generated.rs",
|
"path": "crates/libremetaverse-utilities/src/generated.rs",
|
||||||
@@ -797,8 +817,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-voice-vivox/Cargo.toml",
|
"path": "crates/libremetaverse-voice-vivox/Cargo.toml",
|
||||||
"bytes": 575,
|
"bytes": 632,
|
||||||
"sha256": "c11ff56052be98f09dfc9857678f35e90712769aa48d428a99d50a7feab13ed3"
|
"sha256": "b00fe50a1e970bed33f6d15bac32fcac8ed8594555fce83db69c3aa3a45316ba"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-voice-vivox/src/generated.rs",
|
"path": "crates/libremetaverse-voice-vivox/src/generated.rs",
|
||||||
@@ -817,8 +837,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-voice-webrtc/Cargo.toml",
|
"path": "crates/libremetaverse-voice-webrtc/Cargo.toml",
|
||||||
"bytes": 895,
|
"bytes": 971,
|
||||||
"sha256": "51cadef6bc1232cd9df0e5eddfcb33f688ea638b187de9b6055501408b06d57e"
|
"sha256": "ac1a5ed7deb2e33ff29a29eeb12d42227a75ee3766b7242e07e9881f92726b1d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse-voice-webrtc/src/generated.rs",
|
"path": "crates/libremetaverse-voice-webrtc/src/generated.rs",
|
||||||
@@ -837,8 +857,18 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/Cargo.toml",
|
"path": "crates/libremetaverse/Cargo.toml",
|
||||||
"bytes": 1255,
|
"bytes": 1312,
|
||||||
"sha256": "478405c87bfc7f832d933aba6bd0b2e5a7c49ca3098152f55b25cc230a92f68a"
|
"sha256": "b411a01e523302cce48da0f79d4d37cf499c59ea378f048607b6720a051ea855"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "crates/libremetaverse/README.md",
|
||||||
|
"bytes": 12959,
|
||||||
|
"sha256": "22dc9242d755d6b81214081dc534c02bf84380c16d5f873729033dd04ec1d16c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "crates/libremetaverse/assets/avatar_lad.xml",
|
||||||
|
"bytes": 354436,
|
||||||
|
"sha256": "6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/examples/cancellation.rs",
|
"path": "crates/libremetaverse/examples/cancellation.rs",
|
||||||
@@ -947,8 +977,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/src/avatar_rig.rs",
|
"path": "crates/libremetaverse/src/avatar_rig.rs",
|
||||||
"bytes": 25122,
|
"bytes": 25108,
|
||||||
"sha256": "9de946d7971afd8fb0a821ce5ea369622390bb81b37677e17038f1737e9328c1"
|
"sha256": "a259cd61f183198131c1b5926da59d53d4e203cc263cd4d0ad780d0d93906a87"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/src/baking_texture_provider.rs",
|
"path": "crates/libremetaverse/src/baking_texture_provider.rs",
|
||||||
@@ -1087,8 +1117,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/src/lib.rs",
|
"path": "crates/libremetaverse/src/lib.rs",
|
||||||
"bytes": 10818,
|
"bytes": 10799,
|
||||||
"sha256": "a493e177551119790b8a39f434f9a0f3615330d4c4ca2051d860ebb1a64cb3fb"
|
"sha256": "7c533ad9b3a2d43fabf168b147d575997f22ad8684f51fd1010dd3cac6e96341"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "crates/libremetaverse/src/login.rs",
|
"path": "crates/libremetaverse/src/login.rs",
|
||||||
@@ -1340,6 +1370,11 @@
|
|||||||
"bytes": 8816,
|
"bytes": 8816,
|
||||||
"sha256": "6c79601aaef84b87d3378f90ec3772de0e5d274d834bf8f193a3a9c028ee18ce"
|
"sha256": "6c79601aaef84b87d3378f90ec3772de0e5d274d834bf8f193a3a9c028ee18ce"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "docs/release-artifacts.md",
|
||||||
|
"bytes": 4663,
|
||||||
|
"sha256": "4f8571ce3520d5aaf0ded8722330ab4892ba40b1092048c8f955fe623726f688"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "docs/release-ci-matrix.md",
|
"path": "docs/release-ci-matrix.md",
|
||||||
"bytes": 4072,
|
"bytes": 4072,
|
||||||
@@ -1472,8 +1507,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "programs/Cargo.toml",
|
"path": "programs/Cargo.toml",
|
||||||
"bytes": 1738,
|
"bytes": 1976,
|
||||||
"sha256": "8e42579a829d88caa8b2dad7035f27d9de6c038d9692bd71122b23d242c07108"
|
"sha256": "1ebd9e4ee446945b6e7c6430f430eb52e29fd3a319b43caf49f45301adf6ea2d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "programs/README.md",
|
"path": "programs/README.md",
|
||||||
@@ -1482,8 +1517,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "programs/build.rs",
|
"path": "programs/build.rs",
|
||||||
"bytes": 1553,
|
"bytes": 444,
|
||||||
"sha256": "b7f8d736c499b144f99e80c469db8b5713b4af79f16fa85c40d1b66395fb41d0"
|
"sha256": "415f9f66d3ff3cf32fa7e8f8ad0557571d3b0e080ad6e0a028f0200670a00f08"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "programs/src/bin/inventory_explorer.rs",
|
"path": "programs/src/bin/inventory_explorer.rs",
|
||||||
@@ -2232,14 +2267,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/Cargo.toml",
|
"path": "tools/ci-matrix/Cargo.toml",
|
||||||
"bytes": 375,
|
"bytes": 425,
|
||||||
"sha256": "6d43e2721c77920cc6f4896ddaebf74302ed1751bdf2aa9b3dcd42dd9f82c652"
|
"sha256": "a7dcbf021795dc977dc4e34a105b0360c527f8974440cdaa2a81923e3ceb5a9c"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/api_surface.rs",
|
"path": "tools/ci-matrix/src/api_surface.rs",
|
||||||
"bytes": 48381,
|
"bytes": 48381,
|
||||||
"sha256": "ec7ad0bcca094413eccdf5c76c62bf0ce63678bcedf355aad0c9b8a73156877b"
|
"sha256": "ec7ad0bcca094413eccdf5c76c62bf0ce63678bcedf355aad0c9b8a73156877b"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "tools/ci-matrix/src/artifact.rs",
|
||||||
|
"bytes": 36939,
|
||||||
|
"sha256": "f1b56f753d77ea40e72d8a4288174fdbc5974285c13d07f04ea52b34dbdd7506"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/dependency.rs",
|
"path": "tools/ci-matrix/src/dependency.rs",
|
||||||
"bytes": 12796,
|
"bytes": 12796,
|
||||||
@@ -2247,23 +2287,23 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/documentation.rs",
|
"path": "tools/ci-matrix/src/documentation.rs",
|
||||||
"bytes": 21418,
|
"bytes": 22793,
|
||||||
"sha256": "046a7dae35ceba47fdc2cf04a7e3002896899bc654c046b53d32d84923557930"
|
"sha256": "7644465653cc3ac4ee2baa63e0157913f31b453964fbaa85d27d7ca8596e6b74"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/lib.rs",
|
"path": "tools/ci-matrix/src/lib.rs",
|
||||||
"bytes": 21318,
|
"bytes": 21367,
|
||||||
"sha256": "2c203fa0820825ce53d572a9883266b605a6661f84dcec10b226e5a0c7ce79cd"
|
"sha256": "ef3684bd5341a61dec6581ead48d3ccdfe79b040afa40854fa680fa1ba5af87a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/main.rs",
|
"path": "tools/ci-matrix/src/main.rs",
|
||||||
"bytes": 5620,
|
"bytes": 7108,
|
||||||
"sha256": "1328db04a3bced20fd0167b813017b4b4024e6eb77beeaf06f82959ec45145c4"
|
"sha256": "4b333b0a8e2744a043553d5bdc56e1eb8701b628e58e6290119bada0370d39df"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/ci-matrix/src/provenance.rs",
|
"path": "tools/ci-matrix/src/provenance.rs",
|
||||||
"bytes": 44234,
|
"bytes": 44270,
|
||||||
"sha256": "d9421c261ba99e68d1eba2c4606cbf63f8d9dc61b87d36f5a696afec1efeadb1"
|
"sha256": "6946295307a3740ba6b70187a37e0f4011f8070a4ef9e1adccecc3487aa71499"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tools/codegen/Cargo.toml",
|
"path": "tools/codegen/Cargo.toml",
|
||||||
@@ -2364,13 +2404,13 @@
|
|||||||
"generated_release_files": [
|
"generated_release_files": [
|
||||||
{
|
{
|
||||||
"path": "release/DEPENDENCY-LICENSES.json",
|
"path": "release/DEPENDENCY-LICENSES.json",
|
||||||
"bytes": 215927,
|
"bytes": 217677,
|
||||||
"sha256": "1644915765f829b6476cfa65f2105f8dead39ca0e65640c87bfb497e5d873d0e"
|
"sha256": "d1a52489f855aa7b3f39731748e4df8cbce615bcd62384370d5113dc0e259eec"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "release/THIRD-PARTY-NOTICES.md",
|
"path": "release/THIRD-PARTY-NOTICES.md",
|
||||||
"bytes": 842933,
|
"bytes": 848536,
|
||||||
"sha256": "7d61809632c7e557331f03dcdf452c5fb777ee2df9644c8b0c7f32a0fc1f26fc"
|
"sha256": "de5088841682813cc952af4d1dcc57d2521694e192888042d5585e344e570d16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "release/NATIVE-LICENSES.md",
|
"path": "release/NATIVE-LICENSES.md",
|
||||||
@@ -2403,6 +2443,14 @@
|
|||||||
"license": "CC-BY-SA-3.0",
|
"license": "CC-BY-SA-3.0",
|
||||||
"distribution": "source-and-generated-data"
|
"distribution": "source-and-generated-data"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "crates/libremetaverse/assets/avatar_lad.xml",
|
||||||
|
"sha256": "6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf",
|
||||||
|
"kind": "linden-data-package-mirror",
|
||||||
|
"origin": "codegen/inputs/avatar_lad.xml",
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"distribution": "source-package-runtime-data"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "codegen/inputs/avatar_skeleton.xml",
|
"path": "codegen/inputs/avatar_skeleton.xml",
|
||||||
"sha256": "addb3cc4cd582ed4343d778e06daf90c6b77b61b4ecb4a20d4bf202c2b93908a",
|
"sha256": "addb3cc4cd582ed4343d778e06daf90c6b77b61b4ecb4a20d4bf202c2b93908a",
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ This document must accompany source and binary distributions. A package's presen
|
|||||||
| `getrandom 0.4.3` | `MIT OR Apache-2.0` | `300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099` | `aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf`<br>`523a42c25d245dde9c015f882cec7f4555aad883382a6cf19b4b7d9b2cd5419b` |
|
| `getrandom 0.4.3` | `MIT OR Apache-2.0` | `300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099` | `aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf`<br>`523a42c25d245dde9c015f882cec7f4555aad883382a6cf19b4b7d9b2cd5419b` |
|
||||||
| `ghash 0.5.1` | `Apache-2.0 OR MIT` | `f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`c0fabcc308b450cb6fe62c9f56fae6abbeb9768eb80d992484c857d744846c2e` |
|
| `ghash 0.5.1` | `Apache-2.0 OR MIT` | `f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`c0fabcc308b450cb6fe62c9f56fae6abbeb9768eb80d992484c857d744846c2e` |
|
||||||
| `glob 0.3.4` | `MIT OR Apache-2.0` | `e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb` |
|
| `glob 0.3.4` | `MIT OR Apache-2.0` | `e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb` |
|
||||||
|
| `goblin 0.10.5` | `MIT` | `983a6aafb3b12d4c41ea78d39e189af4298ce747353945ff5105b54a056e5cd9` | `655e3ee7a4c27430774962e62a6d37d7348e5f2f292010ad674ce1bebefd24bc` |
|
||||||
| `group 0.13.0` | `MIT/Apache-2.0` | `f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63` | `7429802d3e67e3308471b91fbea341e484c4e0a23d0fb230a8636c38184cec79`<br>`a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
| `group 0.13.0` | `MIT/Apache-2.0` | `f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63` | `7429802d3e67e3308471b91fbea341e484c4e0a23d0fb230a8636c38184cec79`<br>`a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
||||||
| `hashbrown 0.17.1` | `MIT OR Apache-2.0` | `ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2` |
|
| `hashbrown 0.17.1` | `MIT OR Apache-2.0` | `ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2` |
|
||||||
| `heck 0.5.0` | `MIT OR Apache-2.0` | `2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0` |
|
| `heck 0.5.0` | `MIT OR Apache-2.0` | `2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0` |
|
||||||
@@ -214,6 +215,7 @@ This document must accompany source and binary distributions. A package's presen
|
|||||||
| `pin-project-lite 0.2.17` | `Apache-2.0 OR MIT` | `a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd` | `0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
| `pin-project-lite 0.2.17` | `Apache-2.0 OR MIT` | `a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd` | `0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
||||||
| `pkcs8 0.10.2` | `Apache-2.0 OR MIT` | `f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`ad64fcb9589f162720f3cc5010ad76ca6ad3764e11861f9192c489df176bb71d` |
|
| `pkcs8 0.10.2` | `Apache-2.0 OR MIT` | `f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`ad64fcb9589f162720f3cc5010ad76ca6ad3764e11861f9192c489df176bb71d` |
|
||||||
| `pkg-config 0.3.33` | `MIT OR Apache-2.0` | `19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397` |
|
| `pkg-config 0.3.33` | `MIT OR Apache-2.0` | `19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397` |
|
||||||
|
| `plain 0.2.3` | `MIT/Apache-2.0` | `b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`bc12b75fd81829814d843a03fa52aad0e53355b1f13665e309ff7fa33c66e5b5` |
|
||||||
| `poly1305 0.8.0` | `Apache-2.0 OR MIT` | `8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`6d99fffea918d1f7dfe567029c7bd21d6fcaf310ad28c44e6511a0e1f68c79ea` |
|
| `poly1305 0.8.0` | `Apache-2.0 OR MIT` | `8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`6d99fffea918d1f7dfe567029c7bd21d6fcaf310ad28c44e6511a0e1f68c79ea` |
|
||||||
| `polyval 0.6.2` | `Apache-2.0 OR MIT` | `9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`a291b6910744d262a9e953c3b5868d74510e20161359f649a11e1791fde84fcd` |
|
| `polyval 0.6.2` | `Apache-2.0 OR MIT` | `9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`a291b6910744d262a9e953c3b5868d74510e20161359f649a11e1791fde84fcd` |
|
||||||
| `potential_utf 0.1.5` | `Unicode-3.0` | `0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564` | `f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2` |
|
| `potential_utf 0.1.5` | `Unicode-3.0` | `0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564` | `f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2` |
|
||||||
@@ -257,6 +259,8 @@ This document must accompany source and binary distributions. A package's presen
|
|||||||
| `rustversion 1.0.23` | `MIT OR Apache-2.0` | `cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f` | `62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
| `rustversion 1.0.23` | `MIT OR Apache-2.0` | `cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f` | `62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a`<br>`23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` |
|
||||||
| `same-file 1.0.6` | `Unlicense/MIT` | `93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502` | `01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f`<br>`cb3c929a05e6cbc9de9ab06a4c57eeb60ca8c724bef6c138c87d3a577e27aa14`<br>`7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c` |
|
| `same-file 1.0.6` | `Unlicense/MIT` | `93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502` | `01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f`<br>`cb3c929a05e6cbc9de9ab06a4c57eeb60ca8c724bef6c138c87d3a577e27aa14`<br>`7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c` |
|
||||||
| `schannel 0.1.29` | `MIT` | `91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939` | `aa72991ac35b4de0034da0afe943e62b48c4092fc2ba13ae47806d8e9a4ad551` |
|
| `schannel 0.1.29` | `MIT` | `91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939` | `aa72991ac35b4de0034da0afe943e62b48c4092fc2ba13ae47806d8e9a4ad551` |
|
||||||
|
| `scroll 0.13.0` | `MIT` | `c1257cd4248b4132760d6524d6dda4e053bc648c9070b960929bf50cfb1e7add` | `6e24b7455f0b9afefdf4f3efd59a56ce76a3020c2dc4371937e281fc5e587fd7` |
|
||||||
|
| `scroll_derive 0.13.1` | `MIT` | `ed76efe62313ab6610570951494bdaa81568026e0318eaa55f167de70eeea67d` | `b35d026cc7aca9d5859a02eb87ddf7a386a24c986838651bd1f283f94e003327` |
|
||||||
| `sctp-proto 0.10.3` | `MIT OR Apache-2.0` | `f895c3c33ae20283f9129bd09db2ca69138798b372ef2b98bd2946d23ea4819b` | `814d11eba59f964bca7e74ef94f0d1eff1d5f322f895fb9b5d7e06f77debf3b2`<br>`7a6631daa22a9f1772e4a474ede9c3374a6c7a89b61c8b5973f7fd5ccd5cee8c` |
|
| `sctp-proto 0.10.3` | `MIT OR Apache-2.0` | `f895c3c33ae20283f9129bd09db2ca69138798b372ef2b98bd2946d23ea4819b` | `814d11eba59f964bca7e74ef94f0d1eff1d5f322f895fb9b5d7e06f77debf3b2`<br>`7a6631daa22a9f1772e4a474ede9c3374a6c7a89b61c8b5973f7fd5ccd5cee8c` |
|
||||||
| `sec1 0.7.3` | `Apache-2.0 OR MIT` | `d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`4a883ecc3bb1010faed542bf63d53e530fea5e5e12cf676aed588784298ba929` |
|
| `sec1 0.7.3` | `Apache-2.0 OR MIT` | `d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc` | `a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5`<br>`4a883ecc3bb1010faed542bf63d53e530fea5e5e12cf676aed588784298ba929` |
|
||||||
| `security-framework 3.7.0` | `MIT OR Apache-2.0` | `b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`91e934255ba3b2f21103d68c5581c23ef34aa95c4628e4405b8c901935e11c69` |
|
| `security-framework 3.7.0` | `MIT OR Apache-2.0` | `b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d` | `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`<br>`91e934255ba3b2f21103d68c5581c23ef34aa95c4628e4405b8c901935e11c69` |
|
||||||
@@ -6737,6 +6741,36 @@ DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
### `655e3ee7a4c27430774962e62a6d37d7348e5f2f292010ad674ce1bebefd24bc`
|
||||||
|
|
||||||
|
Packages: goblin 0.10.5<br>
|
||||||
|
Source filenames: LICENSE
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) m4b 2016-2024
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
|
||||||
### `65f94e99ddaf4f5d1782a6dae23f35d4293a9a01444a13135a6887017d353cee`
|
### `65f94e99ddaf4f5d1782a6dae23f35d4293a9a01444a13135a6887017d353cee`
|
||||||
|
|
||||||
Packages: bumpalo 3.20.3<br>
|
Packages: bumpalo 3.20.3<br>
|
||||||
@@ -7226,6 +7260,36 @@ APPENDIX: How to apply the Apache License to your work.
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
### `6e24b7455f0b9afefdf4f3efd59a56ce76a3020c2dc4371937e281fc5e587fd7`
|
||||||
|
|
||||||
|
Packages: scroll 0.13.0<br>
|
||||||
|
Source filenames: LICENSE
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) m4b 2016
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
|
||||||
### `6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6`
|
### `6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6`
|
||||||
|
|
||||||
Packages: anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.6, clap_builder 4.6.6, clap_derive 4.6.4, clap_lex 1.1.0, colorchoice 1.0.5, is_terminal_polyfill 1.70.2, once_cell_polyfill 1.70.2, serde_spanned 1.1.1, toml 1.1.4+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.25.13+spec-1.1.0, toml_parser 1.1.3+spec-1.1.0, toml_writer 1.1.2+spec-1.1.0<br>
|
Packages: anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.6, clap_builder 4.6.6, clap_derive 4.6.4, clap_lex 1.1.0, colorchoice 1.0.5, is_terminal_polyfill 1.70.2, once_cell_polyfill 1.70.2, serde_spanned 1.1.1, toml 1.1.4+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.25.13+spec-1.1.0, toml_parser 1.1.3+spec-1.1.0, toml_writer 1.1.2+spec-1.1.0<br>
|
||||||
@@ -10914,7 +10978,7 @@ DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
### `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`
|
### `a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2`
|
||||||
|
|
||||||
Packages: arrayvec 0.7.8, asn1-rs 0.7.2, asn1-rs-derive 0.6.0, asn1-rs-impl 0.2.0, atomic-waker 1.1.2, autocfg 1.5.1, base64 0.22.1, bitflags 2.13.1, bumpalo 3.20.3, cc 1.4.2, cexpr 0.6.0, cfg-if 1.0.4, cmake 0.1.58, core-foundation 0.10.1, core-foundation-sys 0.8.7, coreaudio-rs 0.14.2, curve25519-dalek-derive 0.1.1, der-parser 10.0.0, displaydoc 0.2.7, either 1.17.0, equivalent 1.0.2, errno 0.3.14, fastrand 2.5.0, filetime 0.2.29, find-msvc-tools 0.1.10, flate2 1.1.9, form_urlencoded 1.2.2, glob 0.3.4, group 0.13.0, hashbrown 0.17.1, heck 0.5.0, httparse 1.10.1, hyper-rustls 0.27.9, idna 1.1.0, idna_adapter 1.2.2, indexmap 2.14.0, is 0.11.0, itertools 0.13.0, jobserver 0.1.35, js-sys 0.3.104, lazy_static 1.5.0, linux-raw-sys 0.12.1, log 0.4.33, num-bigint 0.4.8, num-derive 0.4.2, num-integer 0.1.46, num-traits 0.2.19, oid-registry 0.8.1, once_cell 1.21.4, openssl-probe 0.2.1, percent-encoding 2.3.2, pkg-config 0.3.33, regex 1.13.1, regex-automata 0.4.18, regex-syntax 0.8.11, roxmltree 0.21.1, rustc_version 0.4.1, rusticata-macros 4.1.0, rustix 1.1.4, rustls 0.23.43, rustls-native-certs 0.8.4, security-framework 3.7.0, security-framework-sys 2.17.0, signal-hook-registry 1.4.8, simd_cesu8 1.2.0, smallvec 1.15.2, socket2 0.6.5, stable_deref_trait 1.2.1, str0m 0.22.0, str0m-proto 0.7.0, str0m-rust-crypto 0.6.0, tar 0.4.46, url 2.5.8, uuid 1.24.0, version_check 0.9.5, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wasm-bindgen 0.2.127, wasm-bindgen-futures 0.4.77, wasm-bindgen-macro 0.2.127, wasm-bindgen-macro-support 0.2.127, wasm-bindgen-shared 0.2.127, web-sys 0.3.104, wit-bindgen 0.57.1, x509-parser 0.18.1, xattr 1.6.1, yasna 0.6.0<br>
|
Packages: arrayvec 0.7.8, asn1-rs 0.7.2, asn1-rs-derive 0.6.0, asn1-rs-impl 0.2.0, atomic-waker 1.1.2, autocfg 1.5.1, base64 0.22.1, bitflags 2.13.1, bumpalo 3.20.3, cc 1.4.2, cexpr 0.6.0, cfg-if 1.0.4, cmake 0.1.58, core-foundation 0.10.1, core-foundation-sys 0.8.7, coreaudio-rs 0.14.2, curve25519-dalek-derive 0.1.1, der-parser 10.0.0, displaydoc 0.2.7, either 1.17.0, equivalent 1.0.2, errno 0.3.14, fastrand 2.5.0, filetime 0.2.29, find-msvc-tools 0.1.10, flate2 1.1.9, form_urlencoded 1.2.2, glob 0.3.4, group 0.13.0, hashbrown 0.17.1, heck 0.5.0, httparse 1.10.1, hyper-rustls 0.27.9, idna 1.1.0, idna_adapter 1.2.2, indexmap 2.14.0, is 0.11.0, itertools 0.13.0, jobserver 0.1.35, js-sys 0.3.104, lazy_static 1.5.0, linux-raw-sys 0.12.1, log 0.4.33, num-bigint 0.4.8, num-derive 0.4.2, num-integer 0.1.46, num-traits 0.2.19, oid-registry 0.8.1, once_cell 1.21.4, openssl-probe 0.2.1, percent-encoding 2.3.2, pkg-config 0.3.33, plain 0.2.3, regex 1.13.1, regex-automata 0.4.18, regex-syntax 0.8.11, roxmltree 0.21.1, rustc_version 0.4.1, rusticata-macros 4.1.0, rustix 1.1.4, rustls 0.23.43, rustls-native-certs 0.8.4, security-framework 3.7.0, security-framework-sys 2.17.0, signal-hook-registry 1.4.8, simd_cesu8 1.2.0, smallvec 1.15.2, socket2 0.6.5, stable_deref_trait 1.2.1, str0m 0.22.0, str0m-proto 0.7.0, str0m-rust-crypto 0.6.0, tar 0.4.46, url 2.5.8, uuid 1.24.0, version_check 0.9.5, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wasm-bindgen 0.2.127, wasm-bindgen-futures 0.4.77, wasm-bindgen-macro 0.2.127, wasm-bindgen-macro-support 0.2.127, wasm-bindgen-shared 0.2.127, web-sys 0.3.104, wit-bindgen 0.57.1, x509-parser 0.18.1, xattr 1.6.1, yasna 0.6.0<br>
|
||||||
Source filenames: LICENSE-APACHE, repository-license/asn1-rs-0.7.2/LICENSE-APACHE, repository-license/str0m-0.22.0/src/packet/LICENSE-APACHE.txt, src/packet/LICENSE-APACHE.txt
|
Source filenames: LICENSE-APACHE, repository-license/asn1-rs-0.7.2/LICENSE-APACHE, repository-license/str0m-0.22.0/src/packet/LICENSE-APACHE.txt, src/packet/LICENSE-APACHE.txt
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -12189,6 +12253,36 @@ DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
### `b35d026cc7aca9d5859a02eb87ddf7a386a24c986838651bd1f283f94e003327`
|
||||||
|
|
||||||
|
Packages: scroll_derive 0.13.1<br>
|
||||||
|
Source filenames: LICENSE
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
|
||||||
### `b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5`
|
### `b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5`
|
||||||
|
|
||||||
Packages: idna 1.1.0, percent-encoding 2.3.2, url 2.5.8<br>
|
Packages: idna 1.1.0, percent-encoding 2.3.2, url 2.5.8<br>
|
||||||
@@ -12878,6 +12972,40 @@ The published crate archive contains no discoverable top-level license/notice fi
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
### `bc12b75fd81829814d843a03fa52aad0e53355b1f13665e309ff7fa33c66e5b5`
|
||||||
|
|
||||||
|
Packages: plain 0.2.3<br>
|
||||||
|
Source filenames: LICENSE-MIT
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
Copyright (c) 2017 Plain contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any
|
||||||
|
person obtaining a copy of this software and associated
|
||||||
|
documentation files (the "Software"), to deal in the
|
||||||
|
Software without restriction, including without
|
||||||
|
limitation the rights to use, copy, modify, merge,
|
||||||
|
publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software
|
||||||
|
is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice
|
||||||
|
shall be included in all copies or substantial portions
|
||||||
|
of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||||
|
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||||
|
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||||
|
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||||
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
|
||||||
### `bdebaf9156a298f8fdab56dd26cb5144673de522d80f4c0d88e0039145f147f9`
|
### `bdebaf9156a298f8fdab56dd26cb5144673de522d80f4c0d88e0039145f147f9`
|
||||||
|
|
||||||
Packages: ecdsa 0.16.9, rfc6979 0.4.0<br>
|
Packages: ecdsa 0.16.9, rfc6979 0.4.0<br>
|
||||||
|
|||||||
@@ -9,9 +9,12 @@ description = "Validated release CI matrix runner for MetaCrate"
|
|||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
flate2 = "1.1.2"
|
||||||
|
goblin = "0.10.5"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
sha2 = "0.11"
|
sha2 = "0.11"
|
||||||
|
tar = "0.4.46"
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|||||||
1145
tools/ci-matrix/src/artifact.rs
Normal file
1145
tools/ci-matrix/src/artifact.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,8 @@ use std::path::{Path, PathBuf};
|
|||||||
const MAPPING_PATH: &str = "api/RUST-MAPPING.tsv";
|
const MAPPING_PATH: &str = "api/RUST-MAPPING.tsv";
|
||||||
const TYPES_PATH: &str = "api/RUST-TYPES.tsv";
|
const TYPES_PATH: &str = "api/RUST-TYPES.tsv";
|
||||||
const GUIDE_PATH: &str = "docs/rust-api-guide.md";
|
const GUIDE_PATH: &str = "docs/rust-api-guide.md";
|
||||||
|
const CORE_GUIDE_MIRROR: &str = "crates/libremetaverse/README.md";
|
||||||
|
const REPOSITORY_CONTENT_ROOT: &str = "https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/";
|
||||||
const REPORT_PATH: &str = "api/DOCUMENTATION-COVERAGE.md";
|
const REPORT_PATH: &str = "api/DOCUMENTATION-COVERAGE.md";
|
||||||
const UPSTREAM_COMMIT: &str = "2aa70bb68513b39795da5d13c88f31b86e85a3ba";
|
const UPSTREAM_COMMIT: &str = "2aa70bb68513b39795da5d13c88f31b86e85a3ba";
|
||||||
|
|
||||||
@@ -234,14 +236,46 @@ fn validate_crates(root: &Path) -> Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let core = fs::read_to_string(root.join("crates/libremetaverse/src/lib.rs"))?;
|
let core = fs::read_to_string(root.join("crates/libremetaverse/src/lib.rs"))?;
|
||||||
if !core.contains("include_str!(\"../../../docs/rust-api-guide.md\")") {
|
if !core.contains("include_str!(\"../README.md\")") {
|
||||||
return Err(MatrixError::new(
|
return Err(MatrixError::new(
|
||||||
"the tested Rust API guide is not included in libremetaverse rustdoc",
|
"the tested Rust API guide is not included in libremetaverse rustdoc",
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
let guide = fs::read_to_string(root.join(GUIDE_PATH))?;
|
||||||
|
let packaged_guide = fs::read_to_string(root.join(CORE_GUIDE_MIRROR))?;
|
||||||
|
if package_guide_links(&guide) != packaged_guide {
|
||||||
|
return Err(MatrixError::new(
|
||||||
|
"the packaged libremetaverse rustdoc guide is not the deterministic repository-link form of the tested guide",
|
||||||
|
));
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn package_guide_links(guide: &str) -> String {
|
||||||
|
guide
|
||||||
|
.replace("(../api/", &format!("({REPOSITORY_CONTENT_ROOT}api/"))
|
||||||
|
.replace(
|
||||||
|
"(release-ci-matrix.md",
|
||||||
|
&format!("({REPOSITORY_CONTENT_ROOT}docs/release-ci-matrix.md"),
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
"(../crates/libremetaverse/examples/",
|
||||||
|
&format!("({REPOSITORY_CONTENT_ROOT}crates/libremetaverse/examples/"),
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
"(concurrency-hardening.md",
|
||||||
|
&format!("({REPOSITORY_CONTENT_ROOT}docs/concurrency-hardening.md"),
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
"(live-grid-smoke.md",
|
||||||
|
&format!("({REPOSITORY_CONTENT_ROOT}docs/live-grid-smoke.md"),
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
"(../programs/README.md",
|
||||||
|
&format!("({REPOSITORY_CONTENT_ROOT}programs/README.md"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fn validate_guide(guide: &str) -> Result<()> {
|
fn validate_guide(guide: &str) -> Result<()> {
|
||||||
if !guide.contains("https://github.com/cinderblocks/libremetaverse")
|
if !guide.contains("https://github.com/cinderblocks/libremetaverse")
|
||||||
|| !guide.contains(UPSTREAM_COMMIT)
|
|| !guide.contains(UPSTREAM_COMMIT)
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ use std::process::{Command, ExitStatus, Stdio};
|
|||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
mod api_surface;
|
mod api_surface;
|
||||||
|
mod artifact;
|
||||||
mod dependency;
|
mod dependency;
|
||||||
mod documentation;
|
mod documentation;
|
||||||
mod provenance;
|
mod provenance;
|
||||||
|
|
||||||
pub use api_surface::{audit_api_surface, write_api_baseline};
|
pub use api_surface::{audit_api_surface, write_api_baseline};
|
||||||
|
pub use artifact::audit_artifacts;
|
||||||
pub use dependency::audit_dependencies;
|
pub use dependency::audit_dependencies;
|
||||||
pub use documentation::{audit_documentation, write_documentation_report};
|
pub use documentation::{audit_documentation, write_documentation_report};
|
||||||
pub use provenance::{audit_provenance, write_provenance_reports};
|
pub use provenance::{audit_provenance, write_provenance_reports};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use metacrate_ci_matrix::{
|
use metacrate_ci_matrix::{
|
||||||
audit, audit_api_surface, audit_dependencies, audit_documentation, audit_provenance, load, run,
|
audit, audit_api_surface, audit_artifacts, audit_dependencies, audit_documentation,
|
||||||
workspace_root, write_api_baseline, write_documentation_report, write_provenance_reports,
|
audit_provenance, load, run, workspace_root, write_api_baseline, write_documentation_report,
|
||||||
|
write_provenance_reports,
|
||||||
};
|
};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
@@ -49,6 +50,9 @@ fn execute() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
audit_dependencies(&root, &evidence)?;
|
audit_dependencies(&root, &evidence)?;
|
||||||
println!("dependency policy: ok ({})", evidence.display());
|
println!("dependency policy: ok ({})", evidence.display());
|
||||||
}
|
}
|
||||||
|
Some("artifact-audit") => {
|
||||||
|
artifact_audit_command(&root, arguments)?;
|
||||||
|
}
|
||||||
Some("documentation-report") if arguments.next().is_none() => {
|
Some("documentation-report") if arguments.next().is_none() => {
|
||||||
write_documentation_report(&root)?;
|
write_documentation_report(&root)?;
|
||||||
println!("documentation coverage report: updated");
|
println!("documentation coverage report: updated");
|
||||||
@@ -94,7 +98,7 @@ fn execute() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return Err(
|
return Err(
|
||||||
"usage: ci-matrix audit | run PROFILE --evidence FILE | dependency-audit --evidence FILE | documentation-report | documentation-audit --evidence FILE | api-baseline-write | api-audit --evidence FILE | provenance-report | provenance-audit --evidence FILE"
|
"usage: ci-matrix audit | run PROFILE --evidence FILE | dependency-audit --evidence FILE | artifact-audit --artifact-dir DIR --package-dir DIR --evidence FILE | documentation-report | documentation-audit --evidence FILE | api-baseline-write | api-audit --evidence FILE | provenance-report | provenance-audit --evidence FILE"
|
||||||
.into(),
|
.into(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -102,6 +106,42 @@ fn execute() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn artifact_audit_command(
|
||||||
|
root: &Path,
|
||||||
|
mut arguments: impl Iterator<Item = String>,
|
||||||
|
) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let artifact_dir = option(&mut arguments, "--artifact-dir")?;
|
||||||
|
let package_dir = option(&mut arguments, "--package-dir")?;
|
||||||
|
let evidence = option(&mut arguments, "--evidence")?;
|
||||||
|
if arguments.next().is_some() {
|
||||||
|
return Err(
|
||||||
|
"usage: ci-matrix artifact-audit --artifact-dir DIR --package-dir DIR --evidence FILE"
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let artifact_dir = absolute_or_rooted(root, &artifact_dir);
|
||||||
|
let package_dir = absolute_or_rooted(root, &package_dir);
|
||||||
|
let evidence = absolute_or_rooted(root, &evidence);
|
||||||
|
audit_artifacts(root, &artifact_dir, &package_dir, &evidence)?;
|
||||||
|
println!("native release artifacts: ok ({})", evidence.display());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn option(
|
||||||
|
arguments: &mut impl Iterator<Item = String>,
|
||||||
|
expected: &str,
|
||||||
|
) -> Result<String, Box<dyn std::error::Error>> {
|
||||||
|
let flag = arguments
|
||||||
|
.next()
|
||||||
|
.ok_or_else(|| format!("missing {expected}"))?;
|
||||||
|
if flag != expected {
|
||||||
|
return Err(format!("expected {expected}, found {flag}").into());
|
||||||
|
}
|
||||||
|
arguments
|
||||||
|
.next()
|
||||||
|
.ok_or_else(|| format!("missing value for {expected}").into())
|
||||||
|
}
|
||||||
|
|
||||||
fn provenance_audit_command(
|
fn provenance_audit_command(
|
||||||
root: &Path,
|
root: &Path,
|
||||||
mut arguments: impl Iterator<Item = String>,
|
mut arguments: impl Iterator<Item = String>,
|
||||||
|
|||||||
@@ -22,11 +22,12 @@ const GENERATED_RELEASE_PATHS: [&str; 4] = [
|
|||||||
NATIVE_NOTICE_PATH,
|
NATIVE_NOTICE_PATH,
|
||||||
DISTRIBUTION_MANIFEST_PATH,
|
DISTRIBUTION_MANIFEST_PATH,
|
||||||
];
|
];
|
||||||
const MATERIAL_ROOTS: [&str; 4] = [
|
const MATERIAL_ROOTS: [&str; 5] = [
|
||||||
"codegen/inputs",
|
"codegen/inputs",
|
||||||
"tests/fixtures",
|
"tests/fixtures",
|
||||||
"fuzz/corpus",
|
"fuzz/corpus",
|
||||||
"benchmarks/fixtures",
|
"benchmarks/fixtures",
|
||||||
|
"crates/libremetaverse/assets",
|
||||||
];
|
];
|
||||||
const BUNDLED_EXTENSIONS: [&str; 18] = [
|
const BUNDLED_EXTENSIONS: [&str; 18] = [
|
||||||
"a", "animatn", "bmp", "bodypart", "clothing", "dll", "dylib", "gesture", "gif", "jpeg", "jpg",
|
"a", "animatn", "bmp", "bodypart", "clothing", "dll", "dylib", "gesture", "gif", "jpeg", "jpg",
|
||||||
|
|||||||
Reference in New Issue
Block a user