[PR #38] [MERGED] ci: build/test/benchmark harness + CI workflow (extracted from #37) #39

Closed
opened 2026-10-15 12:47:47 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/gst-wayland-display/pull/38
Author: @JBailes
Created: 6/21/2026
Status: ✅ Merged
Merged: 8/16/2026
Merged by: @JBailes

Base: stable ← Head: ci/test-harness


📝 Commits (3)

  • 4c36305 ci: add the build/test/benchmark harness and its CI workflow
  • 126b594 ci: move benchmark/ into the harness PR; fix unit phase on CPU runners
  • 6203c19 test: add GPU-free unit tests exercised by the harness unit phase

📊 Changes

10 files changed (+996 additions, -3 deletions)

View changed files

➕ .github/workflows/harness.yml (+50 -0)
➕ benchmark/README.md (+141 -0)
➕ benchmark/bench-e2e.py (+155 -0)
➕ benchmark/conv-timing.patch (+66 -0)
➕ benchmark/run-conv-timing.sh (+48 -0)
➕ ci/README.md (+54 -0)
➕ ci/harness.sh (+297 -0)
📝 wayland-display-core/src/comp/input.rs (+45 -0)
📝 wayland-display-core/src/utils/allocator/mod.rs (+89 -3)
📝 wayland-display-core/src/utils/video_info.rs (+51 -0)

📄 Description

What

Extracts the build/test/benchmark harness and its CI workflow out of the Vulkan NV12 encode PR (#37) so the reusable test/CI infrastructure can be reviewed and merged on its own, shrinking #37 to just the feature.

  • ci/harness.sh — one phased entry point (detect · lint · build · unit · gpu · integration · bench) that detects the GPU(s) present, builds the workspace (default + cuda when an Nvidia GPU is present), runs the tests, and prints a single pass/fail summary. It encodes the bare-box environment knowledge: LIBCLANG_PATH for bindgen, XDG_RUNTIME_DIR for the compositor, render-node→vendor detection, per-vendor encoder elements.
  • ci/README.md — harness docs (phases, vendor matrix, host prerequisites).
  • .github/workflows/harness.yml — runs ci/harness.sh lint build unit on a GitHub-hosted runner (in the ghcr.io/games-on-whales/gstreamer container); the full gpu/integration/bench matrix runs on a self-hosted gpu runner, gated by vars.GPU_RUNNER == 'true'.

Why separate

The harness is reusable infrastructure that's valuable independent of the Vulkan feature: on a CPU-only runner it exercises lint + build + the existing unit tests (the repo had no build/unit CI before — only rust-format.yml). The GPU/bench phases self-skip when there's no render node, so this is safe to land first.

Scope (what's intentionally NOT here)

The feature-specific pieces the gpu/bench phases drive — gst-plugin-wayland-display/tests/encode.rs and benchmark/ — call into the Vulkan NV12 code (waylanddisplaycore::utils::vulkan_nv12::supported_nv12_modifiers, etc.) and would not compile on stable, so they stay in #37. The harness self-skips them until they exist. #37 can rebase onto this and drop these three files (they're byte-identical to its versions, so the rebase is clean).

Verification

This PR's own harness.yml run is the proof: ci/harness.sh lint build unit against stable in the gstreamer container. The harness-gpu job stays inert (no GPU_RUNNER).

Follow-up (not in this PR): rust-format.yml is now subsumed by the harness lint phase and could be removed.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/gst-wayland-display/pull/38 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/21/2026 **Status:** ✅ Merged **Merged:** 8/16/2026 **Merged by:** [@JBailes](https://github.com/JBailes) **Base:** `stable` ← **Head:** `ci/test-harness` --- ### 📝 Commits (3) - [`4c36305`](https://github.com/games-on-whales/gst-wayland-display/commit/4c363052f86a3c00bb381130be3f79f69dfe0709) ci: add the build/test/benchmark harness and its CI workflow - [`126b594`](https://github.com/games-on-whales/gst-wayland-display/commit/126b59472fa3e329dfa46a9ddb164eac0c64dbd3) ci: move benchmark/ into the harness PR; fix unit phase on CPU runners - [`6203c19`](https://github.com/games-on-whales/gst-wayland-display/commit/6203c19e075cee33a0735fb32ab1914f8e3af69a) test: add GPU-free unit tests exercised by the harness unit phase ### 📊 Changes **10 files changed** (+996 additions, -3 deletions) <details> <summary>View changed files</summary> ➕ `.github/workflows/harness.yml` (+50 -0) ➕ `benchmark/README.md` (+141 -0) ➕ `benchmark/bench-e2e.py` (+155 -0) ➕ `benchmark/conv-timing.patch` (+66 -0) ➕ `benchmark/run-conv-timing.sh` (+48 -0) ➕ `ci/README.md` (+54 -0) ➕ `ci/harness.sh` (+297 -0) 📝 `wayland-display-core/src/comp/input.rs` (+45 -0) 📝 `wayland-display-core/src/utils/allocator/mod.rs` (+89 -3) 📝 `wayland-display-core/src/utils/video_info.rs` (+51 -0) </details> ### 📄 Description ## What Extracts the **build/test/benchmark harness and its CI workflow** out of the Vulkan NV12 encode PR (#37) so the reusable test/CI infrastructure can be reviewed and merged on its own, shrinking #37 to just the feature. - **`ci/harness.sh`** — one phased entry point (`detect · lint · build · unit · gpu · integration · bench`) that detects the GPU(s) present, builds the workspace (default + `cuda` when an Nvidia GPU is present), runs the tests, and prints a single pass/fail summary. It encodes the bare-box environment knowledge: `LIBCLANG_PATH` for bindgen, `XDG_RUNTIME_DIR` for the compositor, render-node→vendor detection, per-vendor encoder elements. - **`ci/README.md`** — harness docs (phases, vendor matrix, host prerequisites). - **`.github/workflows/harness.yml`** — runs `ci/harness.sh lint build unit` on a GitHub-hosted runner (in the `ghcr.io/games-on-whales/gstreamer` container); the full `gpu/integration/bench` matrix runs on a self-hosted `gpu` runner, gated by `vars.GPU_RUNNER == 'true'`. ## Why separate The harness is reusable infrastructure that's valuable independent of the Vulkan feature: on a CPU-only runner it exercises **lint + build + the existing unit tests** (the repo had no build/unit CI before — only `rust-format.yml`). The GPU/bench phases **self-skip** when there's no render node, so this is safe to land first. ## Scope (what's intentionally NOT here) The feature-specific pieces the `gpu`/`bench` phases drive — `gst-plugin-wayland-display/tests/encode.rs` and `benchmark/` — call into the Vulkan NV12 code (`waylanddisplaycore::utils::vulkan_nv12::supported_nv12_modifiers`, etc.) and would not compile on `stable`, so they **stay in #37**. The harness self-skips them until they exist. #37 can rebase onto this and drop these three files (they're byte-identical to its versions, so the rebase is clean). ## Verification This PR's own `harness.yml` run is the proof: `ci/harness.sh lint build unit` against `stable` in the gstreamer container. The `harness-gpu` job stays inert (no `GPU_RUNNER`). Follow-up (not in this PR): `rust-format.yml` is now subsumed by the harness `lint` phase and could be removed. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/gst-wayland-display#39
No description provided.