Repository navigation
polyengine 0.3.0 (the deltic rename); @polymorph/webrtc-datachannels 0.3.0 #266
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |