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/**' # joule-moq's receipt tests pin leaves, roots and signatures copied from WAI's # jwp-conformance corpus, and run every leaf, group and object vector in it: # a change there must re-run them. - 'wai/jwp-conformance/**' - '.github/workflows/joule-code-conformance.yml' push: branches: - main paths: - 'joule-code/**' # joule-moq's receipt tests pin leaves, roots and signatures copied from WAI's # jwp-conformance corpus, and run every leaf, group and object vector in it: # a change there must re-run them. - 'wai/jwp-conformance/**' - '.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.98.0 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: 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 # joule-moq's QUIC transport and its example compile only with `quic`. Named # here so they stay built and tested whatever the workspace's other members # happen to enable; this also runs tests/wai_jwp_corpus.rs, every leaf, group # and object vector of wai/jwp-conformance through the crate. - name: joule-moq with the QUIC transport, every target working-directory: joule-code/joule-code-rs run: cargo test -p joule-moq --features quic --all-targets - 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