open-standards/.github/workflows/wai-ops.yml
Transaction Science 98b5088dfe
Some checks failed
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 3s
no-vanity-metrics / WAI public text names no comparison (pull_request) Successful in 4s
no-vanity-metrics / WAI public text names no company or product (pull_request) Successful in 3s
standards workspaces build + test / arl-rs (pull_request) Successful in 1m10s
standards workspaces build + test / eoc-rs (pull_request) Successful in 1m59s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m30s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 1m9s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m10s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m15s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m19s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m7s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 3m47s
WAI conformance / cargo-class corpora · linux (pull_request) Failing after 1m49s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 14s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 8s
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 51s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 1m54s
wai-ops integer operators / linux-x86_64 (pull_request) Successful in 21s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Successful in 23s
wai-ops integer operators / wasm32 under Node (pull_request) Successful in 19s
wai-ops integer operators / independent checker (Python) (pull_request) Successful in 11s
WAI section references / cited sections exist (pull_request) Successful in 10s
workflow hygiene / every workflow supersedes its own queue (pull_request) Successful in 4s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 14m13s
standards workspaces build + test / jouleclaw-rs (pull_request) Has been cancelled
standards workspaces build + test / aac-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (pull_request) Has been cancelled
standards workspaces build + test / joulecontract-rs (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (pull_request) Has been cancelled
standards workspaces build + test / map-rs (pull_request) Has been cancelled
standards workspaces build + test / mesh-rs (pull_request) Has been cancelled
standards workspaces build + test / openpay (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
wai-ops integer operators / linux-aarch64 (pull_request) Has been cancelled
wai-ops integer operators / macos-arm64 (pull_request) Has been cancelled
wai-ops.yml: the goldens' digest file in the filter; every test on the 32-bit leg
- The goldens compare against wai/neural-conformance/sha256.json, which the
  `paths:` filters did not match (the repo's own matcher said False). Both
  lists now take wai/neural-conformance/**, so a re-pinned digest runs wai-ops.
- The wasip2 leg ran only `vectors verify`, so the unit tests and the goldens
  never ran on a 32-bit target. It now runs `cargo test` under wasmtime in the
  default build (unit and step-8 tests) and with `uncertified` (unit tests,
  goldens, step-8 test), with the wai directory preopened at its own absolute
  path for the files the tests read. Both pass locally under wasmtime.
- The native default-build step runs `cargo test`, not `--lib`, so the step-8
  test and the doc tests that keep an unloaded graph from running are run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 19:31:39 -04:00

229 lines
8.9 KiB
YAML

name: wai-ops integer operators
# The integer operator set (wai/extensions/integer-operators.md), checked on every
# fabric leg the corpus has today. Every leg recomputes every vector file of
# wai/ops-conformance/ from its inputs and requires the committed bytes:
#
# - Linux x86_64, Linux arm64 and macOS arm64, natively, debug and release: the
# unit tests, the goldens (every committed parameter set lowered, loaded and
# decoded through the interpreter to its committed output digest), the step-8
# test and the doc tests, each in the default build and with the `uncertified`
# switch, and `wai-ops vectors verify`, which also re-lowers every set and
# regenerates the whole corpus;
# - WASI (wasm32-wasip2) under wasmtime, a 32-bit target: the same unit tests,
# goldens and step-8 test in both builds, and the same `vectors verify`;
# - a browser's engine (wasm32-unknown-unknown) under Node: the recomputation of
# every vector file;
# - the independent checker, tools/wai_ops_check.py: Python standard library only,
# sharing no code with wai-ops, rewrites every vector file and every lowered graph.
#
# There is no Windows leg: the Windows runner has been offline since 2026-08-28.
# One run per branch at a time. A push supersedes the run before it.
#
# There is one `macos` runner and it is the dev Mac, so every macOS job in this repo
# queues on it; only the newest commit's verdict is wanted, so older runs are
# cancelled. `cancel-in-progress: true` also applies to `main`, which advances by
# merge commits whose tree contains the commits before them.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
paths:
- 'wai/wai-ops/**'
- 'wai/ops-conformance/**'
- 'wai/tools/wai_ops_*.py'
# The text the checker is held to.
- 'wai/extensions/integer-operators.md'
# Every committed parameter set the corpus lowers, and the digests the goldens
# compare against (neural-conformance/sha256.json among them).
- 'wai/neural-conformance/**'
- 'wai/wai-rs/tests/vectors/int_hyper/**'
- 'wai/wai-rs/tests/vectors/int_audio/**'
- 'wai/wai-rs/tests/vectors/int_splat/**'
- 'wai/wai-rs/tests/vectors/int_mlicpp/**'
- 'wai/wai-rs/tests/vectors/int_world/**'
- 'wai/wai-rs/tests/vectors/int_world2/**'
- '.github/workflows/wai-ops.yml'
push:
branches:
- main
paths:
- 'wai/wai-ops/**'
- 'wai/ops-conformance/**'
- 'wai/tools/wai_ops_*.py'
- 'wai/extensions/integer-operators.md'
- 'wai/neural-conformance/**'
- 'wai/wai-rs/tests/vectors/int_hyper/**'
- 'wai/wai-rs/tests/vectors/int_audio/**'
- 'wai/wai-rs/tests/vectors/int_splat/**'
- 'wai/wai-rs/tests/vectors/int_mlicpp/**'
- 'wai/wai-rs/tests/vectors/int_world/**'
- 'wai/wai-rs/tests/vectors/int_world2/**'
- '.github/workflows/wai-ops.yml'
jobs:
native:
name: ${{ matrix.label }}
runs-on: ${{ matrix.os }}
timeout-minutes: 40
strategy:
fail-fast: false
matrix:
include:
- { os: linux, label: linux-x86_64 }
- { os: linux-arm64, label: linux-aarch64 }
- { os: macos, label: macos-arm64 }
steps:
- uses: actions/checkout@v4
# The docker images ship no Rust; 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
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# Without the `uncertified` switch, load step 8 refuses every graph: the default
# build is what a decoder would link before the certifier exists. Its tests show
# that, and the doc tests that a graph runs only once loaded.
- name: Unit, step-8 and doc tests, default build
working-directory: wai/wai-ops
shell: bash
run: cargo test --locked
- name: Unit tests and goldens, debug
working-directory: wai/wai-ops
shell: bash
run: cargo test --locked --features uncertified
- name: Unit tests and goldens, release
working-directory: wai/wai-ops
shell: bash
run: cargo test --locked --release --features uncertified
- name: Every vector file recomputed, every set re-lowered, the corpus regenerated
working-directory: wai/wai-ops
shell: bash
run: cargo run --locked --release --features uncertified --bin wai-ops -- vectors verify ..
wasip2:
name: wasm32-wasip2 (wasmtime)
runs-on: linux
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Rust 1.98.0 with the wasm32-wasip2 target
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 target add wasm32-wasip2
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Install wasmtime 38.0.3
shell: bash
run: |
set -euo pipefail
v=38.0.3
curl --proto '=https' --tlsv1.2 -sSfL -o "$RUNNER_TEMP/wasmtime.tar.xz" \
"https://github.com/bytecodealliance/wasmtime/releases/download/v$v/wasmtime-v$v-x86_64-linux.tar.xz"
tar -C "$RUNNER_TEMP" -xf "$RUNNER_TEMP/wasmtime.tar.xz"
echo "$RUNNER_TEMP/wasmtime-v$v-x86_64-linux" >> "$GITHUB_PATH"
# The tests read committed files through CARGO_MANIFEST_DIR/.., so the wai
# directory is preopened at its own absolute path.
- name: Unit and step-8 tests, default build, under WASI
working-directory: wai/wai-ops
shell: bash
run: |
set -euo pipefail
W=$(cd .. && pwd)
CARGO_TARGET_WASM32_WASIP2_RUNNER="wasmtime run --dir $W::$W" \
cargo test --locked --release --target wasm32-wasip2
- name: Unit tests, goldens and step-8 test, under WASI
working-directory: wai/wai-ops
shell: bash
run: |
set -euo pipefail
W=$(cd .. && pwd)
CARGO_TARGET_WASM32_WASIP2_RUNNER="wasmtime run --dir $W::$W" \
cargo test --locked --release --features uncertified --target wasm32-wasip2
- name: Build the tool for wasm32-wasip2
working-directory: wai/wai-ops
shell: bash
run: cargo build --locked --release --features uncertified --target wasm32-wasip2 --bin wai-ops
- name: Every vector file recomputed, every set re-lowered, the corpus regenerated, under WASI
working-directory: wai
shell: bash
run: |
set -euo pipefail
wasmtime --version
wasmtime run --dir .::/wai wai-ops/target/wasm32-wasip2/release/wai-ops.wasm vectors verify /wai
node:
name: wasm32 under Node
runs-on: linux
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Rust 1.98.0 with the wasm32 target
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 target add wasm32-unknown-unknown
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Build the recomputation for wasm32-unknown-unknown
working-directory: wai/wai-ops/node
shell: bash
run: cargo build --locked --release --target wasm32-unknown-unknown
- name: Every vector file recomputed under Node
working-directory: wai/wai-ops/node
shell: bash
run: node verify.mjs target/wasm32-unknown-unknown/release/wai_ops_node.wasm ../../ops-conformance
checker:
name: independent checker (Python)
runs-on: linux
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
# Standard library only, so it needs nothing installed.
- name: wai_ops_check.py rewrites every vector file and every lowered graph
working-directory: wai
shell: bash
run: python3 -I tools/wai_ops_check.py ops-conformance
- name: Every workflow declares a concurrency group
shell: bash
run: bash scripts/check-workflow-concurrency.sh