All checks were successful
wai-fleet service / does this change touch it (pull_request) Successful in 8s
WAI energy receipts / does this change touch it (pull_request) Successful in 9s
wai-audit collector and player integration / does this change touch it (pull_request) Successful in 11s
WAI operation catalogue / does this change touch it (pull_request) Successful in 10s
WAI conformance / does this change touch it (pull_request) Successful in 11s
smart-byte conformance gate / does this change touch it (pull_request) Successful in 13s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 12s
wai cross-architecture byte-equality / does this change touch it (pull_request) Successful in 13s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 6s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 6s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 19s
wai-key-proxy / does this change touch it (pull_request) Successful in 7s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 18s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
wai-ledger service / does this change touch it (pull_request) Successful in 7s
WAI neural sink gates / does this change touch it (pull_request) Successful in 8s
WAI neural decoders end-to-end / does this change touch it (pull_request) Successful in 9s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 6s
wai-ops integer operators / does this change touch it (pull_request) Successful in 7s
wai-ops-npu integer operators on neural processors / does this change touch it (pull_request) Successful in 13s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 14s
wai-quantum contract / does this change touch it (pull_request) Successful in 7s
wai-quantum dataflow member / does this change touch it (pull_request) Successful in 6s
wai-quantum command line / does this change touch it (pull_request) Successful in 11s
wai-quantum docs, course and locales / does this change touch it (pull_request) Successful in 8s
wai-quantum editors / does this change touch it (pull_request) Successful in 6s
wai-quantum signal processor / does this change touch it (pull_request) Successful in 9s
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 12s
wai-quantum resource estimation / does this change touch it (pull_request) Successful in 6s
wai-quantum HIP member / does this change touch it (pull_request) Successful in 5s
wai-quantum other formats / does this change touch it (pull_request) Successful in 6s
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 8s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 10s
wai-quantum npu-cores member / does this change touch it (pull_request) Successful in 9s
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 9s
wai-quantum for Python / does this change touch it (pull_request) Successful in 8s
wai-quantum Metal member / does this change touch it (pull_request) Successful in 11s
wai-quantum OpenQASM reader / does this change touch it (pull_request) Successful in 14s
wai-quantum pulse and dynamics / does this change touch it (pull_request) Successful in 10s
wai-quantum error correction and mitigation / does this change touch it (pull_request) Successful in 8s
wai-quantum-qpu / does this change touch it (pull_request) Successful in 7s
wai-quantum neural-processor member / does this change touch it (pull_request) Successful in 15s
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 5s
wai-quantum service / does this change touch it (pull_request) Successful in 6s
wai-quantum extension points / does this change touch it (pull_request) Successful in 7s
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 5s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 6s
wai-quantum variational and algorithm library / does this change touch it (pull_request) Successful in 6s
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 7s
wai-sink-android native sink library / does this change touch it (pull_request) Successful in 6s
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 11s
wai-quantum verdicts and repairs / does this change touch it (pull_request) Successful in 9s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 6s
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 7s
WAI Studio / does this change touch it (pull_request) Successful in 7s
wai-quantum views in agent hosts / does this change touch it (pull_request) Successful in 13s
wai-web wasm32 / does this change touch it (pull_request) Successful in 9s
wai-vector vector graphics / does this change touch it (pull_request) Successful in 9s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 14s
wai-fleet service / service · macos (pull_request) Successful in 1m24s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 35s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 4s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 43s
smart-byte conformance gate / Validate conformance JSON files (pull_request) Successful in 8s
smart-byte conformance gate / Second implementation reproduces every vector (pull_request) Successful in 6s
smart-byte conformance gate / Spec changes require vector-pack updates (pull_request) Successful in 9s
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Successful in 1m44s
smart-byte conformance gate / VERSIONS.md and README.md must exist (pull_request) Successful in 5s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 2m18s
wai-audit collector and player integration / collector · linux (pull_request) Successful in 1m33s
wai-quantum CUDA member / member · CUDA (thor) (pull_request) Successful in 2m8s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Successful in 29s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Successful in 38s
wai-fleet service / service · linux (pull_request) Successful in 2m13s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 49s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (thor) (pull_request) Successful in 51s
WAI conformance / fast integer kernels, every x86_64 kernel set (AVX-512 silicon) (pull_request) Successful in 3m25s
wai-ops-npu integer operators on neural processors / neural processor (framework-128gb silicon) (pull_request) Successful in 10s
wai-key-proxy / proxy · linux (pull_request) Successful in 1m33s
wai-ledger service / service · linux (pull_request) Successful in 1m34s
wai-quantum service / service energy · linux packages (pull_request) Successful in 1m48s
WAI conformance / faces from keypoints under wasm32-wasip2 (wasmtime) (pull_request) Successful in 3m45s
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Successful in 1m4s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 4m1s
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Successful in 31s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 3m4s
WAI operation catalogue / the catalogue and every door · linux (pull_request) Successful in 4m48s
wai-ops integer operators / linux-x86_64 (pull_request) Successful in 58s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Successful in 1m38s
wai-ops integer operators / wasm32 under Node (pull_request) Successful in 21s
wai-ops integer operators / independent checker (Python) (pull_request) Successful in 12s
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Successful in 1m20s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Successful in 37s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m36s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 3m7s
wai-quantum contract / the policy is linked, and the deprecations page reads (pull_request) Successful in 4s
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Successful in 27s
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Successful in 15s
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Successful in 20s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 54s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 6m25s
wai-quantum command line / command line · linux (pull_request) Successful in 2m17s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Successful in 1m47s
wai-ledger service / service · macos (pull_request) Successful in 2m38s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 4m18s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (pull_request) Successful in 9s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Successful in 4m18s
wai-quantum contract / API compatibility · linux (pull_request) Successful in 4m55s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 10m14s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 11m19s
wai-pack / wai-pack · linux (pull_request) Successful in 6m42s
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 1m21s
wai-quantum docs, course and locales / the course and the command line's languages · linux (pull_request) Successful in 2m22s
wai-ops integer operators / macos-arm64 (pull_request) Successful in 59s
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 26s
wai-quantum resource estimation / estimation and calibration · linux, release (pull_request) Successful in 1m54s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 13m27s
wai-quantum editors / editors · linux (pull_request) Successful in 2m27s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m36s
wai-quantum contract / schemas and the committed tool lists · linux (pull_request) Successful in 7m27s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 30s
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Successful in 32s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m5s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 8m8s
wai-quantum OpenQASM reader / reader and corpus · linux (pull_request) Successful in 2m18s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (pull_request) Successful in 1m48s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m22s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 25s
wai-pack / wai-pack · macos (pull_request) Successful in 6m24s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 17s
wai-quantum for Python / python · linux (pull_request) Successful in 2m55s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 48s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m34s
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Successful in 55s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Successful in 31s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (pull_request) Successful in 59s
wai-quantum command line / command line · macos (pull_request) Successful in 3m11s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 13m51s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 16m57s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (pull_request) Successful in 3m9s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 21s
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Successful in 24s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 10s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 45s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 26s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 10s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (pull_request) Successful in 1m40s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 26s
wai-quantum extension points / the registry and the example · linux (pull_request) Successful in 2m56s
wai-quantum editors / editors · macos (pull_request) Successful in 2m14s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Successful in 2m40s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m15s
wai-quantum for Python / python · macos (pull_request) Successful in 2m38s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (pull_request) Successful in 1m47s
wai-quantum Metal member / member · Metal (macos) (pull_request) Successful in 1m21s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 55s
wai-quantum service / service · linux (pull_request) Successful in 4m58s
wai-quantum-qpu / credentials in the keychain (macos) (pull_request) Successful in 55s
wai-quantum pulse and dynamics / the same bits · macos (pull_request) Successful in 1m45s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 9m48s
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Successful in 26s
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Successful in 15s
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Successful in 15s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 9m55s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 6m12s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 15m19s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Successful in 5m0s
wai-quantum other formats / readers, writers and the set · linux (pull_request) Successful in 13m7s
wai-quantum views in agent hosts / views · the page and its engine (pull_request) Successful in 3m26s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 14m12s
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (pull_request) Successful in 52s
wai-quantum views in agent hosts / views · a scripted host (pull_request) Successful in 3m32s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m55s
wai-vector vector graphics / fuzz, peak allocation, comparison count (pull_request) Successful in 19s
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Successful in 4m28s
wai-vector vector graphics / wasm32 under Node (pull_request) Successful in 49s
wai-vector vector graphics / linux-x86_64 (pull_request) Successful in 1m56s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 9m7s
wai-quantum WebGPU member / member · GPU, Vulkan (jetson-hub) (pull_request) Successful in 22m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 25m51s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m33s
wai-vector vector graphics / independent checker (Python) (pull_request) Successful in 3m6s
wai-quantum WebGPU member / member · GPU, Vulkan (thor) (pull_request) Successful in 24m41s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m43s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m41s
wai-quantum service / service · macos (pull_request) Successful in 6m58s
wai-vector vector graphics / wasm32 in three browser engines (pull_request) Successful in 4m17s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 6m51s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m28s
wai-vector vector graphics / macos-arm64 (pull_request) Successful in 2m12s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 11m31s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 3m36s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 32m11s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 12m29s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 18m22s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 9m4s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 4m26s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 16m0s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 30m23s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 14s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 30m3s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 41s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 6m11s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 7m32s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Successful in 2m24s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 21m41s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 8m47s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 9m59s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 40m28s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m56s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 9m18s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 2m1s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m50s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 30s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 16s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 48m29s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 1m41s
wai-ops-npu integer operators on neural processors / builds · no device is not a pass (linux-arm64) (pull_request) Successful in 1m0s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 1m24s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 2m14s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (pull_request) Successful in 2m10s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 49m4s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 9m38s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (pull_request) Successful in 2m27s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 3m7s
wai-quantum extension points / the registry and the example · linux-arm64 (pull_request) Successful in 6m9s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m28s
wai-vector vector graphics / linux-aarch64 (pull_request) Successful in 4m14s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h41m35s
The commit before this one moved 55 gate jobs off `linux-arm64`. It found them by the name every gate carried, `does this change touch it`. Four workflows prefix theirs -- `WAI HTTP · does this change touch it`, `WAI breaking · does this change touch WAI`, `WAI examples · does this change touch them`, `wai-pack · does this change touch it` -- so a name match skipped them, and the fix that was meant to be exhaustive left five jobs behind. Searching on the job key instead of the display name finds them. They are the same shape as the 55: `fetch-depth: 0`, one call to pr-touches-paths.py, and every real job in the file declaring them in `needs`. The fifth is wai-http's `shards`, the accounting job that checks each patch and mutation lands in exactly one shard; it runs one bash script and gates nothing cheaper than itself, so it belongs on the same label as wai-formal-verification's. wai-http is the costly one to leave behind. Its six falsify shards are about an hour and a half of runner time, its gate decides whether they run at all, and the gate's own regex lists `.github/workflows/wai-http.yml`, so any branch that edits that file -- every Rust-toolchain branch edits all of them -- waits on an arm64 gate to find out it must then spend that hour and a half on arm64 too. Measured while this was written: `linux-arm64` 188 runs deep, `linux` idle, and the only jobs two pull requests still needed to merge were gate scripts of a few seconds each, queued behind hour-long work. The work stays where it is. Only the gates move. Verified: searching by job key now finds no gate-class job on `linux-arm64`, and all four files parse. Co-Authored-By: Claude Opus 5 <[email protected]>
414 lines
21 KiB
YAML
414 lines
21 KiB
YAML
name: wai-pack
|
|
|
|
# The reference packager of WAI's packaging extension (wai/extensions/packaging.md) and
|
|
# its conformance corpus (wai/pack-conformance). Four jobs:
|
|
#
|
|
# - legs: on each architecture of the fleet, clippy with float arithmetic denied (no
|
|
# float decides anything in a package), the tests in release with a floor on how many
|
|
# each target lists, and the corpus recomputed by the crate: the golden packages
|
|
# packed again byte for byte and verified, every mutation's reason. On the macOS leg,
|
|
# whose host has a GPU, the steps a GPU runs (packaging §11.6): wai-pack-gpu's kernels
|
|
# against their references and every edited kernel caught, and wai-pack's fabric
|
|
# differential (every golden packed on the GPU byte for byte, every verdict the CPU's),
|
|
# an absent adapter a failure there (WAI_PACK_GPU_REQUIRE), never a skip.
|
|
# - independent: the corpus recomputed by its second implementation, written in Python
|
|
# from the extension text and sharing no code with wai-pack, the golden packages
|
|
# verified and re-derived from their sources among it (every refinement layer and
|
|
# still byte for byte, every delivery case through the staged-measurement simulator's
|
|
# Python twin); and the differentials: source readers, policies, scene cuts, the
|
|
# staged packer (layers, stills, piece plans, deliveries), and a still's reader.
|
|
# - media: the golden's floor, its CMAF initialization segment and fragments, read and
|
|
# decoded by a media prober (test 14).
|
|
# - licences: every crate in wai-pack's dependency graph is under a licence deny.toml
|
|
# allows; a source-available licence fails it.
|
|
#
|
|
# Push filters match the push's delta, so every path a build or a verifier reads is
|
|
# listed: the crate, the wai crate it builds on, the corpus, the BLAKE3, integer payload,
|
|
# staged-delivery and staged-measurement verifiers, the claim verifier (a metered
|
|
# package's claim) and the OER verifier it imports, the registry export pack_verify.py
|
|
# reads, and this file.
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'wai/wai-pack/**'
|
|
- 'wai/wai-pack-gpu/**'
|
|
- 'wai/wai-rs/**'
|
|
- 'wai/pack-conformance/**'
|
|
# tests/encode_rung.rs checks the encoded renditions of the base golden.
|
|
- 'wai/encode-conformance/rendition/**'
|
|
- 'wai/claim-conformance/_blake3.py'
|
|
- 'wai/claim-conformance/_ed25519.py'
|
|
- 'wai/claim-conformance/claim_verify.py'
|
|
- 'wai/oer-conformance/oer2_verify.py'
|
|
- 'wai/int-payload-conformance/int_payload_verify.py'
|
|
- 'wai/staged-conformance/staged_verify.py'
|
|
- 'wai/staged-measure-conformance/sim_verify.py'
|
|
- 'wai/staged-measure-conformance/measure_verify.py'
|
|
- 'wai/http-conformance/http_verify.py'
|
|
- '.github/workflows/wai-pack.yml'
|
|
schedule:
|
|
- cron: '38 6 * * *'
|
|
jobs:
|
|
# Forgejo matches the `paths:` filters above against the **push delta**, not
|
|
# the pull request's diff. A rebase moves a branch across every commit main
|
|
# has gained, so its delta touches nearly every path and this workflow fires
|
|
# on changes that cannot affect it. Measured on this repo: a jcp-only change
|
|
# pushed to a fresh branch ran 2 workflows; the same change force-pushed after
|
|
# a rebase ran 15, this one among them, putting three platforms of wai-pack and
|
|
# the JPEG-AI whole decode in a queue they had no business being in.
|
|
#
|
|
# So the filters above still gate the *trigger*, and this job gates the
|
|
# *work*, from the pull request's own diff. It reads the path list out of this
|
|
# file, so there is one list and not a third copy to drift. On a push to main
|
|
# there is no pull-request context, the shas are empty, and the gate answers
|
|
# `true` — a push to main runs everything, as before.
|
|
relevant:
|
|
name: wai-pack · does this change touch it
|
|
runs-on: linux
|
|
outputs:
|
|
run: ${{ steps.gate.outputs.run }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
- id: gate
|
|
run: |
|
|
set -euo pipefail
|
|
r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-pack.yml \
|
|
"${{ github.event.pull_request.base.sha }}" \
|
|
"${{ github.event.pull_request.head.sha }}")
|
|
echo "this change touches wai-pack: $r"
|
|
echo "run=$r" >> "$GITHUB_OUTPUT"
|
|
|
|
legs:
|
|
name: wai-pack · ${{ matrix.os }}
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# Self-hosted fleet labels: x86_64 by linux, arm64 by linux-arm64 and macos.
|
|
# A Windows leg waits for its runner (see wai-byte-equality.yml).
|
|
os: [linux, linux-arm64, macos]
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
# The docker runners ship no Rust, so rustup is bootstrapped; the macOS host has
|
|
# it, but launchd's PATH omits ~/.cargo/bin.
|
|
- name: Install Rust 1.98.0
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
|
|
rustup toolchain install 1.98.0 --profile minimal
|
|
rustup default 1.98.0
|
|
rustup component add --toolchain 1.98.0 clippy
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
# clippy::float_arithmetic is denied for the library and the CLI (Cargo.toml and
|
|
# the crate attributes); -D warnings makes every other lint fail the step too.
|
|
- name: clippy, float arithmetic denied
|
|
working-directory: wai/wai-pack
|
|
run: cargo clippy --locked --all-targets -- -D warnings
|
|
|
|
- name: Tests (release)
|
|
working-directory: wai/wai-pack
|
|
run: cargo test --release --locked
|
|
|
|
# A target that lost its tests (a module dropped, a cfg that compiles them out)
|
|
# would still report ok. Each target must list at least as many tests as it had
|
|
# when the floor was set; raise a floor when tests are added.
|
|
- name: Test-count floor per target
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: |
|
|
set -euo pipefail
|
|
fail=0
|
|
while read -r target floor; do
|
|
n=$(cargo test --release --locked $target -- --list 2>/dev/null | grep -c ': test$' || true)
|
|
echo "$target: $n tests (floor $floor)"
|
|
[ "$n" -ge "$floor" ] || { echo "::error::$target lists $n tests, under its floor of $floor"; fail=1; }
|
|
done <<'EOF'
|
|
--lib 39
|
|
--test=cmaf 4
|
|
--test=conformance 1
|
|
--test=encode_rung 3
|
|
--test=fabric 3
|
|
--test=floor_only 2
|
|
--test=ladder 3
|
|
--test=pack_alloc 1
|
|
--test=packs 9
|
|
--test=review 9
|
|
--test=refusals 6
|
|
--test=repack 3
|
|
--test=scenecut 3
|
|
--test=source_alloc 1
|
|
--test=staged 10
|
|
EOF
|
|
exit $fail
|
|
|
|
- name: The corpus, recomputed by wai-pack
|
|
working-directory: wai/wai-pack
|
|
run: cargo run --release --locked --bin wai-pack -- conformance check ../pack-conformance
|
|
|
|
# The catalogue's package.build and package.verify (wai-rs/src/bin/wai_cli/package.rs)
|
|
# run this packer as itself: a dry run of `wai package build` writes nothing; a real one
|
|
# writes the golden package of video-base-01 byte for byte; `wai package verify` accepts
|
|
# it and exits 1 on a copy whose receipt was edited.
|
|
- name: The catalogue's package doors run this packer
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
(cd wai/wai-pack && cargo build --release --locked --bin wai-pack)
|
|
(cd wai/wai-rs && cargo build --locked --no-default-features --bin wai)
|
|
P="$PWD/wai/wai-pack/target/release/wai-pack"; W="$PWD/wai/wai-rs/target/debug/wai"
|
|
G=wai/pack-conformance/packs/video-base-01; D=$(mktemp -d)
|
|
cp -r "$G/policy.toml" "$G/floor" "$G/key.hex" "$D/"
|
|
"$P" fixture gen video-base-01 -o "$D/video-base-01.y4m"
|
|
"$W" package build --dry-run --packer "$P" --policy "$D/policy.toml" --out "$D/out" --key "$D/key.hex"
|
|
test ! -e "$D/out"
|
|
"$W" package build --packer "$P" --policy "$D/policy.toml" --out "$D/out" --key "$D/key.hex"
|
|
diff -r "$D/out" "$G/package"
|
|
"$W" package verify --packer "$P" "$D/out"
|
|
cp -r "$D/out" "$D/edited"
|
|
sed -i.bak 's/"total_entries":[0-9]*/"total_entries":1/' "$D/edited/package.receipt.json" && rm "$D/edited/package.receipt.json.bak"
|
|
set +e; "$W" package verify --packer "$P" "$D/edited"; code=$?; set -e
|
|
[ "$code" = 1 ] || { echo "::error::an edited package's verify exited $code, not 1"; exit 1; }
|
|
|
|
# The steps a GPU runs (packaging §11.6), on the one leg whose host has a GPU. Each
|
|
# test prints the adapter it ran on; the step requires those lines, so a run that
|
|
# found no adapter, or filtered the tests away, fails.
|
|
- name: wai-pack-gpu, clippy and its kernels against their references (Metal)
|
|
if: matrix.os == 'macos'
|
|
shell: bash
|
|
working-directory: wai/wai-pack-gpu
|
|
env:
|
|
WAI_PACK_GPU_REQUIRE: '1'
|
|
run: |
|
|
set -euo pipefail
|
|
cargo clippy --locked --all-targets -- -D warnings
|
|
cargo test --release --locked -- --nocapture 2>&1 | tee "$RUNNER_TEMP/gpu.txt"
|
|
grep -q 'motion search, 54 frames, every vector the text' "$RUNNER_TEMP/gpu.txt"
|
|
grep -q 'every hash the reference crate' "$RUNNER_TEMP/gpu.txt"
|
|
[ "$(grep -c '^caught: ' "$RUNNER_TEMP/gpu.txt")" -ge 12 ]
|
|
- name: wai-pack's fabric differential on the GPU (Metal)
|
|
if: matrix.os == 'macos'
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
env:
|
|
WAI_PACK_GPU_REQUIRE: '1'
|
|
run: |
|
|
set -euo pipefail
|
|
cargo clippy --locked --all-targets --features gpu,fabric-meter -- -D warnings
|
|
cargo test --release --locked --features gpu --test fabric -- --nocapture 2>&1 | tee "$RUNNER_TEMP/fabric.txt"
|
|
grep -q 'the search on the GPU: ' "$RUNNER_TEMP/fabric.txt"
|
|
grep -q 'verdicts, each the CPU' "$RUNNER_TEMP/fabric.txt"
|
|
grep -q 'test result: ok. 7 passed' "$RUNNER_TEMP/fabric.txt"
|
|
|
|
independent:
|
|
name: wai-pack · independent verifier (Python)
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: linux-arm64
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
# The standard library (tomllib, hashlib); BLAKE3 from the shared pure-Python module
|
|
# beside the claim corpus; the package receipts' Ed25519 equation from the
|
|
# `cryptography` package, pinned with its dependencies by SHA-256 so pip installs only
|
|
# the files the requirements name.
|
|
- name: Install the Ed25519 library (hashes required)
|
|
shell: bash
|
|
working-directory: wai
|
|
run: python -m pip install --require-hashes -r pack-conformance/requirements-verify.txt
|
|
- name: pack_verify.py
|
|
working-directory: wai
|
|
shell: bash
|
|
run: python3 pack-conformance/pack_verify.py pack-conformance
|
|
# The same checks with the hashes and decodes run ahead in worker processes
|
|
# (--jobs): every check and its reason are the serial run's.
|
|
- name: pack_verify.py --jobs 2
|
|
working-directory: wai
|
|
shell: bash
|
|
run: python3 pack-conformance/pack_verify.py --jobs 2 pack-conformance
|
|
- name: Install Rust 1.98.0
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
|
|
rustup toolchain install 1.98.0 --profile minimal
|
|
rustup default 1.98.0
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
# The source readers differentially: seeded Y4M and WAV mutations, every verdict of
|
|
# wai-pack (debug and release, both with overflow checks) equal to pack_verify.py's,
|
|
# and no reader panicking.
|
|
- name: source_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: |
|
|
set -euo pipefail
|
|
cargo build --locked --bin wai-pack
|
|
cargo build --release --locked --bin wai-pack
|
|
for profile in debug release; do
|
|
python3 ../pack-conformance/source_diff.py "target/$profile/wai-pack" 1 3000
|
|
done
|
|
# The policy reader differentially: byte-level cases and seeded random policies,
|
|
# every verdict and digest of wai-pack equal to pack_verify.py's.
|
|
- name: policy_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: python3 ../pack-conformance/policy_diff.py target/release/wai-pack 1 3000
|
|
# wai.pack.scenecut/1 differentially: the streaming segmenter against
|
|
# pack_verify.py's on-demand form on seeded random clips.
|
|
- name: segment_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: python3 ../pack-conformance/segment_diff.py target/release/wai-pack 1 2000
|
|
# The staged packer differentially: refinement layers, stills, piece plans and
|
|
# deliveries on seeded random inputs, every result of wai-pack equal to
|
|
# pack_verify.py's (debug and release, both with overflow checks).
|
|
- name: stage_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: |
|
|
set -euo pipefail
|
|
python3 ../pack-conformance/stage_diff.py target/debug/wai-pack 1 1000
|
|
python3 ../pack-conformance/stage_diff.py target/release/wai-pack 2 3000
|
|
# The supplied CMAF reader differentially (packaging §7.7): seeded alterations of a
|
|
# media muxer's segments and of §7.6's writer's, every verdict and accepted segment's
|
|
# samples of wai-pack's reader equal to pack_verify.py's.
|
|
- name: cmaf_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: python3 ../pack-conformance/cmaf_diff.py target/release/wai-pack 1 3000
|
|
# A still's reader differentially: the zlib library's own streams, dynamic blocks
|
|
# built on each of RFC 1951's and zlib's code-set rules, and their alterations, every
|
|
# verdict of wai-pack's reader equal to pack_verify.py's, which inflates with
|
|
# Python's zlib (debug and release).
|
|
- name: png_diff.py, wai-pack against pack_verify.py
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: |
|
|
set -euo pipefail
|
|
python3 ../pack-conformance/png_diff.py target/debug/wai-pack 1 2000
|
|
python3 ../pack-conformance/png_diff.py target/release/wai-pack 2 4000
|
|
|
|
media:
|
|
name: wai-pack · the floor through a media prober
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: linux-arm64
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Install a media prober
|
|
shell: bash
|
|
run: |
|
|
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
|
|
$SUDO apt-get update -qq
|
|
$SUDO apt-get install -y -qq ffmpeg
|
|
# Test 14: each golden floor's init.mp4 and its fragments, in its floor playlist's
|
|
# order, read as one AV1 track of every frame of the source, with a key frame at each
|
|
# piece start of the plan and nowhere else, and decode without an error; a ladder
|
|
# golden has one floor playlist per floor rung (packaging §7.1), each read so.
|
|
- name: The goldens' floors read and decode
|
|
shell: bash
|
|
working-directory: wai/pack-conformance/packs
|
|
run: |
|
|
set -euo pipefail
|
|
for g in video-base-01 video-staged-01 video-ladder-01 video-cmaf-01 video-floor-only-02; do
|
|
( cd "$g/package"
|
|
for pl in hls/classic/floor-*.m3u8; do
|
|
f=$(basename "$pl" .m3u8); f=${f#floor-}
|
|
tmp=$(mktemp -d)
|
|
cat "floor/$f/init.mp4" $(grep -v '^#' "$pl" | sed 's#^\.\./\.\./##') > "$tmp/floor.mp4"
|
|
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=codec_name,width,height,nb_read_frames -of default=nw=1 "$tmp/floor.mp4" | tee "$tmp/probe.txt"
|
|
grep -qx 'codec_name=av1' "$tmp/probe.txt"
|
|
grep -qx 'nb_read_frames=200' "$tmp/probe.txt"
|
|
# A sample's pts is in the track's timescale, not in frames: the packager's
|
|
# own floors tick once per frame, a muxer's CMAF floor (video-cmaf-01) 48000
|
|
# times. The sample spacing is the second sample's pts less the first's (some
|
|
# ffprobe versions report no duration for the first fMP4 sample), every sample
|
|
# must sit on that grid, and a duration ffprobe does report must equal it: a gap,
|
|
# an uneven duration or a sample out of order is refused here rather than read
|
|
# as a moved key frame. A key frame's index is its place on the grid.
|
|
keys=$(ffprobe -v error -select_streams v:0 -show_entries packet=pts,duration,flags -of compact=p=0 "$tmp/floor.mp4" \
|
|
| awk -F'|' -v what="$g $f" '
|
|
{ delete v; for (i = 1; i <= NF; i++) { j = index($i, "="); v[substr($i, 1, j - 1)] = substr($i, j + 1) }
|
|
if (v["pts"] !~ /^-?[0-9]+$/) { printf "::error::%s: sample %d has no pts (%s)\n", what, NR - 1, v["pts"] > "/dev/stderr"; bad = 1; exit 1 }
|
|
pts[NR - 1] = v["pts"]; dur[NR - 1] = v["duration"]; key[NR - 1] = (v["flags"] ~ /K/) }
|
|
END { if (bad) exit 1
|
|
n = NR
|
|
if (n < 2) { printf "::error::%s: fewer than two samples\n", what > "/dev/stderr"; exit 1 }
|
|
p0 = pts[0]; d = pts[1] - p0
|
|
if (d <= 0) { printf "::error::%s: the second sample is not after the first (%s, %s)\n", what, p0, pts[1] > "/dev/stderr"; exit 1 }
|
|
for (i = 0; i < n; i++) {
|
|
if (pts[i] - p0 != i * d) { printf "::error::%s: sample %d is at pts %s, not %d samples of %d ticks after %s\n", what, i, pts[i], i, d, p0 > "/dev/stderr"; exit 1 }
|
|
if (dur[i] ~ /^[0-9]+$/ && dur[i] != d) { printf "::error::%s: sample %d lasts %s ticks, not %d\n", what, i, dur[i], d > "/dev/stderr"; exit 1 }
|
|
if (key[i]) printf "%d ", i
|
|
} }')
|
|
want=$(tr '\n' ' ' < plan-v.txt)
|
|
echo "$g $f key frames: $keys"
|
|
[ "$keys" = "$want" ] || { echo "::error::$g $f: key frames at $keys; the plan says $want"; exit 1; }
|
|
ffmpeg -v error -xerror -i "$tmp/floor.mp4" -f null -
|
|
echo "$g $f: the floor reads as one AV1 track of 200 frames, a key frame at each piece start"
|
|
done )
|
|
done
|
|
|
|
licences:
|
|
name: wai-pack · dependency licences
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: linux-arm64
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Install Rust 1.98.0
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
|
|
rustup toolchain install 1.98.0 --profile minimal
|
|
rustup default 1.98.0
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
- name: Install cargo-deny
|
|
shell: bash
|
|
run: cargo install --locked cargo-deny --version 0.19.8
|
|
- name: cargo deny check licenses
|
|
working-directory: wai/wai-pack
|
|
run: cargo deny --locked check licenses
|
|
# deny.toml's MPL-2.0 exception covers cbindgen as wai's build-time tool: it must
|
|
# reach wai-pack through no normal (linked) edge. The second query sees the build
|
|
# edge, so an empty answer from the first is an answer.
|
|
- name: cbindgen is a build dependency only
|
|
shell: bash
|
|
working-directory: wai/wai-pack
|
|
run: |
|
|
set -euo pipefail
|
|
err=$(mktemp)
|
|
if ! linked=$(cargo tree --locked -e normal --target all -i cbindgen 2>"$err"); then
|
|
grep -q "did not match any packages" "$err" || { cat "$err"; exit 1; }
|
|
linked=""
|
|
fi
|
|
if [ -n "$linked" ]; then
|
|
echo "::error::cbindgen is a linked dependency of wai-pack; its MPL-2.0 exception covers a build tool only"
|
|
echo "$linked"
|
|
exit 1
|
|
fi
|
|
cargo tree --locked -e normal,build --target all -i cbindgen | grep -q '^cbindgen v' || { echo "::error::cbindgen not found as wai's build dependency"; exit 1; }
|
|
echo "cbindgen is a build dependency only"
|
|
# The `wai` binary's HTTP commands with their TLS client (the cli_tls feature:
|
|
# rustls and the operating system's trust store), under wai-rs's own deny.toml: the
|
|
# same allow-list, over the binary's features on the hosts it is built for.
|
|
- name: cargo deny check licenses (the wai binary's TLS client)
|
|
working-directory: wai/wai-rs
|
|
run: cargo deny --locked check licenses
|