Skip to content
# 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"]