Skip to content

[Visual Test] Label preflight skips Lavapipe screenshot capture #946

Description

@MichaelFisher1997

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghotfixstalevisual-testIssues from automated visual regression tests

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions