Skip to content

ci

ci #82

Workflow file for this run

# CI tiers per SPEC §10. This is tier 1 (smoke: renders + non-black canvas).
# Key facts (research/webgpu-ci-github.md): WebGPU works on free runners via
# SwiftShader Vulkan, BUT headless Chrome never presents the WebGPU canvas on
# Linux — tests must run HEADED under Xvfb (playwright.config.ts handles the
# headless:false + SwiftShader flags when platform is linux).
# Sharding: add a matrix over --shard=N/M when the corpus outgrows one runner.
name: ci
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
schedule:
# Nightly 04:00 UTC. The SwiftShader smoke suite is ~30 min of wall clock at
# corpus scale (software raster, 95 examples) — far too slow to sit on every
# push during the porting phase. Metal-local is the oracle (SPEC §10); CI is
# the regression net, and once nightly is enough for that.
- cron: '0 4 * * *'
jobs:
checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm build
smoke:
runs-on: ubuntu-latest
# NOT on push (porting-phase policy, 2026-07-28): ~30 min per run at corpus
# scale is too slow to gate a push-per-pair cadence, and every port is already
# verified on Metal locally (smoke + animates + contact sheet) before it lands.
# Runs on PRs, nightly, and on demand (`gh workflow run ci.yml`). Revisit when
# the corpus is complete and pushes drop to a few a month — then per-push is
# cheap insurance again.
# BLOCKING when it does run: the B17 repair resolved the SwiftShader stall
# matrix (run 30261064018). Exceptions: per-example `ciSkip` in examples.json.
if: github.event_name != 'push'
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Install SwiftShader Vulkan + Xvfb
run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers xvfb
- run: npx playwright install chromium --with-deps
- name: Smoke suite (headed Chromium under Xvfb)
run: xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" pnpm test:smoke
env:
CI: 'true'
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-failures
path: test-results/
retention-days: 7