Skip to content

Engine-shell canary lanes: SpiderMonkey nightly + JSC trunk + Deno-ca… #9

Engine-shell canary lanes: SpiderMonkey nightly + JSC trunk + Deno-ca…

Engine-shell canary lanes: SpiderMonkey nightly + JSC trunk + Deno-ca… #9

Workflow file for this run

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