Repository navigation
Point historical deltic links at the canonical repo name #112
Workflow file for this run
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: | |
| 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 |