@@ -12,6 +12,7 @@ concurrency:
1212env :
1313 DENO_VERSION : " 2.9.5"
1414 WASM_TOOLS_VERSION : " 1.247.0"
15+ JUST_VERSION : " 1.54.0"
1516
1617jobs :
1718 core :
@@ -33,111 +34,17 @@ jobs:
3334 - uses : Swatinem/rust-cache@v2
3435 - uses : taiki-e/install-action@v2
3536 with :
36- tool : wasm-tools@${{ env.WASM_TOOLS_VERSION }}
37+ tool : wasm-tools@${{ env.WASM_TOOLS_VERSION }},just@${{ env.JUST_VERSION }}
3738 - uses : denoland/setup-deno@v2
3839 with :
3940 deno-version : ${{ env.DENO_VERSION }}
4041
41- # --- Rust suites -------------------------------------------------------
42- - name : cargo build (workspace)
43- run : cargo build --workspace
44- - name : cargo test (translator-shim, bindgen)
45- run : cargo test -p translator-shim -p bindgen
46- - name : build the translator shim (wasm32)
47- # Every Deno suite below loads this artifact; order matters.
48- run : cargo build -p translator-shim --target wasm32-unknown-unknown --release
49-
50- # --- Guest fixtures + corpus --------------------------------------------
51- - name : build example guest components
52- # examples/guests/build/ is gitignored; the runtime e2e suites and
53- # ct-runner's fixture tests need it. wasmtime CLI is optional in
54- # build.sh (smoke run only when present) and deliberately not
55- # installed here.
56- run : ./examples/build.sh
57- - name : generate the conformance corpus
58- # Rehearsal finding: 20 runtime e2e tests self-skip when
59- # harness/generated is absent — generation must precede the runtime
60- # suite (318/0/3 with it; 298/0/23 without).
61- working-directory : harness
62- run : deno task gen
63-
64- # --- Pinned engine-shell lanes (required; issue #22 follow-up) ---------
65- # Per-push/PR SpiderMonkey + JSC coverage at fixed, sha256-verified
66- # pins (tools/shell/pins.json) — NOT the always-moving nightly/trunk
67- # channels, which stay findings-only canaries in canary.yml. Both are
68- # `required: true` overlays; a deviation here exits 1 and fails this
69- # job (tools/shell/run-lane.ts's `exp.required ? 1 : 0` tail).
70- - name : fetch SpiderMonkey pinned (Firefox 153.0 jsshell)
71- run : deno run -A tools/shell/fetch.ts sm-pinned
72- - name : SpiderMonkey pinned lane (required)
73- run : deno run -A tools/shell/run-lane.ts sm-pinned
74- - name : fetch JSC pinned (rev 318852@main, x64 only)
75- # No arm64 channel for jsc-built-products (or its repo-owned mirror
76- # of this exact rev) — fetch.ts refuses cleanly on other arches.
77- if : runner.arch == 'X64'
78- run : deno run -A tools/shell/fetch.ts jsc-pinned
79- - name : JSC pinned lane (required, x64 only)
80- if : runner.arch == 'X64'
81- run : deno run -A tools/shell/run-lane.ts jsc-pinned
82-
83- # --- Deno suites -------------------------------------------------------
84- - name : runtime
85- working-directory : runtime
86- run : |
87- deno task check
88- deno task test
89- - name : wasi-shims
90- working-directory : wasi-shims
91- run : deno task test
92- - name : ct-runner
93- working-directory : ct-runner
94- run : deno task test
95- - name : release bundle (embedder artifact gate)
96- run : deno test -A tools/release-bundle/bundle_test.ts
97- - name : conformance (official CM suite, Deno lane)
98- working-directory : harness
99- run : deno task conformance
100-
101- # --- Seeded scheduler runs (spec-allowed nondeterminism) ---------------
102- - name : runtime under DELTIC_SCHED_SEED=1
103- working-directory : runtime
104- run : deno task test
105- env :
106- DELTIC_SCHED_SEED : " 1"
107- - name : runtime under DELTIC_SCHED_SEED=4242
108- working-directory : runtime
109- run : deno task test
110- env :
111- DELTIC_SCHED_SEED : " 4242"
112- - name : conformance under DELTIC_SCHED_SEED=1
113- working-directory : harness
114- run : deno task conformance
115- env :
116- DELTIC_SCHED_SEED : " 1"
117-
118- # --- Ports (unit suites only; consumer conformance legs need the
119- # --- polymorph checkouts and are follow-up scope, issue #6) ------------
120- - name : ports/webcrypto
121- working-directory : ports/webcrypto
122- run : deno test --allow-read tests/
123- - name : ports/websocket
124- working-directory : ports/websocket
125- run : deno task test
126- - name : ports/webrtc
127- working-directory : ports/webrtc
128- # node-datachannel is a Node-API addon with linux prebuilds for both
129- # x64 and arm64 (arm64 proven on the dev box; see tools/probes).
130- # NON-BLOCKING for now: GH Actions runners give libdatachannel no
131- # usable ICE path for same-host loopback pairing — all
132- # connection-forming tests time out on BOTH arches while the addon
133- # loads and non-connection tests pass (first run: 1 passed /
134- # 8 timed-out). The dev-box lane remains the real gate; issue #21
135- # tracks the runner-networking fix (loopback candidates /
136- # bindAddress / werift).
137- continue-on-error : true
138- run : |
139- deno install --allow-scripts=npm:node-datachannel
140- deno test -A webrtc.test.ts
42+ # The job body lives in the `gha` just module (one workflow job = one
43+ # `gha::` recipe, so `just ci` is exactly CI); step-level rationale
44+ # lives on the root-justfile recipes it composes. Suite order,
45+ # arch-conditional lanes (jsc-pinned is x64-only) and the tolerated
46+ # webrtc suite (issue #21) are all encoded there.
47+ - run : just gha::core
14148
14249 browser :
14350 runs-on : ubuntu-24.04
@@ -164,44 +71,24 @@ jobs:
16471 - uses : Swatinem/rust-cache@v2
16572 - uses : taiki-e/install-action@v2
16673 with :
167- tool : wasm-tools@${{ env.WASM_TOOLS_VERSION }}
74+ tool : wasm-tools@${{ env.WASM_TOOLS_VERSION }},just@${{ env.JUST_VERSION }}
16875 - uses : denoland/setup-deno@v2
16976 with :
17077 deno-version : ${{ env.DENO_VERSION }}
17178
172- - name : build the translator shim (wasm32)
173- run : cargo build -p translator-shim --target wasm32-unknown-unknown --release
174- - name : generate the conformance corpus
175- working-directory : harness
176- run : deno task gen
177-
17879 - name : cache playwright browsers
17980 uses : actions/cache@v4
18081 with :
18182 # run-lane.ts pins playwright@1.62.1 and a REPO-LOCAL browser cache
18283 # (PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache) — cache that path,
183- # not ~/.cache/ms-playwright (rehearsal finding).
84+ # not ~/.cache/ms-playwright (rehearsal finding). The recipe's
85+ # install step below restores into it.
18486 path : .browser-cache
18587 key : playwright-1.62.1-${{ runner.os }}-${{ runner.arch }}
186- - name : install browsers (chromium, firefox)
187- run : PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache deno run -A npm:playwright@1.62.1 install --with-deps chromium firefox
188-
189- - name : chromium lane (required — expects exact Deno-lane parity)
190- run : deno run -A tools/browser/run-lane.ts chromium
191- - name : firefox lane (required — JSPI pref set by the driver)
192- run : deno run -A tools/browser/run-lane.ts firefox
19388
194- # WebKit is best-effort per docs/architecture.md §3/§12 (issue #11): the
195- # lane's expectation overlay
196- # encodes JSC's missing multi-memory; GH's ubuntu-24.04 matches the ABI
197- # playwright's WebKit wants, so no library staging should be needed —
198- # but the lane stays non-blocking until it has a track record.
199- - name : install webkit (best-effort)
200- continue-on-error : true
201- run : PLAYWRIGHT_BROWSERS_PATH=$PWD/.browser-cache deno run -A npm:playwright@1.62.1 install --with-deps webkit
202- - name : webkit lane (best-effort)
203- continue-on-error : true
204- run : deno run -A tools/browser/run-lane.ts webkit
89+ # shim + corpus + browser install (--with-deps) + the chromium/firefox
90+ # required lanes + the best-effort webkit lane, per the recipes.
91+ - run : just gha::browser
20592
20693 # Every GREEN main ref update ships a prerelease (issue #16's interim
20794 # scheme): tag pre-<shorthash>, shim artifacts + SHA256SUMS. Gated on this
0 commit comments