ci: backend-agnostic integration tests, per-backend skip visibility, and artifact-based coverage #414
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Background
PR #349 moved the
coveragejob to a self-hosted KVM runner. During review, the following improvements were identified but deferred to keep the PR scope manageable.Tasks
1. Backend-agnostic integration tests
Integration tests should not assume a specific backend. Currently:
test_orchestrator_docker_*with Docker-specific assumptions baked into fixtures and networkingtest_sandbox_escape.pycarries@skip_unless_docker()even though the Firecracker backend is fully Docker-independent at runtime (Docker is only a build-time dep for the gateway image — confirmed: the Firecracker gateway runs in a microVM via SSH, not a Docker container)setUpClassreadsBOT_BOTTLE_BACKENDalready, but the fixture layer (networking, container/VM lifecycle) needs abstractionGoal: each integration test reads
BOT_BOTTLE_BACKENDand exercises the full test via whatever backend is specified. Backend-specific skip guards should check capability (e.g./dev/kvmaccessible) not Docker availability.2. Explicit skip visibility per backend
When running the integration suite, skipped backends should be surfaced clearly — not silent no-ops inside test output. A preflight step per backend job should print a pass/fail capability check so a missing backend shows up as a distinct skipped/cancelled job in CI rather than hidden
unittest.skiplines.3. Coverage via artifact combination (deferred from #349)
Instead of re-running tests inside the
coveragejob, each test job should:coverage runand upload the resulting.coveragefile as an artifactcoveragejob downloads all artifacts, runscoverage combine, thendiff_coverage.pyThis eliminates the double test-run and makes coverage a pure aggregation step. Requires
actions/upload-artifact+actions/download-artifactin each job and a reworkedcoveragejob.Related
docs/decisions/0004-coverage-policy.md