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
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.