# ZeptoClaw Development Dockerfile
# Uses BuildKit cache mounts for fast incremental builds.
#
# Docker: DOCKER_BUILDKIT=1 docker build -f Dockerfile.dev -t zeptoclaw:dev .
# Podman: podman build -f Dockerfile.dev -t zeptoclaw:dev .
#
# Or use the helper script:
# ./scripts/lint-container.sh
# ./scripts/lint-container.sh --no-cache
# syntax=docker/dockerfile:1
FROM rust:1.93-slim-trixie AS builder
RUN apt-get update && apt-get install -y \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/* \
&& rustup component add clippy rustfmt
WORKDIR /app
COPY Cargo.toml Cargo.lock* ./
# Dummy source for dependency-only build (cached layer)
RUN mkdir -p src/bin benches && \
echo "fn main() {}" > src/main.rs && \
echo "fn main() {}" > src/bin/benchmark.rs && \
echo "pub fn lib() {}" > src/lib.rs && \
echo "fn main() {}" > benches/message_bus.rs
# Build dependencies with cargo registry + target caches
# mount flags: stripped automatically by lint-container.sh --fallback for old Podman
RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git --mount=type=cache,target=/app/target cargo build --release && rm -rf src benches
COPY src ./src
COPY benches ./benches
RUN touch src/main.rs src/lib.rs
# Build, clippy, fmt check — all in one layer sharing the cache
RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git --mount=type=cache,target=/app/target cargo build --release --bin zeptoclaw && cargo clippy -- -D warnings && cargo fmt -- --check && cp /app/target/release/zeptoclaw /usr/local/bin/zeptoclaw
# Runtime stage (same as production Dockerfile)
FROM debian:trixie-slim AS runtime
RUN apt-get update && apt-get install -y \
ca-certificates \
git \
gosu \
wget \
&& rm -rf /var/lib/apt/lists/* \
&& useradd -r -s /bin/false -d /data zeptoclaw
COPY --from=builder /usr/local/bin/zeptoclaw /usr/local/bin/
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENV RUST_LOG=zeptoclaw=info
EXPOSE 8080 9090
VOLUME /data
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["zeptoclaw", "--help"]