74 lines
3.2 KiB
Docker
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"]
|