fangorn/sunshine-qemu
public
ref:main
CI: Linux build + headless QEMU integration job on Anvil #9
open
Opened by cole.christensen@gmail.com
Pull requests
Will close (1)
Links
CI: Linux build + headless QEMU integration job on Anvil
Parent: #1. Start once the #2 E2E harness exists; can land alongside #3.
Context
- Upstream Sunshine CI is GitHub Actions (
.github/workflows/ci-linux.ymletc.), which doesn’t run on Anvil. Leave those files untouched so upstream diffs stay clean. Add Anvil CI config separately; check the Anvil docs oranvil ci --helpfor the pipeline file format and location. - Online Anvil runners seen 2026-09-12:
DESKTOP-12GQBKK(linux x86_64) andcarl(linux aarch64). Check withanvil runner list --org fangorn. Confirm whether the runner has/dev/kvmand/dev/dri; the job must adapt to what’s there.
Tasks
- Job
build: configure with-DSUNSHINE_ENABLE_QEMU=ON -DBUILD_TESTS=ON -DBUILD_DOCS=OFF, build, runtests/test_sunshine. Also a build withSUNSHINE_ENABLE_QEMU=OFF(REQ-CMP-001). - Job
lint: clang-format check on changed files and a doxygen build, matching upstream’s rules. - Job
e2e-shm: install or build QEMU with dbus-display, then runtests/e2e/qemu/e2e_stream.shwith software encoding and the shm path. Use KVM when present, TCG otherwise (longer timeouts). Cache the guest image. - Job
e2e-dmabuf: only on runners with/dev/dri; clearly reported as skipped elsewhere, never silently passed. - Upload test logs, Sunshine logs, QEMU stderr, and the last decoded frame PNG as artifacts on failure.
- After tests, run
anvil requirement status --repo fangorn/sunshine-qemu; the job fails if it fails. - Put the test and traceability commands in a script (
scripts/ci/anvil-test.sh) so a local run matches CI.
Done when
A PR to main runs build, lint and e2e-shm, all green, and a deliberately broken capture makes e2e-shm fail (verified once, noted in the PR). PR Closes #9.
Implemented on phase-1 (PR #2, which now says Closes #9):
.anvil.ymlplusscripts/ci/anvil-test.sh, so a local run matches CI.- Jobs:
- build and unit tests with the backend ON and OFF;
- lint (clang-format on changed files, Doxygen with the upstream config);
- packaging tests;
- E2E on the host (
image: bare, KVM; TCG when there’s no/dev/kvm): shm, qmp, audio, absolute and relative input, reboot; - dmabuf, reported as skipped when there’s no
/dev/dri; anvil requirement status.
- The only online x86_64 runner (DESKTOP-12GQBKK, WSL2) has
/dev/kvmbut no/dev/dri, and its container steps get no devices. - Run
4028172a3eone5117c66: all 6 jobs passed. - Broken capture check: with
convert_rowswapping red and blue,anvil-test.sh e2e shmexits 1 (matched: false). It passes again once restored. This was a local run with the CI script; the patch was never committed.