# syntax=docker/dockerfile:1 ARG RUST_VERSION=1.93 # ── Stage 1: Build ────────────────────────────────────────────────────────── FROM rust:${RUST_VERSION}-bookworm AS builder WORKDIR /src # Cache dependencies: copy only manifests first COPY Cargo.toml Cargo.lock ./ COPY crates/symclaw-core/Cargo.toml crates/symclaw-core/Cargo.toml COPY crates/symclaw-cli/Cargo.toml crates/symclaw-cli/Cargo.toml COPY crates/symclaw-wasm/Cargo.toml crates/symclaw-wasm/Cargo.toml COPY crates/symclaw-skill/Cargo.toml crates/symclaw-skill/Cargo.toml COPY crates/symclaw-gpu/Cargo.toml crates/symclaw-gpu/Cargo.toml COPY crates/symclaw-collab/Cargo.toml crates/symclaw-collab/Cargo.toml COPY crates/symclaw-python/Cargo.toml crates/symclaw-python/Cargo.toml COPY crates/symclaw-ffi/Cargo.toml crates/symclaw-ffi/Cargo.toml COPY benchmarks/Cargo.toml benchmarks/Cargo.toml # Create stub sources so cargo can resolve the workspace RUN for crate in symclaw-core symclaw-gpu symclaw-ffi; do \ mkdir -p "crates/${crate}/src" && \ echo '' > "crates/${crate}/src/lib.rs"; \ done && \ mkdir -p crates/symclaw-wasm/src && \ echo '' > crates/symclaw-wasm/src/lib.rs && \ mkdir -p crates/symclaw-python/src && \ echo '' > crates/symclaw-python/src/lib.rs && \ for crate in symclaw-cli symclaw-skill symclaw-collab; do \ mkdir -p "crates/${crate}/src" && \ echo '' > "crates/${crate}/src/lib.rs" && \ echo 'fn main() {}' > "crates/${crate}/src/main.rs"; \ done && \ mkdir -p benchmarks/benches && \ echo '' > benchmarks/benches/engine_bench.rs # Build deps only (layer cache) RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/src/target \ cargo build --release --bin symclaw --bin symclaw-skill 2>/dev/null || true # Copy real sources and build COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/src/target \ cargo build --release --bin symclaw --bin symclaw-skill && \ cp target/release/symclaw target/release/symclaw-skill /usr/local/bin/ # ── Stage 2: Runtime ──────────────────────────────────────────────────────── FROM debian:bookworm-slim AS runtime RUN apt-get update && \ apt-get install -y --no-install-recommends ca-certificates libssl3 && \ rm -rf /var/lib/apt/lists/* COPY --from=builder /usr/local/bin/symclaw /usr/local/bin/symclaw COPY --from=builder /usr/local/bin/symclaw-skill /usr/local/bin/symclaw-skill COPY skill/ /opt/symclaw/skill/ WORKDIR /opt/symclaw EXPOSE 18789 3000 HEALTHCHECK --interval=30s --timeout=5s --retries=3 \ CMD ["/usr/local/bin/symclaw", "--version"] LABEL maintainer="Omar " \ org.opencontainers.image.version="0.1.0" \ org.opencontainers.image.description="SymClaw — symbolic mathematics engine" \ org.opencontainers.image.source="https://github.com/symclaw/symclaw" ENTRYPOINT ["/usr/local/bin/symclaw-skill"] CMD ["/usr/local/bin/symclaw"]