open-standards/.github/workflows/joule-code-conformance.yml
Transaction Science f5e87f3437
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
ci: bootstrap rustup in-workflow — the runner image ships no Rust
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]>
2026-07-25 13:23:57 -04:00

63 lines
2.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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