Skip to content

Merge pull request #121 from lann/settlement-pump #148

Merge pull request #121 from lann/settlement-pump

Merge pull request #121 from lann/settlement-pump #148

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"
JUST_VERSION: "1.54.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 }},just@${{ env.JUST_VERSION }}
- uses: denoland/setup-deno@v2
with:
deno-version: ${{ env.DENO_VERSION }}
# The job body lives in the `gha` just module (one workflow job = one
# `gha::` recipe, so `just ci` is exactly CI); step-level rationale
# lives on the root-justfile recipes it composes. Suite order and
# arch-conditional lanes (jsc-pinned is x64-only) are all encoded
# there.
- run: just gha::core
browser:
runs-on: ubuntu-24.04
timeout-minutes: 45
# Post-merge only (operator decision, issue #22 follow-up): the
# conformance corpus is engine-shaped, and per-PR/per-push engine
# coverage now comes from the pinned shell lanes in the `core` job
# above (sm-pinned, jsc-pinned) at fixed, sha256-verified pins. The
# browser lanes verify something the shell lanes can't — the embedding
# (real DOM/Worker/fetch globals) plus the SHIPPED-CHANNEL config
# (e.g. Firefox's JSPI pref, which this lane sets explicitly — unlike
# the jsshell, which has JSPI on by default; see
# harness/shell/expectations/sm-pinned.ts) — so they stay as the gate
# for the post-merge prerelease (`release`, below), which is the compat
# matrix for now (revisit when real releases exist).
if: github.event_name == 'push'
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 }},just@${{ env.JUST_VERSION }}
- uses: denoland/setup-deno@v2
with:
deno-version: ${{ env.DENO_VERSION }}
- 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). The recipe's
# install step below restores into it.
path: .browser-cache
key: playwright-1.62.1-${{ runner.os }}-${{ runner.arch }}
# shim + corpus + browser install (--with-deps) + the chromium/firefox
# required lanes + the best-effort webkit lane, per the recipes.
- run: just gha::browser
# 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 (the 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
id-token: write # JSR OIDC publishing (the called workflow requests it)
uses: ./.github/workflows/release.yml