# syntax=docker/dockerfile:1.7
#
# Multi-stage build for ruLake.
#
#   docker build -t rulake .
#   docker run --rm rulake               # full benchmark (~2 min)
#   docker run --rm rulake --fast        # quick smoke (~5 s)
#   docker run --rm --entrypoint cargo rulake test --release
#
# rust:bookworm pins the latest stable. ruvector-rabitq pulls AVX-512 stdarch
# intrinsics that only stabilised after 1.89, so 1.85/1.83 fail to build this
# tree even though Cargo.toml's rust-version is 1.89 (a ruLake-only MSRV claim).
# BuildKit cache mounts handle the cargo registry + target dir between builds.

# ---- builder ----
FROM rust:bookworm AS builder

WORKDIR /build

COPY Cargo.toml Cargo.lock ./
COPY vendor ./vendor
COPY src ./src
COPY tests ./tests
COPY examples ./examples
COPY README.md BENCHMARK.md LICENSE-MIT LICENSE-APACHE ./

RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/build/target \
    cargo build --release --bin rulake-demo \
    && cp target/release/rulake-demo /usr/local/bin/rulake-demo

# ---- runtime ----
FROM debian:bookworm-slim

RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates \
    && rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/local/bin/rulake-demo /usr/local/bin/rulake-demo
COPY --from=builder /build/README.md /build/BENCHMARK.md /usr/share/doc/rulake/

ENTRYPOINT ["/usr/local/bin/rulake-demo"]
CMD []
