Changed
- E2E CI: custom Docker runner image — the e2e workflow now runs each spec inside a custom container image (
ghcr.io/<repo>/e2e-runner:latest) with Xvfb, herbstluftwm, Node.js 24, and Electron system dependencies pre-installed. The entrypoint starts the virtual display with readiness polling (pollsxdpyinfoandherbstclientevery 200ms, fails after 6s) instead of the previoussleep 1race condition. Eliminates per-runnerapt-get update+apt-get install(~30s per shard × 79 shards). The image is built and pushed to GHCR by.github/workflows/docker-e2e-runner.ymlon Dockerfile changes or manual dispatch.- New:
.github/docker/e2e-runner/Dockerfile(Ubuntu 24.04 base, Xvfb, herbstluftwm, dzen2, x11-xserver-utils, Electron deps, Node.js 24) - New:
.github/docker/e2e-runner/entrypoint.sh(Xvfb + herbstluftwm readiness polling,exec "$@"handoff) - New:
.github/workflows/docker-e2e-runner.yml(build + push to GHCR on Dockerfile changes) - Changed:
.github/workflows/e2e.yml(usescontainer:with the custom image, removedSetup virtual displaystep andactions/setup-node, added npm cache viaactions/cache)
- New:
Documentation
CHANGELOG.mdAGENTS.md: Added CI container image documentation to Automated testing sectionCONTRIBUTING.md: Added CI infrastructure note to Running E2E tests section
Full Changelog: 0.115.2...0.116.0