Workflow run
https://github.com/OpenStaticFish/ZigCraft/actions/runs/29725595085
Exact failure output
label with name "run-visual-test" already exists; use `--force` to update its color and description
##[error]Process completed with exit code 1.
There is no build-output.log in the workspace for this run. The workflow failed at step 8, Ensure visual-test label exists; Setup Lavapipe Vulkan and Run menu screenshot capture were then skipped, so the game never started and the log/artifact was never created.
Observed step state:
Ensure visual-test label exists failure
Setup Lavapipe Vulkan skipped
Run menu screenshot capture skipped
Upload build log artifact skipped
Weston itself started successfully at 1280x720 and was terminated after the preflight failure; weston.log contains no compositor initialization error.
Diagnosis
The root cause is the label bootstrap logic in .github/workflows/visual-test.yml:55-68, specifically the second guard and create at .github/workflows/visual-test.yml:62-65:
if ! gh label list --json name --jq '.[].name' | grep -q '^run-visual-test$'; then
gh label create "run-visual-test" \
--description "Run deterministic visual regression workflow on a PR" \
--color "E06C75"
fi
gh label list defaults to 30 results. This repository currently has 41 labels: visual-test is position 21 and run-visual-test is position 41 in the returned order. The unbounded existence check therefore cannot see run-visual-test, concludes that it is missing, and calls gh label create. GitHub rejects that duplicate create, and the step exits with status 1.
This is a workflow preflight failure, not a Vulkan instance/device, swapchain, shader, HomeScreen, or screenshot readback failure. No Zig function in the requested rendering path was reached:
initContext in modules/engine-graphics/src/rhi_vulkan.zig:36-39
- headless
createSwapchain path in modules/engine-graphics/src/vulkan_swapchain.zig:127-174
- menu selection in
src/game/app.zig:268-276
HomeScreen.init in modules/game-ui/src/screens/home.zig:33-41
- screenshot request in
src/game/app.zig:545-556
captureFrame in modules/engine-graphics/src/rhi_vulkan.zig:415-420
requestCapture in modules/engine-graphics/src/vulkan/screenshot.zig:24-87
The workflow currently passes -Dscreenshot-path=screenshot.png at .github/workflows/visual-test.yml:81, not screenshot.ppm. PNG is accepted by detectScreenshotFormat in modules/engine-graphics/src/vulkan/screenshot.zig:262-267; PPM is not. The diagnosis prompt/context should be updated separately so future investigations match the actual workflow.
Failure origin
- File:
.github/workflows/visual-test.yml
- Step:
Ensure visual-test label exists
- Failing command:
gh label create "run-visual-test" at .github/workflows/visual-test.yml:63
- Trigger: paginated
gh label list guard at .github/workflows/visual-test.yml:62
No game-side function originated this failure because the game command at .github/workflows/visual-test.yml:81 was skipped.
Suggested fix
Make label setup idempotent without relying on a paginated list:
- name: Ensure visual-test labels exist
run: |
gh label create "visual-test" \
--description "Issues from automated visual regression tests" \
--color "E06C75" \
--force
gh label create "run-visual-test" \
--description "Run deterministic visual regression workflow on a PR" \
--color "E06C75" \
--force
env:
GH_TOKEN: ${{ secrets.OPENCODE_PAT }}
Alternatively, query each label directly with gh label view <name> before creating it. Merely increasing --limit would work today but can regress again as the label count grows.
Workflow run
https://github.com/OpenStaticFish/ZigCraft/actions/runs/29725595085
Exact failure output
There is no
build-output.login the workspace for this run. The workflow failed at step 8,Ensure visual-test label exists;Setup Lavapipe VulkanandRun menu screenshot capturewere then skipped, so the game never started and the log/artifact was never created.Observed step state:
Weston itself started successfully at 1280x720 and was terminated after the preflight failure;
weston.logcontains no compositor initialization error.Diagnosis
The root cause is the label bootstrap logic in
.github/workflows/visual-test.yml:55-68, specifically the second guard and create at.github/workflows/visual-test.yml:62-65:gh label listdefaults to 30 results. This repository currently has 41 labels:visual-testis position 21 andrun-visual-testis position 41 in the returned order. The unbounded existence check therefore cannot seerun-visual-test, concludes that it is missing, and callsgh label create. GitHub rejects that duplicate create, and the step exits with status 1.This is a workflow preflight failure, not a Vulkan instance/device, swapchain, shader, HomeScreen, or screenshot readback failure. No Zig function in the requested rendering path was reached:
initContextinmodules/engine-graphics/src/rhi_vulkan.zig:36-39createSwapchainpath inmodules/engine-graphics/src/vulkan_swapchain.zig:127-174src/game/app.zig:268-276HomeScreen.initinmodules/game-ui/src/screens/home.zig:33-41src/game/app.zig:545-556captureFrameinmodules/engine-graphics/src/rhi_vulkan.zig:415-420requestCaptureinmodules/engine-graphics/src/vulkan/screenshot.zig:24-87The workflow currently passes
-Dscreenshot-path=screenshot.pngat.github/workflows/visual-test.yml:81, notscreenshot.ppm. PNG is accepted bydetectScreenshotFormatinmodules/engine-graphics/src/vulkan/screenshot.zig:262-267; PPM is not. The diagnosis prompt/context should be updated separately so future investigations match the actual workflow.Failure origin
.github/workflows/visual-test.ymlEnsure visual-test label existsgh label create "run-visual-test"at.github/workflows/visual-test.yml:63gh label listguard at.github/workflows/visual-test.yml:62No game-side function originated this failure because the game command at
.github/workflows/visual-test.yml:81was skipped.Suggested fix
Make label setup idempotent without relying on a paginated list:
Alternatively, query each label directly with
gh label view <name>before creating it. Merely increasing--limitwould work today but can regress again as the label count grows.