Run CI on a WSL2 runner with the RTX 4070 (#283)
game-maker / gate (push) Successful in 3m18s
game-maker / suite (push) Failing after 14m15s

stein2 should stop carrying the full e2e run. The new runner lives in
the WSL2 distro game-maker-ci on melektaus-atx and uses the same image
and fonts. Its GPU sits behind /dev/dxg and Mesa's d3d12 driver, which
headless chromium cannot reach, so the harness gets a second way to
start the browser.

- GAME_MAKER_BROWSER=wsl starts an invisible Xvfb and an X11 chromium
  on ANGLE/GL. Without the variable, stein2 keeps the headless Vulkan
  launch exactly as before.
- The harness logs the renderer and stops on software rendering.
  Under WSL a missing d3d12 driver falls back to llvmpipe, which still
  offers WebGL 2 and would pass unnoticed.
- The CI image gains xvfb. The font set is unchanged: fc-list gives
  the same 149 fonts with the same hash.
- ci.yml runs both jobs on the new label game-maker-wsl. The stein2
  runner keeps game-maker-ci, so moving back is one line per job.

Findings:
- Wayland on weston reached the GPU too, but drew at about 40 fps and
  let the editor clock stall in long runs (GM_STEPS=1-17: 2 failed).
- Vulkan through a self-built dzn caps ANGLE at ES 2.0 because
  VK_EXT_provoking_vertex is missing, so chromium drops the GPU.
- The flaky check in e2e 41 (#282) fails more often under WSL: two of
  three solo runs were red.

Tests:
- ./check.sh: 195 files, 2823 tests passed
- WSL container, GM_STEPS=1-17: ALL PASSED, 553 checks
- WSL container, full run: 1589 of 1590, the one FAIL is #282
- WSL container, smokes: 24 / 19 / 21 checks
- stein2 headless, e2e 39+40: ALL PASSED, 100 checks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-09-29 20:56:50 +02:00
1 parent 9b5eeaab57
commit 857e23c69b
4 files changed
+125 -21

No files matched your search

+11 -8
View File
@@ -1,13 +1,16 @@
# Runs the whole proof on the Gitea runner: gate, the editor suite and the three example games.
#
# `runs-on: game-maker-ci` picks the image built from tools/ci/Dockerfile. The render device and
# /dev/shm come from the runner's own container.options (/_stacks/git/runner/config.yaml), not
# from here – without them chromium falls back to software WebGL.
# `runs-on: game-maker-wsl` is the runner in the WSL2 distro game-maker-ci on melektaus-atx
# (#283). Its label picks the image built from tools/ci/Dockerfile. The GPU (/dev/dxg and the
# Windows driver libraries), /dev/shm and GAME_MAKER_BROWSER=wsl come from that runner's own
# config.yaml, not from here – without them chromium falls back to software WebGL and the harness
# stops. The runner on stein2 still carries `game-maker-ci` with the same image and its Intel
# GPU; pointing both jobs back at that label moves the runs there again.
#
# Two jobs without `needs:`, so they start together and use both slots of the runner
# (`capacity: 2`, four cores). The gate no longer stands in front of the suite: a lint error used
# to cost the full e2e run before it was reported, and the run reported it after six minutes
# instead of one. Both still have to pass for the push to be green.
# (`capacity: 2`, four cores on either host). The gate no longer stands in front of the suite:
# a lint error used to cost the full e2e run before it was reported, and the run reported it
# after six minutes instead of one. Both still have to pass for the push to be green.
#
# The price is contention: while the gate runs, vitest and chromium share the four cores, and the
# suite measures text widths and frame counts. That is why the gate caps vitest at two workers
@@ -20,7 +23,7 @@ on:
jobs:
gate:
runs-on: game-maker-ci
runs-on: game-maker-wsl
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
@@ -42,7 +45,7 @@ jobs:
php tests/php/releases.test.php
suite:
runs-on: game-maker-ci
runs-on: game-maker-wsl
timeout-minutes: 45
steps:
- uses: actions/checkout@v4