# Image versions (can be overridden by args when building)
ARG RUST_VERSION=1.90
ARG DEBIAN_VERSION=bookworm

### Build server ###
FROM rust:${RUST_VERSION}-slim-${DEBIAN_VERSION} AS build
WORKDIR /app

# Copy all necessary files to build the server
COPY Cargo.lock Cargo.toml ./
COPY ./src ./src
# COPY ./migrations ./migrations
# etc...

ARG pkg={{project-name}}

RUN --mount=type=cache,id=rust_target,target=/app/target \
    --mount=type=cache,id=cargo_registry,target=/usr/local/cargo/registry \
    --mount=type=cache,id=cargo_git,target=/usr/local/cargo/git \
    set -eux; \
    cargo build --package $pkg --release --locked; \
    objcopy --compress-debug-sections target/release/$pkg ./run-server


### Run server ###
FROM debian:${DEBIAN_VERSION}-slim AS run

# Create non-root user
ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/home/appuser" \
    --shell "/sbin/nologin" \
    --uid "${UID}" \
    appuser
USER appuser

# Copy server binary
COPY --from=build --chown=appuser /app/run-server /usr/local/bin/

# Run server
WORKDIR /app
ENV {{env_prefix}}_HOST=0.0.0.0
CMD ["run-server"]
