The Linux NVMe tooling pre-build containers for continuous integration
Dockerfiles are generated from ci-containers.yaml + templates/*.j2 by
generate, a single script covering both generation and building:
./generate generate # render every Dockerfile
./generate generate --target main --distro debian # render just one
./generate generate --target cross --arch s390x # render one cross Dockerfile
./generate build # generate + docker build main/staging/nvmetcli
./generate build --target containerdisk --variant nvmetcli --distro fedora
./generate build --target cross --arch armhf
./generate all # generate everything, build main/staging/nvmetcli
./generate smoke # dummy muon/samu + buildx-build every main Dockerfile
Run ./generate <subcommand> --help for the full option list. build
regenerates Dockerfiles before building by default (--no-generate to skip);
the container command defaults to $DOCKER or sudo docker (--docker to
override).
The rendered Dockerfiles under main/, staging/, nvmetcli/, etc. are
not checked in (see .gitignore) — the GitHub workflow generates each one
right before it's built, so they can never go stale relative to
ci-containers.yaml. Run ./generate generate locally to render them into
your working tree before building by hand.
(main/Dockerfile.ubuntu.{armhf,ppc64le,s390x,i386} are the Ubuntu
cross-compile containers, rendered from templates/Dockerfile.ubuntu-cross.j2
and the cross_arches/bundles.cross entries in ci-containers.yaml, same
as everything else under main/. i386 is the odd one out: it builds via
gcc-multilib rather than a separate cross-gcc, and needs no
qemu-user-static since 32-bit x86 binaries run natively on the amd64 build
host — it exists to keep 32-bit long/time_t truncation bugs (e.g. the
openSUSE i586 shr_format_ts() bug) covered in CI.)