Skip to content

polyengine 0.3.0 (the deltic rename); @polymorph/webrtc-datachannels 0.3.0 #266

polyengine 0.3.0 (the deltic rename); @polymorph/webrtc-datachannels 0.3.0

polyengine 0.3.0 (the deltic rename); @polymorph/webrtc-datachannels 0.3.0 #266

Workflow file for this run

name: Conformance
# The conformance suite on the polymorph:test harness (see
# conformance/README.md), structured as build-once/run-many: the `build`
# job compiles every artifact the suite executes (the two suite
# components and their composed builds, the driver, the reference peer,
# signalingd, and the component-test CLI) and hands them to the runner
# jobs as a tarball artifact, so the Rust dependency tree is compiled —
# and cached — exactly once per run.
#
# The `matrix` job runs the loopback targets (wasmtime, composed,
# polyengine-deno, polyengine-browser — the full solo+pair suite each) and the
# interop directions (every implementation against the libwebrtc
# reference peer in both orders, the reference self-pair, and the direct
# implementation pairs — the pair-only suite), aggregates every stream
# against the committed lockfiles and target manifests, and diffs the
# committed matrices. The `shadow-lab` job runs the pair corpus over a
# routed, non-loopback path inside the Shadow network simulator
# (deterministic, no root) and gates on its aggregate's exit code.
#
# The netns lab (`just conformance::netns <scenario>`) — the
# higher-fidelity real-kernel environment with STUN/TURN/NAT candidate
# paths — is workstation-only and is not exercised in CI; Shadow
# provides CI's non-loopback coverage.
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
# Compile everything the runner jobs execute and upload it as one
# tarball artifact. This is the only job in this workflow with a cargo
# cache.
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install Rust toolchain
run: rustup show active-toolchain || rustup toolchain install
- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: conformance-build
# Save only on main: PR jobs restore main's cache but never
# save, so PR branches don't multiply cache entries toward the
# repository cap.
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Install dependencies
run: SKIP_NETNS_LAB=1 ./scripts/setup.sh
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Install the component-test tools at the pinned revision
# Owns the rev derivation, the rev-keyed tools cache, the
# install, and the pins gate; conformance::_ct-tools recognizes
# the stamped install and does not repeat it.
uses: polymorph-components/polymorph-test/actions/setup@38bfedf2b989522b82ddce5320fc1557a2f61461
with:
tools: component-test-cli
- name: Build conformance artifacts
run: just gha::conformance-build
# Tar (rather than upload the paths directly) to preserve the
# executable bits, which upload-artifact's zip archive drops.
- name: Pack artifacts
run: |
tar czf /tmp/conformance-build.tar.gz \
target/release/rtc-ct-driver \
target/release/conformance-reference-peer \
target/debug/conformance-signalingd \
target/ct-tools/bin/component-test \
target/ct-tools/.rev \
target/wasm32-wasip2/release/conformance_guest_ct.wasm \
target/wasm32-wasip2/release/conformance_guest_pair_ct.wasm \
target/wasm32-wasip2/release/composed
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: conformance-build
path: /tmp/conformance-build.tar.gz
retention-days: 1
# Run the loopback targets and the interop directions against the
# prebuilt artifacts, aggregate, and diff the committed matrices. No
# Rust compilation happens here, so no cargo cache.
matrix:
needs: build
runs-on: ubuntu-latest
# WebRTC handshakes can hang; every case is individually bounded,
# so a stuck run fails in minutes — cap the job as the backstop.
timeout-minutes: 45
steps:
- name: Checkout code
uses: actions/checkout@v5
# The polyengine-browser leg's page driver runs under Node (playwright
# against the runner image's Chrome; no engine flag anywhere).
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
cache-dependency-path: conformance/driver-ct/polyengine/package-lock.json
# The polyengine legs run the suite runtime-linked — polyengine-deno under
# stock Deno, polyengine-browser inside Chromium — no engine flag (see
# conformance/driver-ct/polyengine/README.md).
- name: Set up Deno (the polyengine legs; stock, no flags)
uses: denoland/setup-deno@v2
with:
deno-version: "2.9.5"
# Runtime dependencies only (the polyengine legs' module graphs and npm
# trees are materialized by their own just recipes). The netns lab
# never runs in CI, so its apt packages are skipped.
- name: Install dependencies
run: SKIP_NETNS_LAB=1 ./scripts/setup.sh
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: conformance-build
- name: Unpack artifacts
run: tar xzf conformance-build.tar.gz
- name: Run the conformance matrices
run: just gha::conformance-matrix
# Presentation, not verdict: the just recipes above already gated
# the same aggregates; these re-run them through component-test's
# composite action for the job summary and finding annotations,
# with the prebuilt CLI so aggregation semantics cannot skew from
# the pin. The action's cargo-lock input polices the `uses:` refs
# against the pin.
- name: Publish the conformance matrix
if: always() && hashFiles('conformance/driver-ct/results/*.jsonl') != ''
uses: polymorph-components/polymorph-test/actions/aggregate@38bfedf2b989522b82ddce5320fc1557a2f61461
with:
lock: conformance/guest-ct/tests.lock
manifest: conformance/driver-ct/targets.toml
results: |
wasmtime=conformance/driver-ct/results/wasmtime.jsonl
composed=conformance/driver-ct/results/composed.jsonl
polyengine-deno=conformance/driver-ct/results/polyengine-deno.jsonl
polyengine-browser=conformance/driver-ct/results/polyengine-browser.jsonl
summary-title: Conformance matrix
cli: target/ct-tools/bin/component-test
cargo-lock: Cargo.lock
- name: Publish the interop conformance matrix
if: always() && hashFiles('conformance/driver-ct/results/*.jsonl') != ''
uses: polymorph-components/polymorph-test/actions/aggregate@38bfedf2b989522b82ddce5320fc1557a2f61461
with:
lock: conformance/guest-pair-ct/tests.lock
manifest: conformance/driver-ct/targets-interop.toml
results: |
reference=conformance/driver-ct/results/reference.jsonl
wasmtime-x-reference=conformance/driver-ct/results/wasmtime-x-reference.jsonl
reference-x-wasmtime=conformance/driver-ct/results/reference-x-wasmtime.jsonl
polyengine-deno-x-reference=conformance/driver-ct/results/polyengine-deno-x-reference.jsonl
reference-x-polyengine-deno=conformance/driver-ct/results/reference-x-polyengine-deno.jsonl
polyengine-browser-x-reference=conformance/driver-ct/results/polyengine-browser-x-reference.jsonl
reference-x-polyengine-browser=conformance/driver-ct/results/reference-x-polyengine-browser.jsonl
wasip3-guest-x-reference=conformance/driver-ct/results/wasip3-guest-x-reference.jsonl
reference-x-wasip3-guest=conformance/driver-ct/results/reference-x-wasip3-guest.jsonl
wasmtime-x-polyengine-deno=conformance/driver-ct/results/wasmtime-x-polyengine-deno.jsonl
polyengine-deno-x-wasmtime=conformance/driver-ct/results/polyengine-deno-x-wasmtime.jsonl
wasmtime-x-wasip3-guest=conformance/driver-ct/results/wasmtime-x-wasip3-guest.jsonl
wasip3-guest-x-wasmtime=conformance/driver-ct/results/wasip3-guest-x-wasmtime.jsonl
summary-title: Interop conformance matrix
cli: target/ct-tools/bin/component-test
cargo-lock: Cargo.lock
- name: Upload conformance results
if: always()
uses: actions/upload-artifact@v4
with:
name: conformance-results
path: |
conformance/driver-ct/results/*.jsonl
conformance/driver-ct/results/matrix.md
conformance/driver-ct/results/matrix-interop.md
if-no-files-found: warn
# Run the Shadow lab against the prebuilt artifacts. Shadow ships no
# prebuilt binary, so it is built once by the shadow-build workflow and
# published to the `shadow-dev` prerelease; this job downloads that
# binary instead of rebuilding (see scripts/download-shadow.sh).
shadow-lab:
needs: build
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Download Shadow from release
env:
GH_TOKEN: ${{ github.token }}
run: ./scripts/download-shadow.sh
# Runtime dependencies only; the peers arrive prebuilt in the
# artifact tarball.
- name: Install dependencies
run: SKIP_NETNS_LAB=1 ./scripts/setup.sh
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: conformance-build
- name: Unpack artifacts
run: tar xzf conformance-build.tar.gz
- name: Run the Shadow lab
run: just gha::shadow-lab
- name: Upload Shadow results
if: always()
uses: actions/upload-artifact@v4
with:
name: conformance-shadow-results
path: |
conformance/driver-ct/results/*-shadow.jsonl
conformance/driver-ct/results/matrix-shadow.md
if-no-files-found: warn