mirror of
https://github.com/games-on-whales/wolf.git
synced 2026-10-15 13:02:03 +00:00
[PR #399] [CLOSED] ci: add image smoke-test harness + Wayland resolution integration tests #443
Labels
No labels
🧠 1 - 🤖 999
AMD
bug
bug
cannot reproduce
documentation
duplicate
easy
enhancement
enhancement
enhancement
fixed?
fixed?
good first issue
hard
help wanted
Intel
invalid
LXC
medium
moonlight-protocol
Multi GPU
nixos
not a bug
nvidia
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
games-on-whales/wolf#443
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/games-on-whales/wolf/pull/399
Author: @JBailes
Created: 4/24/2026
Status: ❌ Closed
Base:
stable← Head:ci/image-smoke-harness📝 Commits (8)
51edca5ci: add wolf image smoke-test harnesse42d59ctests: wayland resolution-change integration tests36687d2ci: fix workflows for fork-based pull requests011ea85tests: additional Wayland resolution integration casescc346detests: revive [WAYLAND] Catch2 suite under LINK_RUST_WAYLAND=ON09e74e8Merge remote-tracking branch 'origin/stable' into ci/image-smoke-harnessd52547aci: fix smoke-test gst plugin assertionsad2d802ci: drop dead liblibgstwaylanddisplay COPY from runtime stage📊 Changes
8 files changed (+1086 additions, -10 deletions)
View changed files
📝
.github/workflows/docker-build.yml(+23 -0)➕
bin/test-image.sh(+178 -0)➕
bin/tests/lib.sh(+118 -0)➕
docker/tests/smoke.sh(+80 -0)📝
docker/wolf.Dockerfile(+3 -2)📝
src/core/src/platforms/linux/virtual-display/wayland-display.cpp(+29 -0)📝
tests/platforms/linux/wayland-client.hpp(+232 -3)📝
tests/platforms/linux/wayland-display.cpp(+423 -5)📄 Description
Summary
Layered testing for wolf, mirroring games-on-whales/gow#321:
bin/test-image.sh+docker/tests/smoke.shwired intodocker-build.yml. Catches "builds clean but crashes on startup" regressions in every PR.[WAYLAND][resolution]TEST_CASEs intests/platforms/linux/wayland-display.cppthat drive a real Wayland client against the virtual display and assert what the client actually observes when Wolf changes the streamed resolution at runtime.[WAYLAND]Catch2 suite underLINK_RUST_WAYLAND=ON. The tag had been dark since the gstreamer-plugin refactor removed the legacy free-function declarations fromcore/virtual-display.hppand grew NEW-signature entry points that theLINK_RUST_WAYLAND=ONimpl hadn't caught up to. This PR forward-declares the legacy API test-locally, adds the missing NEW-signature linker stubs + input-class destructors in the RUST-wayland impl, and relaxes a handful of assertions that assumed hardware DRM / a client-setmax_size. Net result: all 12[WAYLAND]tests compile and pass.Image-smoke layer (
bin/test-image.sh)Three sub-layers, all run against the just-built image:
docker inspect: image present,/entrypoint.shis the entrypoint,org.opencontainers.image.sourcelabel set, all six Moonlight ports declaredEXPOSE./etc/cont-init.d/*.shscript inherited from the GOW base image as root, then exits. Catches regressions in user/device/nvidia setup.docker/tests/smoke.sh) —/wolf/wolfand/wolf/fake-udevpresent and ldd-clean;fake-udev --helpruns; the customgst-plugin-waylanddisplayis present inGST_PLUGIN_PATHand loads viagst-inspect-1.0 waylanddisplay;Xwaylandon PATH,/opt/gow/startup-app.shstaged, key Dockerfile-ENV vars survive cont-init.Shared helpers in
bin/tests/lib.shbind-mount at/smoke-common, mirroring the gow convention. CI wiring:docker-build.yml's Build step gainsload: ${{ steps.prep.outputs.push != 'true' }}so fork PRs still end up with a locally-tagged image for the harness. A new Smoke-test step runs after build.Catch2
[WAYLAND][resolution]testsExtends the existing
tests/platforms/linux/wayland-client.hppscaffolding and appends ten new TEST_CASEs tagged[WAYLAND][resolution].Client-side plumbing added to
wayland-client.hpp:OutputEvent+ToplevelConfigureEventtypes withTSQueues onWClientStatewl_outputlistener bound in the registry callback (geometry / mode / done / scale / name / description)xdg_toplevellistener bound inw_display_create_windowdrain_output_events,drain_toplevel_configure_events,latest_mode,latest_geometry,w_roundtrip_nrender_node = "software"for CI portability.New TEST_CASEs (via
make_resolution_harness()):wl_output.mode.refreshmax_sizeclamps configure after resolution changeThese tests exercise the same regression path as games-on-whales/gst-wayland-display#27 — covering gstreamer → Rust → Wayland → client in both repos so either side can localise a regression.
Reviving
[WAYLAND]underLINK_RUST_WAYLAND=ONThree surgical changes to make the entire
[WAYLAND]tag compile + pass:wayland-client.hppfor the legacy free-function API (which lives insrc/core/.../wayland-display.cppbut isn't declared in the production header). Defaultrender_node = "software"for sandbox portability.src/core/src/platforms/linux/virtual-display/wayland-display.cppfor the NEW-signaturecreate_wayland_display(gst_element_ptr, string)andget_wayland_socket_namethatlibwolf_runner.sonow references, plus= defaultdestructors forWaylandMouse/WaylandKeyboard/WaylandTouchScreen(declared in the header but previously only implemented in theLINK_RUST_WAYLAND=OFFimpl). The stubs log a warning and return empty; theLINK_RUST_WAYLAND=ONpath is test-only.Wayland{Mouse,Keyboard}explicitly through the underlying variant type before storing intostd::optional<std::variant<...>>— libstdc++ 14+ no longer chains that conversion implicitly. (b) Relax the[WAYLAND][resolution]cases' configure-size assertions: when the client has not setxdg_toplevel.max_size, the compositor emitsconfigure(0, 0)(xdg-shell's "client picks"), so assertions are onwl_output.modedimensions + configure-arrived rather than configure width/height. Themax_size clampscase setsmax_sizeexplicitly and continues to assert bounds directly. (c)graphic_devicesSizeIs(2)relaxed to accept the software path (empty device list).Verification
Built
libgstwaylanddisplayfrom games-on-whales/gst-wayland-display#27 (the companion fix + Rust-level integration tests) and linked wolftests against it:All 12
[WAYLAND]cases pass. Red-green verified by temporarily re-introducing the earlyreturninwayland-display-core/src/comp/mod.rsapply_video_info— 6 of 10[WAYLAND][resolution]cases go red, confirming the suite catches the regression the companion PR protects against.Deliberate omissions
--variant fedorafor Fedora images; wolf ships only the Ubuntu 25.04 runtime stage.--version/--help, so a launch-smoke would need a tmpfs cfg dir and a kill-timer — fragile as a layer-3 static assertion.Test plan
docker-build.yml, so the build-and-push is itself the first harness run.docker pull ghcr.io/games-on-whales/wolf:edge && ./bin/test-image.sh ghcr.io/games-on-whales/wolf:edge→ expect== PASS ==.[WAYLAND]locally: build wolftests with-DLINK_RUST_WAYLAND=ON,./tests/wolftests '[WAYLAND]'→ expect 12 passing cases.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.