refactor(build): unify image build graph for cache reuse#390
Merged
Conversation
707e362 to
4a2920b
Compare
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
- Add scratch export stage (supervisor-output) reducing export from 968 MB / 10s to 14 MB / 0.1s - Unify builder drivers: supervisor now uses desktop-linux driver when not cross-compiling, sharing BuildKit cache with gateway builds - Split monolithic COPY crates/ into per-target workspace stages so sandbox changes don't invalidate gateway builds and vice versa - Remove LTO from default release profile for fast local linking; CI restores codegen-units=1 via CARGO_CODEGEN_UNITS build arg - Set workspace version to 0.0.0 so stub builds in deps stage are clearly distinguishable from real versioned builds
Explain how to read each column and what to look for when reviewing fast-deploy benchmark results.
The supervisor committed-tree fingerprint was missing deploy/docker/Dockerfile.images, and neither gateway nor supervisor included tasks/scripts/docker-build-image.sh. Changes to these files (e.g. from rebasing main) would not trigger a rebuild. Align the git ls-tree paths with the matches_* functions so committed and uncommitted changes are detected consistently.
a687416 to
7784b50
Compare
…erfiles This ARG was declared early but never referenced, causing every layer below it to be cache-busted whenever the image tag changed. Removing it lets dependency-install and toolchain layers stay cached across tag changes.
- Remove docker-build-cluster.sh: helm packaging is now inlined into docker-build-image.sh when the target is 'cluster' - Remove docker-build-component.sh: the gateway case was a passthrough to docker-build-image.sh; the CI case is now docker-build-ci.sh - Simplify docker-publish-multiarch.sh: remove --mode flag since only 'registry' mode remains after ECR removal - Remove dead docker:publish:cluster:multiarch ECR task from docker.toml - Update all callers (cluster-deploy-fast, cluster-bootstrap, cluster-push-component, remote-deploy, publish.toml) The build entry point is now docker-build-image.sh for all Rust targets (gateway, cluster, supervisor-builder, supervisor-output) and docker-build-ci.sh for the CI image.
johntmyers
approved these changes
Mar 18, 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.
Summary
Simplify the two-image container build pipeline around one shared Docker build graph so gateway and cluster builds reuse the same Rust dependency cache instead of recompiling overlapping workspace state separately.
Related Issue
N/A
Changes
deploy/docker/Dockerfile.imagesbuild graphdocker-build-image.shhelper and route local, publish, and fast-deploy flows through itsupervisor-buildertarget so it reuses the same cache path as full image buildsTesting
mise run pre-commitpassesAdditional validation:
bash -n tasks/scripts/docker-build-image.sh tasks/scripts/docker-build-component.sh tasks/scripts/docker-build-cluster.sh tasks/scripts/docker-publish-multiarch.sh tasks/scripts/cluster-deploy-fast.sh tasks/scripts/cluster-bootstrap.sh tasks/scripts/cluster-push-component.shRUSTC_WRAPPER= cargo check --workspacedocker buildx build --check -f deploy/docker/Dockerfile.images --target gateway .docker buildx build --check -f deploy/docker/Dockerfile.images --target cluster .docker buildx build --check -f deploy/docker/Dockerfile.images --target supervisor-builder .mise run pre-commit(fails on existing workspace lint warnings outside this change)Checklist