# syntax=docker/dockerfile:1.7 # ── Stage 1: Build ──────────────────────────────────────────── FROM rust:1.93-slim@sha256:9663b80a1621253d30b146454f903de48f0af925c967be48c84745537cd35d8b AS builder WORKDIR /app # Install build dependencies RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && apt-get install -y \ pkg-config \ && rm -rf /var/lib/apt/lists/* # 1. Copy manifests and toolchain pin to cache dependencies with the same compiler COPY Cargo.toml Cargo.lock rust-toolchain.toml ./ # Create dummy targets declared in Cargo.toml so manifest parsing succeeds. RUN mkdir -p src benches \ && echo "fn main() {}" > src/main.rs \ && echo "fn main() {}" > benches/agent_benchmarks.rs RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \ --mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \ cargo build --release --locked RUN rm -rf src benches # 2. Copy source code COPY . . RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \ --mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \ cargo build --release --locked && \ cp target/release/zeroclaw /app/zeroclaw && \ strip /app/zeroclaw # ── Stage 2: Permissions & Config Prep ─────────────────────── FROM busybox:1.37@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f AS permissions # Create directory structure (simplified workspace path) RUN mkdir -p /zeroclaw-data/.zeroclaw /zeroclaw-data/workspace # Create minimal config for PRODUCTION (allows binding to public interfaces) # NOTE: Provider configuration must be done via environment variables at runtime RUN cat > /zeroclaw-data/.zeroclaw/config.toml <