# syntax=docker/dockerfile:1
FROM rust:slim-bookworm AS builder
WORKDIR /app
RUN apt-get update \
&& apt-get install -y --no-install-recommends mold g++ \
&& rm -rf /var/lib/apt/lists/*
ENV RUSTFLAGS="-C link-arg=-fuse-ld=mold" \
CARGO_INCREMENTAL=0 \
CARGO_NET_RETRY=10 \
CARGO_TERM_COLOR=always
COPY Cargo.toml Cargo.lock ./
COPY assets ./assets
COPY src ./src
RUN --mount=type=cache,target=/usr/local/cargo/registry,sharing=locked \
--mount=type=cache,target=/app/target,sharing=locked \
cargo build --release \
&& cp target/release/pokedex /usr/local/bin/pokedex
# Runtime stage
FROM debian:bookworm-slim
WORKDIR /app
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/pokedex /app/pokedex
ENV DUCKDB_PATH=/app/data/pokedex.duckdb \
SQLITE_PATH=/app/data/battles.db \
PORT=8090
RUN mkdir -p /app/data \
&& chmod 755 /app/data
VOLUME ["/app/data"]
EXPOSE 8090
ENTRYPOINT ["./pokedex"]