Per the policy now in docs/skills/gitops-argocd/image-policy.md and AGENTS.md:
do not use RPM/dnf — not at runtime, not in a Containerfile, not in a builder
stage. When the org does not publish the image we need, propose adding one to
fsdk-containers.
Runtime installs bypass the registry allowlist entirely (scripts/check_gitops_policy.py
only inspects image: lines), so they are an ungoverned supply-chain ingress that no
lint run flags. They also make pipelines unreproducible and hard-down whenever an
upstream mirror is.
Already done
Swapped to ghcr.io/projectbluefin/lab-runner:latest (verified contents: bash, curl,
git, jq, python3.13, kubectl) and the dnf line deleted:
service-catalog-pipeline.yaml — also fixed a latent bug: it called kubectl before installing kubernetes-client
run-service-tests.yaml (git-sync initContainer)
knuckle-qa-pipeline.yaml (source clone step)
provision-flatcar-vm.yaml (wait-for-flatcar-ready)
Remaining — needs an org image, not a swap
lab-runner does not contain skopeo, oras, tar, yq, PyYAML or podman (verified
2026-08-21), so these cannot be fixed by changing the image alone.
| File |
Installs |
Blocker |
knuckle-qa-pipeline.yaml |
buildah |
org publishes distroless buildah — needs multi-stage COPY or init container (no shell) |
provision-flatcar-vm.yaml |
qemu-img bzip2 buildah |
org publishes distroless qemu-img + buildah; bzip2 unresolved |
build-bluefin-migration-containerdisk.yaml |
qemu-img jq buildah + ISO deps |
same |
bluefin-server-boot-test.yaml |
zstd podman |
no org image |
iso-e2e-pipeline.yaml, iso-build-e2e-pipeline.yaml |
ISO build toolchain |
candidate for a dedicated fsdk-containers ISO builder image |
run-service-tests.yaml |
python3-pytest openssl |
pytest/openssl absent from lab-runner |
homelab-print-device.yaml |
avahi-daemon avahi-utils (apt) |
no org image |
Out of scope
run-gnome-tests.yaml, run-kde-tests.yaml, run-flatcar-tests.yaml and
run-systemd-container-tests.yaml pip install inside the guest/DUT being
tested (qecore, dogtail, behave). That is provisioning the device under test, not
runner tooling — changing it would change what is being tested.
Suggested order
- Propose an
fsdk-containers image for the ISO/disk toolchain (qemu-img, buildah, zstd, xorriso) — unblocks the most files at once.
- Convert
buildah/qemu-img call sites to multi-stage COPY --from against the existing distroless org images.
- Add
pytest/openssl to a test-runner image or vendor them.
Per the policy now in
docs/skills/gitops-argocd/image-policy.mdandAGENTS.md:do not use RPM/dnf — not at runtime, not in a Containerfile, not in a builder
stage. When the org does not publish the image we need, propose adding one to
fsdk-containers.Runtime installs bypass the registry allowlist entirely (
scripts/check_gitops_policy.pyonly inspects
image:lines), so they are an ungoverned supply-chain ingress that nolint run flags. They also make pipelines unreproducible and hard-down whenever an
upstream mirror is.
Already done
Swapped to
ghcr.io/projectbluefin/lab-runner:latest(verified contents: bash, curl,git, jq, python3.13, kubectl) and the
dnfline deleted:service-catalog-pipeline.yaml— also fixed a latent bug: it calledkubectlbefore installingkubernetes-clientrun-service-tests.yaml(git-sync initContainer)knuckle-qa-pipeline.yaml(source clone step)provision-flatcar-vm.yaml(wait-for-flatcar-ready)Remaining — needs an org image, not a swap
lab-runnerdoes not contain skopeo, oras, tar, yq, PyYAML or podman (verified2026-08-21), so these cannot be fixed by changing the image alone.
knuckle-qa-pipeline.yamlbuildahbuildah— needs multi-stage COPY or init container (no shell)provision-flatcar-vm.yamlqemu-img bzip2 buildahqemu-img+buildah;bzip2unresolvedbuild-bluefin-migration-containerdisk.yamlqemu-img jq buildah+ ISO depsbluefin-server-boot-test.yamlzstd podmaniso-e2e-pipeline.yaml,iso-build-e2e-pipeline.yamlfsdk-containersISO builder imagerun-service-tests.yamlpython3-pytest opensslpytest/opensslabsent from lab-runnerhomelab-print-device.yamlavahi-daemon avahi-utils(apt)Out of scope
run-gnome-tests.yaml,run-kde-tests.yaml,run-flatcar-tests.yamlandrun-systemd-container-tests.yamlpip installinside the guest/DUT beingtested (qecore, dogtail, behave). That is provisioning the device under test, not
runner tooling — changing it would change what is being tested.
Suggested order
fsdk-containersimage for the ISO/disk toolchain (qemu-img,buildah,zstd,xorriso) — unblocks the most files at once.buildah/qemu-imgcall sites to multi-stageCOPY --fromagainst the existing distroless org images.pytest/opensslto a test-runner image or vendor them.