ci #90
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
| # 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 |