Files
symclaw/Dockerfile
T

74 lines
3.2 KiB
Docker

# 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 <[email protected]>" \
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"]