# Build context excludes. # # podman tars this directory into every build before reading the first # instruction, so anything large that no COPY reads is pure wait. output/ # alone is a multi-gigabyte ISO, which the build was shipping to itself on # every run. # # Keep this in step with the COPY lines in the Containerfiles: the image # build reads Cargo.toml, Cargo.lock, crates/, templates/, etc/, usr/ and # schemas/, and build/Containerfile.iso additionally reads build/make-iso.sh. # etc/ is read twice, once into the runtime image and once into the rust-build # stage, where etc/skel is checked against the rendered skeleton for overlap. # # "Keep this in step" is not advice that was followed. `/schemas` sat in the # exclusions below from 2026-07-19, and on 2026-08-01 the Containerfile grew # `COPY schemas /usr/share/alloy/schemas` to fix the settings tab opening on # "no schemas found". The two cancelled: the COPY matched nothing and podman # failed the build outright, so from that commit until 2026-08-03 the image # could not be built at all, by either profile. Nothing caught it because no # image was built in that window. crates/alloy/tests/build_context.rs is what # catches it now. # Cargo artifacts. The rust-build stage compiles from scratch inside the # image on purpose — host artifacts are built against a different libc and # must not reach it. /target # bootc-image-builder output: the ISO, raw and qcow2 images, manifests. # # output.prev is the rotated copy build-iso.sh and build-image.sh leave behind # so a failed run cannot take the last good artifact with it. It was added to # a different file and never mirrored here, which quietly put a second # multi-gigabyte ISO back into every build context. That is the exact cost # the header above says this file exists to prevent. Both are currently 6.9G. /output /output.prev /dist # The install-source cache build/build-iso.sh keeps between runs: an OCI layout # of the image itself, so ~3G that no COPY reads and that would otherwise be # tarred into the build that produced it. /.iso-cache # Not read by any COPY. /.git # Excluded except the few files a COPY reads: the script # build/Containerfile.iso copies in, the two RPM specs the rust-build stage # packages the console and the terminal with, and the seeded font bases. The # negations have to follow the exclusion; reversed, they do nothing. # # base-cache/ normally holds one README, so it costs the context nothing. What # it costs when it is seeded is the four base files, ~180 KB, which is the price # of a build that does not depend on somebody else's rate limiter answering. # # It is negated twice on purpose. Every other negation in this file names one # file, and that shape is proven by the builds that ship; this is the first # directory, and whether a matcher re-includes a directory's CONTENTS from a # directory negation alone was not measured here, since settling it means # running a build. So the second line negates the files, which is the shape # already known to work. Delete either one only with a build to show for it. /build !/build/make-iso.sh !/build/rpm/alloy.spec !/build/rpm/shop.spec !/build/base-cache !/build/base-cache/** /builds.disabled /docs /tools