randomparity / randomparity/kdive

Epic: live-test framework — reusable harness for live local-libvirt testing

Open
#1,289 0 comments 0 reactions 0 assignees View on GitHub
area:core-platform type:epic
Dominant language
Python
Stars
0
Forks
0
Avg merge
1h 26m
Merged PRs (30d)
311

Description

## Goal

Give the `live_vm` test tier the shared, reusable harness the `live_stack` tier
already has, and make the live tests actually run in CI. Today every `live_vm`
provider test re-derives the same boot/wait/teardown sequence (copy-pasted
domain XML, three panic-loop copies, ~14 `libvirt.open` sites), and the
environment knowledge that makes them pass lives only in one test file and in
maintainer memory — so each new live test relearns it. The `live-vm` CI job is
`workflow_dispatch`-only, stages no image and sets no env, so it skips even when
triggered: the product's boot→crash→introspect boundary has no automated gate.

**Design:** `docs/design/2026-07-18-live-test-framework.md` · **ADR:** `docs/adr/0386-live-test-framework-runner-topology.md`

## Decisions

1. A thin, arch-parameterized `boot_throwaway_domain` harness is the single way
to boot a throwaway libvirt domain, wait (`active`/`panic`/`ssh`), and tear it
down. libvirt mode is a per-test parameter (session vs system), not a pin.
2. The `live_vm` marker spans two families — throwaway-domain (the harness) and
provisioned-System (live stack + S3). Additive `live_vm_throwaway` /
`live_vm_provisioned` sub-markers under the bare marker; a fail-loud preflight
fails the job on missing env for a declared family instead of skipping green.
3. `live_vm_tcg` rides the existing live-stack spine (ADR-0353), not the new
harness; needing no `/dev/kvm`, it runs on a hosted `ubuntu-latest` runner
with the compose backends + S3.
4. Arch-additive runner topology: hosted TCG for breadth; native-KVM on per-arch
self-hosted Rocky Linux 10 runners for depth — `[self-hosted, kvm, x64]` now,
`[self-hosted, kvm, ppc64le]` as the drop-in target. ppc64le native KVM is the
primary goal the design must not block; x86_64 is the cost-effective PoC.
5. The self-hosted nightly must run the provisioned-System family natively; the
self-hosted job stays on `schedule` + `workflow_dispatch`, never fork PRs.

## Sub-issues

| Sub | Issue | Depends on |
|-----|-------|------------|
| A | #1290 live_vm harness + environment contract | — |
| B | #1291 self-hosted Rocky 10 KVM runner (codified, arch-parameterized) | A |
| C | #1292 guest-image + debuginfo provisioning | A |
| D | #1293 CI wiring — TCG on hosted; finish self-hosted job; fail-loud preflight | A, B, C |
| E | #1294 migrate + prune live_vm tests onto the harness | A |
| F | #1295 discoverability — guide + AGENTS.md pointer + runbook | A–E |

## Non-goals

- No change to the `live_stack` HTTP tier (already factored well).
- No database migration (test infrastructure only).
- Standing up the ppc64le runner is out of scope; the design must not block it.

## Proof

- After A + E: no duplicated boot boilerplate; `-m live_vm` still selects both
families; the `test-live` recipe is unaffected.
- After D: the TCG gate runs on a PR; the self-hosted nightly runs both families
and fails loud on missing env.

Contributor guide

Open the contributing guide

Research direction

Start with docs/design/2026-07-18-live-test-framework.md and docs/adr/0386-live-test-framework-runner-topology.md, then follow sub-issues #1290–#1295 in dependency order. Confirm the stated proof: shared boot boilerplate is removed, -m live_vm still selects both families, the hosted TCG gate runs on PRs, and the self-hosted nightly fails loudly when required environment is missing.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, linux, python
Domain
ci-cd, infrastructure, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.