Skip to content

Point historical deltic links at the canonical repo name #112

Point historical deltic links at the canonical repo name

Point historical deltic links at the canonical repo name #112

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
# The whole job body lives in the justfile (`just gha::<job>`), so `just ci`
# is exactly CI; the workflow only provisions the environment.
jobs:
rust-checks:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
run: rustup show active-toolchain || rustup toolchain install
- uses: Swatinem/rust-cache@v2
with:
shared-key: rust-checks
cache-all-crates: true
# PR branches restore but never save, so they don't evict main's
# caches under the repository cap.
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Install dependencies
run: ./scripts/setup.sh
env:
SKIP_NODE: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: just gha::rust-checks
conformance:
runs-on: ubuntu-latest
# Headroom over the warm-path duration: a cold cargo cache rebuilds
# the suite, driver, and tls-component from scratch.
timeout-minutes: 40
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
run: rustup show active-toolchain || rustup toolchain install
- uses: Swatinem/rust-cache@v2
with:
shared-key: conformance
cache-all-crates: true
save-if: ${{ github.ref == 'refs/heads/main' }}
- 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; the justfile's _ct-tools
# recognizes the stamped install and does not repeat it.
uses: polymorph-components/polymorph-test/actions/setup@9f9e4d544b90e3321ac0572be92c57339b963d34
with:
tools: component-test-cli
- uses: pnpm/action-setup@v4
with:
version: 10.34.5
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Install Deno
uses: denoland/setup-deno@v2
with:
deno-version: "2.9.5"
# Explicit restore/save instead of setup-node's `cache: pnpm`:
# setup-node restores on the exact lockfile hash only; the
# restore-keys prefix reuses the previous store and refetches only
# what changed.
- name: Resolve pnpm store path
id: pnpm-store
run: echo "path=$(pnpm store path)" >>"$GITHUB_OUTPUT"
- name: Restore pnpm store
id: pnpm-cache
uses: actions/cache/restore@v4
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: pnpm-store-v2-${{ runner.os }}-${{ hashFiles('conformance/driver-ct/polyengine/pnpm-lock.yaml', 'js/componentize/wpt/parity/pnpm-lock.yaml') }}
restore-keys: pnpm-store-v2-${{ runner.os }}-
- name: Install dependencies
run: ./scripts/setup.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Save right after the installs, not at job end: a failing
# conformance run on main should not force the next run to rebuild.
# PR branches restore but never save, so they don't evict main's
# caches under the repository cap. `pnpm store prune` drops entries
# no longer referenced by the two package trees, so the saved
# store does not grow across dependency and pin bumps.
- name: Prune and save pnpm store
if: github.ref == 'refs/heads/main' && steps.pnpm-cache.outputs.cache-hit != 'true'
run: pnpm store prune
- uses: actions/cache/save@v4
if: github.ref == 'refs/heads/main' && steps.pnpm-cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: pnpm-store-v2-${{ runner.os }}-${{ hashFiles('conformance/driver-ct/polyengine/pnpm-lock.yaml', 'js/componentize/wpt/parity/pnpm-lock.yaml') }}
# The WPT parity Chromium leg always runs Playwright's own build,
# pinned by playwright-core's version in the parity lockfile, so
# losses-chromium.js measures one engine everywhere. The cache key
# follows that lockfile; restore-keys lets a playwright bump start
# from the previous browsers and download only what changed.
- name: Cache Playwright browsers
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('js/componentize/wpt/parity/pnpm-lock.yaml') }}
restore-keys: playwright-${{ runner.os }}-
- name: Install Playwright Chromium
# On a cache hit the install only verifies the browser is present;
# --with-deps (an apt run) is needed only when the browser was
# actually (re)downloaded.
run: |
cd js/componentize/wpt/parity
if [ "${{ steps.playwright-cache.outputs.cache-hit }}" = "true" ]; then
npx playwright-core install chromium
else
npx playwright-core install --with-deps chromium
fi
- run: just gha::conformance-checks
# The polyengine-browser adapter finds the runner's preinstalled Chrome
# via its candidate paths; CHROME_PATH overrides if ever needed.
# Presentation, not verdict: the just recipe above already gated
# the same aggregate; this re-runs it 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:` ref
# against the pin.
- name: Publish the conformance matrix
if: always() && hashFiles('conformance/driver-ct/results/*.jsonl') != ''
uses: polymorph-components/polymorph-test/actions/aggregate@9f9e4d544b90e3321ac0572be92c57339b963d34
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: Upload conformance matrix
if: always()
uses: actions/upload-artifact@v4
with:
name: conformance-matrix
path: conformance/driver-ct/results/matrix.md
if-no-files-found: ignore