All checks were successful
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 38s
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Successful in 16s
spec citations resolve / Code cites no section its SPEC lacks (pull_request) Successful in 6s
standards workspaces build + test / arl-rs (pull_request) Successful in 1m16s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 11m7s
standards workspaces build + test / eoc-rs (pull_request) Successful in 2m19s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m37s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 1m16s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m13s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m29s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m27s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m39s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 39s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 4m24s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m29s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 9m59s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 30s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 56s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 2m11s
wai formal verification (integer core) / every harness in one shard (pull_request) Successful in 11s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 12m49s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 17m52s
wai formal verification (integer core) / kani (arith) (pull_request) Successful in 10m19s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 14m47s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 31s
wai formal verification (integer core) / kani (plan) (pull_request) Successful in 7m41s
wai formal verification (integer core) / kani (sound) (pull_request) Successful in 11m5s
wai formal verification (integer core) / kani (stage) (pull_request) Successful in 3m4s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 30m55s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 51s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 2m30s
wai formal verification (integer core) / kani (stage-long) (pull_request) Successful in 23m29s
wai formal verification (integer core) / kani (isqrt512) (pull_request) Successful in 52m3s
wai formal verification (integer core) / kani (integer-core) (pull_request) Successful in 6m1s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 5s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been skipped
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been skipped
WAI energy receipts / energy receipts · macos (pull_request) Successful in 12m43s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m28s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 1m32s
wai-ops differential (nightly) / differential · debug (pull_request) Successful in 2m35s
wai-ops differential (nightly) / differential · release (pull_request) Successful in 3m1s
wai-ops integer operators / linux-x86_64 (pull_request) Successful in 53s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Successful in 29s
wai-ops integer operators / independent checker (Python) (pull_request) Successful in 13s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-ops integer operators / wasm32 under Node (pull_request) Successful in 24s
wai-pack / wai-pack · linux (pull_request) Has been skipped
wai-pack / wai-pack · linux-arm64 (pull_request) Has been skipped
wai-pack / wai-pack · macos (pull_request) Has been skipped
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been skipped
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been skipped
wai-pack / wai-pack · dependency licences (pull_request) Has been skipped
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 23s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m4s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m3s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 6s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been skipped
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been skipped
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m9s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m24s
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 11s
no-vanity-metrics / WAI public text names no comparison (pull_request) Successful in 6s
no-vanity-metrics / WAI public text names no company or product (pull_request) Successful in 5s
no-vanity-metrics / No new orphan source files (pull_request) Successful in 6s
lockfiles / every Cargo.lock is current (pull_request) Successful in 38s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 3m48s
standards workspaces build + test / aac-rs (pull_request) Successful in 4m0s
wai formal verification (integer core) / kani (rans64-t2) (pull_request) Successful in 29m7s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 1m8s
wai-ops integer operators / macos-arm64 (pull_request) Successful in 1m5s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 1m39s
standards workspaces build + test / map-rs (pull_request) Successful in 1m6s
standards workspaces build + test / mesh-rs (pull_request) Successful in 1m7s
tests in CI / every test file is run by a job or listed with its reason (pull_request) Successful in 5s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Successful in 36s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 4m17s
standards workspaces build + test / openpay (pull_request) Successful in 4m38s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 32s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 3m7s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 3m0s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 1m22s
WAI section references / cited sections exist (pull_request) Successful in 26s
workflow hygiene / every workflow supersedes its own queue (pull_request) Successful in 10s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 12m33s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 13m41s
The windows runner is back (cbio-device-0000), so the member the workflow had only sketched in a comment is now a job. It replaces that comment. One job, not one per backend. The member test enumerates every adapter wgpu finds in the one process, and this host exposes five: both of its GPUs through both backends, plus Microsoft's software adapter through DX12. gpu-dx12-10de discrete NVIDIA, DX12 gpu-dx12-8086 integrated Intel, DX12 gpu-vulkan-10de discrete NVIDIA, Vulkan gpu-vulkan-8086 integrated Intel, Vulkan swgpu-dx12-1414 WARP, class Cpu The DX12 keys are the first coverage of the WGSL -> HLSL path (naga): every other member reaches its adapter through Metal or Vulkan. Run on the host before this was written, at this tree: 14 of 14 member tests pass; the adapters found are exactly the declared five; 40 bit-exact certificates, which is five adapters by four pinned corpus digests by both implementations (the per-gate kernel and tile runs); 7 of 7 shader mutants and 3 of 3 tile mutants killed on every one of the five; and the conformance corpus verifies through the member, statevector-equivalence holding, every reject file refused as listed. Two host facts the steps have to carry, both of which would otherwise fail in a way that looks like a code defect: `bash` here resolves to the WindowsApps WSL stub, and the machine PATH holds Git\cmd (git.exe) but not Git\bin (bash.exe). Under WSL the steps would reach none of the Windows GPU drivers, so Git Bash is put on PATH first and the next step refuses to continue unless `uname -s` reports MINGW or MSYS. The runner writes an unsigned .ps1 per step, so the process execution policy is set to Bypass; pwsh rather than Windows PowerShell, whose 5.1 parser rejects the PS7 syntax this repo's scripts use. Not a required status, per the note it replaces. Co-Authored-By: Claude Opus 5 <[email protected]>
397 lines
20 KiB
YAML
397 lines
20 KiB
YAML
name: wai-quantum WebGPU member
|
|
|
|
# The fabric's WebGPU member: one WGSL gate kernel, compiled for every adapter a
|
|
# runner has, certified against the CPU reference's pinned corpus digests. A
|
|
# second implementation, tile runs (the same kernel followed by apply_tile, which
|
|
# applies a run of gates tile by tile in one dispatch), is certified on its own
|
|
# against the same digests, on every adapter and in the browser.
|
|
#
|
|
# Each member job declares the adapters its runner must have in
|
|
# WAI_QUANTUM_WEBGPU_EXPECT. The device test fails if the adapters found differ,
|
|
# and scripts/wai-quantum-webgpu-member.sh fails unless all tests ran, every
|
|
# declared adapter earned one bit-exact certificate per pinned digest, and every
|
|
# declared adapter killed every shader mutant.
|
|
#
|
|
# The GPU jobs then run the quantum conformance corpus through each member
|
|
# (`wai_quantum_vectors verify --webgpu`). wai-rs is built there with
|
|
# --no-default-features: its default feature, `codecs`, links system codec
|
|
# libraries that neither GPU host has, and the corpus needs none of them.
|
|
#
|
|
# The browser job runs the same kernel through a browser's WebGPU, compiled by the
|
|
# browser's own WGSL compiler: wai-web's `quantum_webgpu` bundle in a headless page
|
|
# (wai/quantum-conformance/browser_webgpu.mjs), which must certify a GPU member with
|
|
# the four pinned digests, reproduce every vector and refuse every reject file with
|
|
# its class. It is not a required status until it has been green three runs in a row.
|
|
#
|
|
# The meter (wai/tools/quantum-meter) is wai-quantum's RunMeter over a process's own
|
|
# CPU and GPU energy counters. On the Metal host, where those counters exist, it meters
|
|
# a member's runs and the CPU reference's over windows they resolve, and its test must
|
|
# print what it read; on the software Vulkan host, where they do not, every window must
|
|
# come out unmetered.
|
|
#
|
|
# There is no windows job while the windows runner is offline: a job queued on an
|
|
# offline runner never settles. Add it back from the comment at the end when the
|
|
# runner has survived a reboot.
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'wai/wai-quantum/**'
|
|
- 'wai/quantum-conformance/**'
|
|
- 'wai/tools/quantum-wgsl-check/**'
|
|
# The meter, and the counters it reads.
|
|
- 'wai/tools/quantum-meter/**'
|
|
- 'jouleclaw/jouleclaw-rs/Cargo.toml'
|
|
- 'jouleclaw/jouleclaw-rs/crates/jouleclaw-core/**'
|
|
- 'jouleclaw/jouleclaw-rs/crates/jouleclaw-energy/**'
|
|
- 'wai/wai-rs/src/bin/wai_quantum_vectors.rs'
|
|
# The GPU jobs build wai-rs with the forwarded feature, --locked.
|
|
- 'wai/wai-rs/Cargo.toml'
|
|
- 'wai/wai-rs/Cargo.lock'
|
|
- 'wai/wai-rs/src/lib.rs'
|
|
- 'rust-toolchain.toml'
|
|
# The checks and browser jobs build wai-web with its feature, --locked.
|
|
- 'wai/wai-web/Cargo.toml'
|
|
- 'wai/wai-web/Cargo.lock'
|
|
- 'wai/wai-web/src/quantum_webgpu.rs'
|
|
- 'wai/wai-web/src/lib.rs'
|
|
- 'wai/wai-web/demo/quantum_webgpu*'
|
|
- 'scripts/wai-quantum-webgpu-member.sh'
|
|
- '.github/workflows/wai-quantum-webgpu.yml'
|
|
pull_request:
|
|
paths:
|
|
- 'wai/wai-quantum/**'
|
|
- 'wai/quantum-conformance/**'
|
|
- 'wai/tools/quantum-wgsl-check/**'
|
|
# The meter, and the counters it reads.
|
|
- 'wai/tools/quantum-meter/**'
|
|
- 'jouleclaw/jouleclaw-rs/Cargo.toml'
|
|
- 'jouleclaw/jouleclaw-rs/crates/jouleclaw-core/**'
|
|
- 'jouleclaw/jouleclaw-rs/crates/jouleclaw-energy/**'
|
|
- 'wai/wai-rs/src/bin/wai_quantum_vectors.rs'
|
|
# The GPU jobs build wai-rs with the forwarded feature, --locked.
|
|
- 'wai/wai-rs/Cargo.toml'
|
|
- 'wai/wai-rs/Cargo.lock'
|
|
- 'wai/wai-rs/src/lib.rs'
|
|
- 'rust-toolchain.toml'
|
|
# The checks and browser jobs build wai-web with its feature, --locked.
|
|
- 'wai/wai-web/Cargo.toml'
|
|
- 'wai/wai-web/Cargo.lock'
|
|
- 'wai/wai-web/src/quantum_webgpu.rs'
|
|
- 'wai/wai-web/src/lib.rs'
|
|
- 'wai/wai-web/demo/quantum_webgpu*'
|
|
- 'scripts/wai-quantum-webgpu-member.sh'
|
|
- '.github/workflows/wai-quantum-webgpu.yml'
|
|
|
|
jobs:
|
|
checks:
|
|
name: shader checks · browser build · wasip2 inertness · MSRV
|
|
runs-on: linux
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Install Rust 1.98.0 (wasm32 targets) and 1.97.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 toolchain install 1.97.0 --profile minimal
|
|
rustup default 1.98.0
|
|
rustup target add --toolchain 1.98.0 wasm32-unknown-unknown wasm32-wasip2
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
- name: SPIR-V validator
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
|
|
$SUDO apt-get update -qq
|
|
$SUDO apt-get install -y -qq --no-install-recommends spirv-tools
|
|
- name: The shaders under naga 30.0.1
|
|
shell: bash
|
|
working-directory: wai/tools/quantum-wgsl-check
|
|
run: |
|
|
set -euo pipefail
|
|
cargo run --locked --release -- "$RUNNER_TEMP" 2>&1 | tee "$RUNNER_TEMP/wgsl-check.log"
|
|
grep -qx "quantum-wgsl-check: ok" "$RUNNER_TEMP/wgsl-check.log"
|
|
spirv-val --target-env vulkan1.1 "$RUNNER_TEMP/lanes32.spv"
|
|
spirv-val --target-env vulkan1.1 "$RUNNER_TEMP/lanes32_tile.spv"
|
|
- name: The member builds for a browser
|
|
working-directory: wai/wai-quantum
|
|
run: cargo build --locked --lib --target wasm32-unknown-unknown --no-default-features --features quantum_fabric_webgpu
|
|
- name: The browser bundle builds with the member
|
|
working-directory: wai/wai-web
|
|
run: cargo build --locked --release --target wasm32-unknown-unknown --features quantum_webgpu
|
|
- name: On wasm32-wasip2 the feature is inert
|
|
shell: bash
|
|
working-directory: wai/wai-quantum
|
|
run: |
|
|
set -euo pipefail
|
|
cargo check --locked --lib --target wasm32-wasip2 --features full,quantum_fabric_webgpu
|
|
w="$RUNNER_TEMP/tree-wasip2.txt"; n="$RUNNER_TEMP/tree-native.txt"
|
|
cargo tree --locked --target wasm32-wasip2 --features full,quantum_fabric_webgpu -e normal --prefix none > "$w"
|
|
cargo tree --locked --target x86_64-unknown-linux-gnu --features quantum_fabric_webgpu -e normal --prefix none > "$n"
|
|
grep -q '^wai-quantum ' "$w" || { echo "::error::cargo tree printed no wasip2 tree"; exit 1; }
|
|
grep -q '^wgpu ' "$n" || { echo "::error::the native tree has no wgpu, so this check cannot see it"; exit 1; }
|
|
if grep -q '^wgpu' "$w"; then echo "::error::wgpu is in the wasm32-wasip2 tree"; exit 1; fi
|
|
- name: The package carries the shader
|
|
shell: bash
|
|
working-directory: wai/wai-quantum
|
|
run: |
|
|
set -euo pipefail
|
|
cargo package --locked --list --allow-dirty > "$RUNNER_TEMP/package.txt"
|
|
grep -qx 'src/quantum_fabric/lanes32.wgsl' "$RUNNER_TEMP/package.txt"
|
|
grep -qx 'src/quantum_fabric/lanes32_tile.wgsl' "$RUNNER_TEMP/package.txt"
|
|
- name: MSRV 1.97.0
|
|
working-directory: wai/wai-quantum
|
|
run: cargo +1.97.0 check --locked --lib --features quantum_fabric_webgpu
|
|
# The member's unit tests need no GPU (a failed native wait is fed to the
|
|
# guard as a panicking closure), and only the feature build compiles them.
|
|
- name: The member's unit tests, without a device
|
|
shell: bash
|
|
working-directory: wai/wai-quantum
|
|
run: |
|
|
set -euo pipefail
|
|
cargo test --locked --lib --features quantum_fabric_webgpu -- quantum_fabric_webgpu:: 2>&1 \
|
|
| tee "$RUNNER_TEMP/member-unit.log"
|
|
grep -q '^test quantum_fabric_webgpu::tests::a_failed_native_wait_is_a_typed_loss \.\.\. ok$' \
|
|
"$RUNNER_TEMP/member-unit.log" \
|
|
|| { echo "::error::the member's unit test did not run"; exit 1; }
|
|
|
|
member-software:
|
|
name: member · software Vulkan (linux)
|
|
runs-on: linux
|
|
timeout-minutes: 120
|
|
env:
|
|
WAI_QUANTUM_WEBGPU_EXPECT: swgpu-vulkan-10005
|
|
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: The Vulkan loader and a software Vulkan driver
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
|
|
$SUDO apt-get update -qq
|
|
$SUDO apt-get install -y -qq --no-install-recommends libvulkan1 mesa-vulkan-drivers
|
|
- name: The member's tests
|
|
shell: bash
|
|
run: scripts/wai-quantum-webgpu-member.sh
|
|
# No per-process energy counter exists here: the meter must find none, and a
|
|
# run of the member through it must be unmetered.
|
|
- name: The meter, where its counters do not exist
|
|
shell: bash
|
|
working-directory: wai/tools/quantum-meter
|
|
run: |
|
|
set -euo pipefail
|
|
cargo test --locked -- --nocapture 2>&1 | tee "$RUNNER_TEMP/meter.log"
|
|
grep -q '^test a_members_runs_are_metered_over_a_window_the_counters_resolve \.\.\. ok$' "$RUNNER_TEMP/meter.log" \
|
|
|| { echo "::error::the meter's device test did not run"; exit 1; }
|
|
grep -q '^quantum-meter: the counters are not live here' "$RUNNER_TEMP/meter.log" \
|
|
|| { echo "::error::the meter's device test found no adapter, so it checked nothing"; exit 1; }
|
|
|
|
member-metal:
|
|
name: member · Metal (macos)
|
|
runs-on: macos
|
|
timeout-minutes: 90
|
|
env:
|
|
WAI_QUANTUM_WEBGPU_EXPECT: gpu-metal-0
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
# launchd's PATH omits cargo on the macOS host runner.
|
|
- name: Put cargo on PATH
|
|
shell: bash
|
|
run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
- name: The member's tests
|
|
shell: bash
|
|
run: nice -n 10 scripts/wai-quantum-webgpu-member.sh
|
|
- name: The conformance corpus through the member
|
|
shell: bash
|
|
working-directory: wai/wai-rs
|
|
run: nice -n 10 cargo run --locked --no-default-features --features quantum_fabric_webgpu --bin wai_quantum_vectors -- verify ../quantum-conformance --webgpu
|
|
# The counters exist here. The device test prints a `quantum-meter hardware:` line
|
|
# for each window it read: a figure, or why another process's GPU use left it
|
|
# none. The tool then calibrates both members on one circuit and, where both
|
|
# windows earn a figure, places it.
|
|
- name: The meter on this process's counters
|
|
shell: bash
|
|
working-directory: wai/tools/quantum-meter
|
|
run: |
|
|
set -euo pipefail
|
|
nice -n 10 cargo test --locked --release -- --nocapture 2>&1 | tee "$RUNNER_TEMP/meter.log"
|
|
grep -q '^test a_members_runs_are_metered_over_a_window_the_counters_resolve \.\.\. ok$' "$RUNNER_TEMP/meter.log" \
|
|
|| { echo "::error::the meter's device test did not run"; exit 1; }
|
|
grep -q '^quantum-meter hardware: ' "$RUNNER_TEMP/meter.log" \
|
|
|| { echo "::error::the meter read no window: its counters are not live on this host"; exit 1; }
|
|
nice -n 10 cargo run --locked --release -- --counter-ppm 50000 2>&1 | tee "$RUNNER_TEMP/meter-tool.log"
|
|
grep -q '^quantum-meter: local/cpu-' "$RUNNER_TEMP/meter-tool.log" \
|
|
|| { echo "::error::the tool ran no window on the CPU reference"; exit 1; }
|
|
|
|
member-hw:
|
|
name: member · discrete GPU, Vulkan (jetson-hub)
|
|
runs-on: linux-hw
|
|
timeout-minutes: 150
|
|
env:
|
|
# Set from the key list the first run prints; add any other ICD the host
|
|
# exposes (an integrated GPU, a software driver) as it reports them.
|
|
# The discrete GPU, and the software Vulkan driver the host also has. The wide
|
|
# sizes run on the GPU only.
|
|
WAI_QUANTUM_WEBGPU_EXPECT: gpu-vulkan-10de,swgpu-vulkan-10005
|
|
WAI_QUANTUM_WEBGPU_WIDE: '1'
|
|
CARGO_PROFILE_DEV_DEBUG: '0'
|
|
CARGO_BUILD_JOBS: '8'
|
|
steps:
|
|
- name: Fetch the source
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
want="${{ github.event.pull_request.head.sha || github.sha }}"
|
|
rm -rf src && mkdir src && cd src
|
|
git init -q
|
|
# Fetch the commit itself, not the ref: a later commit on the ref that this
|
|
# workflow's paths do not match would otherwise be fetched instead.
|
|
git fetch -q --depth 1 http://100.64.224.0:3400/Transaction-Science/open-standards.git "$want"
|
|
git checkout -q FETCH_HEAD
|
|
got="$(git rev-parse HEAD)"
|
|
[ "$got" = "$want" ] || { echo "::error::fetched $got, not $want"; exit 1; }
|
|
- name: The member's tests
|
|
shell: bash
|
|
working-directory: src
|
|
run: CARGO_TARGET_DIR="$HOME/hw-target/wai-quantum" nice -n 10 scripts/wai-quantum-webgpu-member.sh
|
|
- name: The conformance corpus through the member
|
|
shell: bash
|
|
working-directory: src/wai/wai-rs
|
|
run: CARGO_TARGET_DIR="$HOME/hw-target/wai-rs" nice -n 10 cargo run --locked --no-default-features --features quantum_fabric_webgpu --bin wai_quantum_vectors -- verify ../quantum-conformance --webgpu
|
|
|
|
browser:
|
|
name: member · browser WebGPU (macos)
|
|
runs-on: macos
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
# launchd's PATH omits cargo on the macOS host runner.
|
|
- name: Put cargo on PATH
|
|
shell: bash
|
|
run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
# The page's file is held to the crate by wai-quantum's tests/fabric_expected.rs:
|
|
# exactly the four certificates of the pinned corpora (gateset, corpus, seed,
|
|
# cases, wide circuits and the digest the CPU computes) and both implementation
|
|
# ids. Editing the file alone, say giving fabric-v1 random-v1's digests so that
|
|
# no circuit wider than one tile runs, fails here.
|
|
- name: The page's pins are the crate's
|
|
shell: bash
|
|
working-directory: wai/wai-quantum
|
|
run: |
|
|
set -euo pipefail
|
|
nice -n 10 cargo test --locked --features quantum_fabric --test fabric_expected 2>&1 | tee "$RUNNER_TEMP/fabric-expected.log"
|
|
grep -q '^test the_browser_legs_pins_are_the_crates \.\.\. ok$' "$RUNNER_TEMP/fabric-expected.log" \
|
|
|| { echo "::error::the pins test did not run"; exit 1; }
|
|
# Pinned to the wasm-bindgen version in wai-web/Cargo.lock: the CLI and the crate
|
|
# must match exactly.
|
|
- name: wasm-bindgen CLI 0.2.127
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
rustup target add wasm32-unknown-unknown
|
|
cargo install --locked wasm-bindgen-cli --version 0.2.127
|
|
- name: The member's bundle
|
|
shell: bash
|
|
working-directory: wai/wai-web
|
|
run: |
|
|
set -euo pipefail
|
|
nice -n 10 cargo build --locked --release --target wasm32-unknown-unknown --features quantum_webgpu
|
|
wasm-bindgen --target web --out-dir demo/pkg-webgpu --out-name wai_quantum_webgpu \
|
|
target/wasm32-unknown-unknown/release/wai_web.wasm
|
|
# Playwright and its headless browser go into the job's temporary directory, not
|
|
# the host's caches. `chromium` is Playwright's name for its engine.
|
|
- name: Playwright 1.60.0 and its headless browser
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
node --version
|
|
pw="$RUNNER_TEMP/playwright"
|
|
mkdir -p "$pw"
|
|
npm install --prefix "$pw" --no-save --no-audit --no-fund [email protected]
|
|
PLAYWRIGHT_BROWSERS_PATH="$pw/browsers" "$pw/node_modules/.bin/playwright" install --only-shell chromium
|
|
echo "PLAYWRIGHT_HOST=$pw/" >> "$GITHUB_ENV"
|
|
echo "PLAYWRIGHT_BROWSERS_PATH=$pw/browsers" >> "$GITHUB_ENV"
|
|
- name: The member in a browser
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
WAI_QUANTUM_WEBGPU_REQUIRE=1 nice -n 10 node wai/quantum-conformance/browser_webgpu.mjs 2>&1 \
|
|
| tee "$RUNNER_TEMP/browser-webgpu.log"
|
|
grep -qE '^browser webgpu: member=local/gpu-webgpu-[0-9a-f]{12} class=gpu certified bit-exact 4 of 4; tiles certified bit-exact 4 of 4; ' \
|
|
"$RUNNER_TEMP/browser-webgpu.log" \
|
|
|| { echo "::error::no GPU member certified bit-exact 4 of 4, per-gate and in tile runs, in the browser"; exit 1; }
|
|
|
|
# Windows reaches both of this host's GPUs through both backends, so one job
|
|
# certifies five adapters rather than one per backend: the member test
|
|
# enumerates every adapter in the one process, and the DX12 keys exercise the
|
|
# WGSL -> HLSL path (naga) that no other member covers. Not a required status.
|
|
member-windows:
|
|
name: member · DX12 and Vulkan (cbio-windows)
|
|
runs-on: windows
|
|
timeout-minutes: 150
|
|
env:
|
|
# The key list this host's first run printed:
|
|
# gpu-dx12-10de discrete NVIDIA, DX12
|
|
# gpu-dx12-8086 integrated Intel, DX12
|
|
# gpu-vulkan-10de discrete NVIDIA, Vulkan
|
|
# gpu-vulkan-8086 integrated Intel, Vulkan
|
|
# swgpu-dx12-1414 Microsoft's software adapter (WARP), class Cpu
|
|
# Adding or removing a driver changes this set, and the member test fails
|
|
# until this line matches it again.
|
|
WAI_QUANTUM_WEBGPU_EXPECT: gpu-dx12-10de,gpu-dx12-8086,gpu-vulkan-10de,gpu-vulkan-8086,swgpu-dx12-1414
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
# The runner writes an unsigned .ps1 per step, which the default policy
|
|
# refuses. pwsh, not Windows PowerShell: the 5.1 parser rejects the PS7
|
|
# syntax this repo's scripts use.
|
|
- name: Allow the runner's generated scripts to run
|
|
shell: pwsh
|
|
run: Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
|
|
# `bash` on this host resolves to the WindowsApps WSL stub, and the machine
|
|
# PATH carries Git\cmd (git.exe) but not Git\bin (bash.exe). Without this
|
|
# every `shell: bash` step below would run under WSL, which reaches none of
|
|
# the Windows GPU drivers.
|
|
- name: Put Git Bash on PATH
|
|
shell: pwsh
|
|
run: |
|
|
$gitBash = 'C:\Program Files\Git\bin'
|
|
if (-not (Test-Path "$gitBash\bash.exe")) { throw "Git Bash is missing at $gitBash" }
|
|
$gitBash | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
- name: The shell is Git Bash, not WSL
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
command -v bash
|
|
# A WSL bash reports Linux; Git Bash reports MINGW or MSYS.
|
|
case "$(uname -s)" in
|
|
MINGW*|MSYS*) ;;
|
|
*) echo "::error::bash is $(uname -s), not Git Bash"; exit 1 ;;
|
|
esac
|
|
- name: The member's tests
|
|
shell: bash
|
|
run: scripts/wai-quantum-webgpu-member.sh
|
|
# wai-rs is built with --no-default-features here for the same reason as the
|
|
# other GPU members: its default `codecs` feature links system codec
|
|
# libraries this host does not have, and the corpus needs none of them.
|
|
- name: The conformance corpus through the member
|
|
shell: bash
|
|
working-directory: wai/wai-rs
|
|
run: cargo run --locked --no-default-features --features quantum_fabric_webgpu --bin wai_quantum_vectors -- verify ../quantum-conformance --webgpu
|