From 4ccf89297d9c8f14791778063b75a87c725af4a2 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Tue, 17 Feb 2026 11:44:25 +0800 Subject: [PATCH 1/2] improve docker build --- Dockerfile | 19 ++++++++++++++++--- build.rs | 3 +++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 20e1934b5..a4922974d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.6 # ---- Builder stage ---- # Compiles the React frontend and the Rust binary with the frontend embedded. FROM rust:bookworm AS builder @@ -21,11 +22,20 @@ WORKDIR /build # 1. Fetch and cache Rust dependencies. # cargo fetch needs a valid target, so we create stubs that get replaced later. COPY Cargo.toml Cargo.lock ./ -RUN mkdir src && echo "fn main() {}" > src/main.rs && touch src/lib.rs && cargo fetch && rm -rf src +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=/build/target \ + mkdir src && echo "fn main() {}" > src/main.rs && touch src/lib.rs \ + && cargo build --release \ + && rm -rf src # 2. Build the frontend. +COPY interface/package.json interface/ +RUN --mount=type=cache,target=/root/.bun/install/cache \ + cd interface && bun install COPY interface/ interface/ -RUN cd interface && bun install && bun add -d @rollup/rollup-linux-x64-gnu && bun run build +RUN --mount=type=cache,target=/root/.bun/install/cache \ + cd interface && bun run build # 3. Copy source and compile the real binary. # build.rs runs the frontend build (already done above, node_modules present). @@ -35,7 +45,10 @@ COPY build.rs ./ COPY prompts/ prompts/ COPY migrations/ migrations/ COPY src/ src/ -RUN cargo build --release +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=/build/target \ + SPACEBOT_SKIP_FRONTEND_BUILD=1 cargo build --release # ---- Slim stage ---- # Minimal runtime with just the binary. No browser. diff --git a/build.rs b/build.rs index c77c560ae..ff9f77571 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,9 @@ use std::process::Command; fn main() { + if std::env::var("SPACEBOT_SKIP_FRONTEND_BUILD").is_ok() { + return; + } // Re-run if interface source files change println!("cargo:rerun-if-changed=interface/src/"); println!("cargo:rerun-if-changed=interface/index.html"); From 2867965b13c5e1a359a77e75c2d6f33d2085c62f Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Tue, 17 Feb 2026 11:47:35 +0800 Subject: [PATCH 2/2] scoped cache --- .github/workflows/release.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 18bb683d6..1e707e1ab 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,8 +55,8 @@ jobs: tags: | ${{ env.IMAGE }}:${{ steps.version.outputs.version }}-slim ${{ env.IMAGE }}:slim - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=release-slim + cache-to: type=gha,mode=max,scope=release-slim - name: Build and push full uses: docker/build-push-action@v6 @@ -68,8 +68,8 @@ jobs: ${{ env.IMAGE }}:${{ steps.version.outputs.version }}-full ${{ env.IMAGE }}:full ${{ env.IMAGE }}:latest - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=release-full + cache-to: type=gha,mode=max,scope=release-full - name: Log in to Fly registry uses: docker/login-action@v3 @@ -99,4 +99,3 @@ jobs: with: tag_name: ${{ steps.version.outputs.version }} generate_release_notes: true -