# syntax=docker/dockerfile:1
FROM rust:1-bookworm AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
        pkg-config libsqlite3-dev build-essential \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /build

COPY Cargo.toml Cargo.lock ./
COPY frogue/Cargo.toml frogue/Cargo.toml
COPY migration/Cargo.toml migration/Cargo.toml
RUN mkdir -p frogue/src migration/src \
    && echo 'fn main() {}' > frogue/src/main.rs \
    && touch frogue/src/lib.rs migration/src/lib.rs \
    && cargo build --release -p frogue || true
COPY frogue/ frogue/
COPY migration/ migration/
RUN touch frogue/src/main.rs frogue/src/lib.rs migration/src/lib.rs && cargo build --release -p frogue

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
        git ca-certificates \
    && rm -rf /var/lib/apt/lists/* \
    && useradd --system --create-home --uid 1000 frogue \
    && mkdir -p /data/repos \
    && chown -R frogue:frogue /data
COPY --from=builder /build/target/release/frogue /usr/local/bin/frogue

USER frogue

ENV FROGUE_BIND_ADDR=0.0.0.0:6565 \
    FROGUE_SSH_BIND_ADDR=0.0.0.0:2222 \
    DATABASE_URL=sqlite:///data/frogue.sqlite?mode=rwc \
    FROGUE_REPO_ROOT=/data/repos
# you NEED to set FROGUE_SESSION_SECRET, FROGUE_SSH_HOST and FROGUE_PUBLIC_URL
#   podman run -e FROGUE_SESSION_SECRET=... ...

EXPOSE 6565/tcp 2222/tcp
VOLUME /data

# Version injected at build time by `dev/build-container.sh`
ARG FROGUE_VERSION=0.1.0-dev
LABEL org.opencontainers.image.title="frogue" \
      org.opencontainers.image.version="${FROGUE_VERSION}"

ENTRYPOINT ["/usr/local/bin/frogue"]
