@@ -578,6 +578,7 @@ FROM base AS opencode-js-build
578578
579579USER opencoder
580580ARG 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.
595598RUN --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
650657WORKDIR /tmp/opencode-broker
651658RUN . /home/opencoder/.cargo/env \
652659 && cargo chef prepare --recipe-path /tmp/recipe.json
0 commit comments