FROM ghcr.io/astral-sh/uv:0.12.13 AS uv

FROM python:3.12-slim AS dependencies
COPY --from=uv /uv /usr/local/bin/uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --locked --extra server --no-dev --no-install-project --no-cache

FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1
WORKDIR /app
COPY --from=dependencies /app/.venv /app/.venv
COPY distribution-server/ ./distribution-server/
RUN groupadd --system --gid 10001 distribution \
    && useradd --system --uid 10001 --gid distribution --no-create-home distribution \
    && mkdir -p /app/distribution-server/data \
    && chown distribution:distribution /app/distribution-server/data
USER distribution
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD ["/app/.venv/bin/python", "-c", "from urllib.request import urlopen; urlopen('http://127.0.0.1:8000/healthz', timeout=3).close()"]
CMD ["/app/.venv/bin/python", "-m", "distribution-server.server"]
