From d4aa1bfeedb6ae5f3316f48414d5f73c5daceeb5 Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Sun, 7 Jun 2026 02:55:24 -0700 Subject: [PATCH] ci: document that macOS CI can't record (no GL) + non-isolated rule (#190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Investigating #190 on the GitHub macOS runner showed it isn't a render throttle: the runner has no usable OpenGL surface, so a recording host's glfwCreateWindow fails with "Glfw Error 65545: NSGL: Failed to find a suitable pixel format" and init() panics ("can't create window"), rendering zero frames. That zero-frame output is what made content-time gating spin until the wall-clock fallback — the hang #190 describes. Recordings therefore can't run in CI on macOS at all (tutorial videos are made on Windows / real hardware). Document this in the integration-tests step, alongside why isolated mode is safe for the headless suite (every [test] is with_imgui_app — no GL window) and the rule that any future recording-bearing [test] must run in a separate, non-isolated step on a GL-capable runner. No behavior change — the 47 record_*.das are def-main scripts dastest already skips. Refs #190 Co-Authored-By: Claude Opus 4.8 --- .github/workflows/tests.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6c919e6a..9cb5fd44 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -216,6 +216,26 @@ jobs: # port 9090. With it, ports 9090/9091/9092/9093 are independent and # workers don't collide. Expected ~3× wall-time reduction vs sequential. # + # ISOLATED MODE IS SAFE HERE BECAUSE EVERY [test] IS HEADLESS. They all + # run via with_imgui_app, which spawns daslang-live under --headless: an + # ImGui context with a CPU font atlas, NO GLFW window / GL context. So 4 + # parallel workers cost only CPU. + # + # RECORDINGS CANNOT RUN IN CI ON macOS. A recording drives a real windowed + # GL host (with_recording_app, for APNG capture), but the GitHub macOS + # runner has no usable OpenGL surface — glfwCreateWindow fails with + # "Glfw Error 65545: NSGL: Failed to find a suitable pixel format", so the + # host's init() panics ("can't create window") and renders nothing. (This, + # not a render throttle, is the root of dasImgui #190: a recording produced + # zero frames, so content-time gating spun until the wall-clock fallback.) + # Tutorial videos are therefore recorded on Windows / real hardware, never + # in CI. The 47 record_*.das under tests/integration are def-main driver + # SCRIPTS (not [test]s), so dastest skips them here regardless. + # + # If a recording-bearing [test] is ever added AND a GL-capable runner is + # available, it must run in a SEPARATE step WITHOUT --isolated-mode (serial, + # one window at a time): parallel GL windows fight for the GPU. + # # DASLIVE_HV_LOG=stderr: redirect libhv's logger to stderr so we see # event-loop/accept diagnostics in CI output. Env propagates to the # spawned daslang-live subprocess via popen_argv's inherited env.