Engine-shell canary lanes: SpiderMonkey nightly + JSC trunk + Deno-ca… #9
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| DENO_VERSION: "2.9.5" | |
| WASM_TOOLS_VERSION: "1.247.0" | |
| jobs: | |
| core: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Dev parity is linux-arm64; ubuntu-24.04 (x64) is deliberately part | |
| # of the matrix — CI is the project's first non-arm validation. | |
| runner: [ubuntu-24.04, ubuntu-24.04-arm] | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true # third_party/component-model: testgen + conformance corpus | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: wasm-tools@${{ env.WASM_TOOLS_VERSION }} | |
| - uses: denoland/setup-deno@v2 | |
| with: | |
| deno-version: ${{ env.DENO_VERSION }} | |
| # --- Rust suites ------------------------------------------------------- | |
| - name: cargo build (workspace) | |
| run: cargo build --workspace | |
| - name: cargo test (translator-shim, bindgen) | |
| run: cargo test -p translator-shim -p bindgen | |
| - name: build the translator shim (wasm32) | |
| # Every Deno suite below loads this artifact; order matters. | |
| run: cargo build -p translator-shim --target wasm32-unknown-unknown --release | |
| # --- Guest fixtures + corpus -------------------------------------------- | |
| - name: build example guest components | |
| # examples/guests/build/ is gitignored; the runtime e2e suites and | |
| # ct-runner's fixture tests need it. wasmtime CLI is optional in | |
| # build.sh (smoke run only when present) and deliberately not | |
| # installed here. | |
| run: ./examples/build.sh | |
| - name: generate the conformance corpus | |
| # Rehearsal finding: 20 runtime e2e tests self-skip when | |
| # harness/generated is absent — generation must precede the runtime | |
| # suite (318/0/3 with it; 298/0/23 without). | |
| working-directory: harness | |
| run: deno task gen | |
| # --- Deno suites ------------------------------------------------------- | |
| - name: runtime | |
| working-directory: runtime | |
| run: | | |
| deno task check | |
| deno task test | |
| - name: wasi-shims | |
| working-directory: wasi-shims | |
| run: deno task test | |
| - name: ct-runner | |
| working-directory: ct-runner | |
| run: deno task test | |
| - name: conformance (official CM suite, Deno lane) | |
| working-directory: harness | |
| run: deno task conformance | |
| # --- Seeded scheduler runs (spec-allowed nondeterminism) --------------- | |
| - name: runtime under DELTIC_SCHED_SEED=1 | |
| working-directory: runtime | |
| run: deno task test | |
| env: | |
| DELTIC_SCHED_SEED: "1" | |
| - name: runtime under DELTIC_SCHED_SEED=4242 | |
| working-directory: runtime | |
| run: deno task test | |
| env: | |
| DELTIC_SCHED_SEED: "4242" | |
| - name: conformance under DELTIC_SCHED_SEED=1 | |
| working-directory: harness | |
| run: deno task conformance | |
| env: | |
| DELTIC_SCHED_SEED: "1" | |
| # --- Ports (unit suites only; consumer conformance legs need the | |
| # --- polymorph checkouts and are follow-up scope, issue #6) ------------ | |
| - name: ports/webcrypto | |
| working-directory: ports/webcrypto | |
| run: deno test --allow-read tests/ | |
| - name: ports/websocket | |
| working-directory: ports/websocket | |
| run: deno task test | |
| - name: ports/webrtc | |
| working-directory: ports/webrtc | |
| # node-datachannel is a Node-API addon with linux prebuilds for both | |
| # x64 and arm64 (arm64 proven on the dev box; see tools/probes). | |
| # NON-BLOCKING for now: GH Actions runners give libdatachannel no | |
| # usable ICE path for same-host loopback pairing — all | |
| # connection-forming tests time out on BOTH arches while the addon | |
| # loads and non-connection tests pass (first run: 1 passed / | |
| # 8 timed-out). The dev-box lane remains the real gate; issue #21 | |
| # tracks the runner-networking fix (loopback candidates / | |
| # bindAddress / werift). | |
| continue-on-error: true | |
| run: | | |
| deno install --allow-scripts=npm:node-datachannel | |
| deno test -A webrtc.test.ts | |
| browser: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: wasm-tools@${{ env.WASM_TOOLS_VERSION }} | |
| - uses: denoland/setup-deno@v2 | |
| with: | |
| deno-version: ${{ env.DENO_VERSION }} | |
| - name: build the translator shim (wasm32) | |
| run: cargo build -p translator-shim --target wasm32-unknown-unknown --release | |
| - name: generate the conformance corpus | |
| working-directory: harness | |
| run: deno task gen | |
| - name: cache playwright browsers | |
| uses: actions/cache@v4 | |
| with: | |
| # run-lane.ts pins playwright@1.62.1 and a REPO-LOCAL browser cache | |
| # (PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache) — cache that path, | |
| # not ~/.cache/ms-playwright (rehearsal finding). | |
| path: .browser-cache | |
| key: playwright-1.62.1-${{ runner.os }}-${{ runner.arch }} | |
| - name: install browsers (chromium, firefox) | |
| run: PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache deno run -A npm:playwright@1.62.1 install --with-deps chromium firefox | |
| - name: chromium lane (required — expects exact Deno-lane parity) | |
| run: deno run -A tools/browser/run-lane.ts chromium | |
| - name: firefox lane (required — JSPI pref set by the driver) | |
| run: deno run -A tools/browser/run-lane.ts firefox | |
| # WebKit is best-effort per docs/architecture.md §3/§12 (issue #11): the | |
| # lane's expectation overlay | |
| # encodes JSC's missing multi-memory; GH's ubuntu-24.04 matches the ABI | |
| # playwright's WebKit wants, so no library staging should be needed — | |
| # but the lane stays non-blocking until it has a track record. | |
| - name: install webkit (best-effort) | |
| continue-on-error: true | |
| run: PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache deno run -A npm:playwright@1.62.1 install --with-deps webkit | |
| - name: webkit lane (best-effort) | |
| continue-on-error: true | |
| run: deno run -A tools/browser/run-lane.ts webkit | |
| # Every GREEN main ref update ships a prerelease (issue #16's interim | |
| # scheme): tag pre-<shorthash>, shim artifacts + SHA256SUMS. Gated on this | |
| # same run's core matrix + browser job, so "green" is the release | |
| # criterion by construction. Notes: (a) the concurrency group above | |
| # cancels superseded runs, so rapid consecutive pushes release only the | |
| # surviving tip — a cancelled run was never green; (b) continue-on-error | |
| # steps (webrtc on runners #21, webkit lane) do not block a release, by | |
| # the same policy that keeps them non-blocking in CI. | |
| release: | |
| needs: [core, browser] | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| permissions: | |
| contents: write | |
| uses: ./.github/workflows/release.yml |