Skip to content

Commit 9ea4a5a

Browse files
committed
Improve Docker layer caching for bun and broker deps
1 parent 9c01189 commit 9ea4a5a

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

packages/core/src/docker/Dockerfile

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ FROM base AS opencode-js-build
578578

579579
USER opencoder
580580
ARG OPENCODE_SOURCE=remote
581+
ARG TARGETARCH
581582

582583
# Bind-mount the source from the opencode-source stage, then copy it into
583584
# this layer's writable filesystem in the same RUN as bun install. This avoids
@@ -592,8 +593,12 @@ ARG OPENCODE_SOURCE=remote
592593
# Common symptoms: integrity check failures for platform-specific tarballs.
593594
# - The retry loop aggressively clears ALL bun caches AND node_modules between
594595
# attempts to ensure each retry starts from a truly clean state.
596+
# - On successful installs, keep the BuildKit cache mount populated so future
597+
# builds can reuse downloaded tarballs.
595598
RUN --mount=type=bind,from=opencode-source,source=/tmp/opencode-repo,target=/tmp/opencode-source-ro \
596-
--mount=type=cache,target=/home/opencoder/.bun/install/cache,uid=1000,gid=1000,mode=0755 \
599+
# Keep cache warm, isolate by architecture, and serialize writers to reduce
600+
# cross-arch contamination and concurrent cache corruption.
601+
--mount=type=cache,id=bun-install-${TARGETARCH},target=/home/opencoder/.bun/install/cache,uid=1000,gid=1000,mode=0755,sharing=locked \
597602
cp -R /tmp/opencode-source-ro /tmp/opencode-repo \
598603
&& sudo mkdir -p /home/opencoder/.bun/install/cache \
599604
&& sudo chown -R opencoder:opencoder /home/opencoder/.bun/install/cache \
@@ -619,9 +624,7 @@ RUN --mount=type=bind,from=opencode-source,source=/tmp/opencode-repo,target=/tmp
619624
OPENCODE_CHANNEL=local bun run build-single-ui; \
620625
else \
621626
bun run build-single-ui; \
622-
fi \
623-
&& sudo find /home/opencoder/.bun/install/cache -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true \
624-
&& sudo rm -rf /home/opencoder/.bun/cache /home/opencoder/.cache/bun
627+
fi
625628

626629
# =============================================================================
627630
# Stage 2c: broker-planner — Prepare cargo-chef dependency recipe
@@ -646,7 +649,11 @@ RUN set -eux; \
646649
| tar -xz -C /home/opencoder/.local/bin/; \
647650
cargo-chef --version
648651

649-
COPY --from=opencode-source /tmp/opencode-repo/packages/opencode-broker /tmp/opencode-broker
652+
# Intentionally copy only Cargo manifests here so cargo-chef dependency planning
653+
# is invalidated by dependency graph changes, not by broker source edits.
654+
RUN mkdir -p /tmp/opencode-broker
655+
COPY --from=opencode-source /tmp/opencode-repo/packages/opencode-broker/Cargo.toml /tmp/opencode-broker/Cargo.toml
656+
COPY --from=opencode-source /tmp/opencode-repo/packages/opencode-broker/Cargo.lock /tmp/opencode-broker/Cargo.lock
650657
WORKDIR /tmp/opencode-broker
651658
RUN . /home/opencoder/.cargo/env \
652659
&& cargo chef prepare --recipe-path /tmp/recipe.json

0 commit comments

Comments
 (0)