test: CI-only podman integration harness#41
Merged
Conversation
Current podman rejects --add-host on a container joining a pod
("network cannot be configured when it is shared with a pod").
Moves alias/hostname add-host emission from run_flags to
pod_create_flags, alongside dns/sysctls, and folds extra_hosts in as
a pod-level key merged into the same add-host set (conflict refused
rather than guessed at).
14e46ca to
8dcfd50
Compare
This was referenced Jul 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a CI-only integration harness that executes compose2pod's output against real podman, closing the gap where every existing test only asserts on the generated script's text. See the design in
planning/changes/2026-07-12.04-integration-harness.md.The harness renders a compose doc via the public
emit_script, runs the generatedrun.shto completion, and asserts behaviorally on exit code + captured output. Assertions are behavioral (not livepodman exec/inspect) because the generated script self-destructs its pod viatrap EXITand runs the target in the foreground underset -eu— so a clean exit already proves pod creation, dependency startup,service_healthygating, completion-gating, and a passing target probe.Seed scenarios (behavioral probes, built to grow)
pg_isreadyhealthcheck) + an app reaching it over the pod-shared127.0.0.1:5432.Isolation from the fast suite and the 100% gate
integrationmarker applied by atryfirstpytest_collection_modifyitemsauto-mark hook (by file location — new scenarios need no boilerplate),addopts = -m 'not integration', andtests/integration/*in coveragerun.omit.just test-integrationrecipe (CLI-m integrationoverrides the default) and a dedicatedubuntu-latestCI job run them; an autouse fixture skips (never fails) when podman is absent.Verification
just test-cistays at 100% (357 passed, 3 deselected);just lint-ciandjust check-planningclean. The scenarios' behavioral green is produced by the newintegrationCI job.