Some checks failed
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Failing after 3s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Failing after 4s
wai cross-architecture byte-equality / windows-x86_64 (pull_request) Failing after 16s
WAI conformance / cargo-class corpora · windows (pull_request) Failing after 10s
WAI conformance / cross-arch byte-equality · windows (pull_request) Failing after 9s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 51s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Failing after 18s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Failing after 1m31s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 2m27s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 59s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Failing after 14s
WAI conformance / cross-arch byte-equality · macos (pull_request) Failing after 19s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 30s
WAI conformance / cross-arch byte-equality · linux (pull_request) Failing after 14s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Failing after 1m6s
First real CI run after enabling Actions went 14/19 red. Root cause, run
down rather than guessed: the docker-executor runners (linux, linux-arm64,
windows) use `catthehacker/ubuntu:act-22.04`, which carries node/curl/git
but no Rust — `docker run … which cargo rustc rustup` returns nothing. The
`macos` runner is a *host* executor on the dev box where cargo exists,
which is exactly why the same `cargo-class corpora` job was green on macos
and red on every other arch.
Both Rust-setup styles in the repo assumed a compiler was already present:
- raw `rustup toolchain install …` (wai-conformance, wai-neural-e2e)
- `dtolnay/rust-toolchain` (wai-byte-equality, jouleclaw-public-surface,
joule-code-conformance) — which is *not* a fix here: the action itself
shells out to `rustup`, so it fails identically on an image without it.
wai-byte-equality already used dtolnay and failed the same way; that is
what ruled the action out.
Every Rust job now bootstraps rustup itself, which works on both executor
kinds: on the docker image it installs via rustup-init; on the macOS host
it finds the existing rustup once ~/.cargo/bin is on PATH (launchd's PATH
omits it). Proven in the actual runner image before writing it —
`docker run catthehacker/ubuntu:act-22.04` + rustup-init installed 1.97.1
and compiled a binary clean.
Scope: this fixes the *toolchain* step for all six Rust jobs. Jobs with
further environment needs (wai-neural-e2e pulls a CPU torch + onnxruntime
stack) may surface their own next failure — that is the following layer,
not this one. The PR's own CI run is the verification.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
63 lines
2.2 KiB
YAML
63 lines
2.2 KiB
YAML
name: joule-code conformance gate
|
||
|
||
# Enforces the Joule Code conformance contract on every change: the reference
|
||
# library must build and pass its tests, and the published C1–C4 wire vectors
|
||
# must round-trip (SPEC §8). "Conformant = round-trips the vectors" — checked,
|
||
# not asserted.
|
||
|
||
on:
|
||
pull_request:
|
||
paths:
|
||
- 'joule-code/**'
|
||
- '.github/workflows/joule-code-conformance.yml'
|
||
push:
|
||
branches:
|
||
- main
|
||
paths:
|
||
- 'joule-code/**'
|
||
- '.github/workflows/joule-code-conformance.yml'
|
||
|
||
jobs:
|
||
conformance:
|
||
name: Build + round-trip C1-C4 vectors
|
||
runs-on: linux
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
# Bootstrap rustup: the docker runner image ships no Rust, and
|
||
# dtolnay/rust-toolchain cannot help — it calls `rustup`, which is absent.
|
||
- name: Install Rust 1.97.1
|
||
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.97.1
|
||
rustup toolchain install 1.97.1 --profile minimal
|
||
rustup default 1.97.1
|
||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||
|
||
- name: Cache cargo
|
||
uses: actions/cache@v4
|
||
with:
|
||
path: |
|
||
~/.cargo/registry
|
||
~/.cargo/git
|
||
joule-code/joule-code-rs/target
|
||
key: joule-code-${{ runner.os }}-${{ hashFiles('joule-code/joule-code-rs/Cargo.lock') }}
|
||
|
||
- name: Reference library tests
|
||
working-directory: joule-code/joule-code-rs
|
||
run: cargo test --workspace
|
||
|
||
- name: Round-trip the v1 conformance pack (C1-C4)
|
||
working-directory: joule-code/joule-code-rs
|
||
run: |
|
||
set -e
|
||
out="$(cargo run -q -p joule-code-conformance -- verify ../conformance/v1)"
|
||
echo "$out"
|
||
# The pack must pass with zero failures.
|
||
echo "$out" | grep -Eq '0 failed' || { echo "::error::conformance pack reported failures"; exit 1; }
|
||
|
||
- name: L3 JouleClaw binding example builds + tests
|
||
working-directory: joule-code/examples/l3-jouleclaw
|
||
run: cargo test
|