test(iso): exercise installer UI in QEMU - #118
Conversation
Add scheduled GUI acceptance coverage that drives the auto-launched bootc-installer via AT-SPI, installs to a virtual disk, and verifies the installed system boots. Assisted-by: GPT-5.6 Terra via GitHub Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
❌ Plain Install E2E lts (stable) — FAILED
|
✅ Plain Install E2E lts (dev) — PASSED
|
❌ Plain Install E2E dakota (dev) — FAILED
|
✅ Plain Install E2E dakota (stable) — PASSED
|
❌ Plain Install E2E stable (stable) — FAILED
|
❌ LUKS End-to-End Test stable (stable) — FAILED
|
❌ LUKS End-to-End Test stable (dev) — FAILED
|
❌ Plain Install E2E stable (dev) — FAILED
|
❌ Plain Install E2E lts (stable) — FAILED
|
❌ Plain Install E2E dakota (dev) — FAILED
|
❌ LUKS End-to-End Test stable (stable) — FAILED
|
❌ Plain Install E2E stable (dev) — FAILED
|
❌ LUKS End-to-End Test stable (dev) — FAILED
|
❌ Plain Install E2E stable (stable) — FAILED
|
hanthor
left a comment
There was a problem hiding this comment.
Reviewed the diff, the new scripts/atspi-installer-driver.py, the gui-e2e justfile recipe, and the test suite.
Assessment: solid, real test infrastructure, not tautological.
disk_mentions_target/find_disk_togglecorrectly guard against matching a partition (/dev/vda1) instead of the whole device, and against clicking a sibling control outside the matching row — both are exercised with genuine negative tests (test_disk_toggle_never_selects_a_sibling_control,test_disk_match_requires_the_whole_device_name).classify_pagepriority ordering (failure over completion, etc.) and_confirm_install's check that the confirmation page actually names the selected disk are meaningful safety assertions, not restatements of the implementation.- Failure-path tests (
--check-dependencies, missing typelib, AT-SPI init failure) confirm clean exits with diagnostics rather than tracebacks — good coverage of the "guest doesn't have what we need" case. - The DEBUG-only gating of
toolkit-accessibility/GTK_MODULES=atk-bridgeis verified to never leak outside theDEBUG=1guard (test_auto_launched_installer_enables_atspi_only_in_debug_builds), which matters since this touches the production desktop entry code path. - Harness timing is reasonable:
poll_interval=1sdefault, configurablestartup-timeout/timeout; the only hardcoded sleep is a 5s shutdown grace period aftersystem_powerdown, which is justified and minor.
On CI: the check runs show several Plain E2E/LUKS E2E (stable channel) failures. I checked test-plain-install.yml/test-luks-install.yml history on main directly — both fail on a very similar cadence independent of this PR (e.g. runs on 8/11, 8/4, 7/28, 7/21 all failing on main with no relation to this branch), consistent with the repo's documented "active fisherman regression" on these channels. Python Unit Tests and ShellCheck are green. I don't read the E2E failures as caused by this PR.
No blocking concerns. Approving.
Generated by Claude Code
Native dracut images lacked squashfs, loop, and ISO9660 drivers, so QEMU could not mount the live image. Refresh generated skill indexes for the current catalog date. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitHub runners validate generated dates in UTC. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
❌ LUKS End-to-End Test lts (stable) — FAILED
|
❌ LUKS End-to-End Test lts (dev) — FAILED
|
❌ LUKS End-to-End Test dakota (stable) — FAILED
|
❌ LUKS End-to-End Test dakota (dev) — FAILED
|
❌ LUKS End-to-End Test stable (stable) — FAILED
|
❌ LUKS End-to-End Test stable (dev) — FAILED
|
Signed-off-by: sec-check[bot] <sec-check[bot]@users.noreply.github.com> (cherry picked from commit b3b559ee9cb2176e2752c522cd4012401e87526b)
Signed-off-by: sec-check[bot] <sec-check[bot]@users.noreply.github.com>
❌ Plain Install E2E lts (dev) — FAILED
|
❌ Plain Install E2E dakota (stable) — FAILED
|
❌ LUKS End-to-End Test lts (dev) — FAILED
|
❌ Plain Install E2E stable (stable) — FAILED
|
❌ LUKS End-to-End Test lts (stable) — FAILED
|
❌ LUKS End-to-End Test dakota (dev) — FAILED
|
❌ LUKS End-to-End Test dakota (stable) — FAILED
|
❌ Plain Install E2E lts (stable) — FAILED
|
❌ Plain Install E2E dakota (dev) — FAILED
|
❌ LUKS End-to-End Test stable (stable) — FAILED
|
❌ Plain Install E2E stable (dev) — FAILED
|
❌ LUKS End-to-End Test stable (dev) — FAILED
|
Signed-off-by: sec-check[bot] <sec-check[bot]@users.noreply.github.com>
Signed-off-by: sec-check[bot] <sec-check[bot]@users.noreply.github.com>
❌ Plain Install E2E lts (dev) — FAILED
|
❌ LUKS End-to-End Test stable (stable) — FAILED
|
✅ Plain Install E2E lts (stable) — PASSED
|
❌ LUKS End-to-End Test stable (dev) — FAILED
|
❌ LUKS End-to-End Test lts (dev) — FAILED
|
❌ LUKS End-to-End Test dakota (dev) — FAILED
|
❌ LUKS End-to-End Test lts (stable) — FAILED
|
❌ Plain Install E2E stable (dev) — FAILED
|
❌ LUKS End-to-End Test dakota (stable) — FAILED
|
❌ Plain Install E2E dakota (dev) — FAILED
|
❌ Plain Install E2E dakota (stable) — FAILED
|
❌ Plain Install E2E stable (stable) — FAILED
|












Summary
Validation
pre-commit run --all-filespython3 -m pytest tests/ -qactionlint .github/workflows/scheduled-gui-installer.ymlI am using an agent and I take responsibility for this PR