#syntax=docker/dockerfile:1.19.0-labs

ARG REGISTRY=dhi.io/
ARG DHI_PYTHON_VERSION=3.13
ARG UV_VERSION=0.8.13

FROM ghcr.io/astral-sh/uv:${UV_VERSION} AS uv

FROM ${REGISTRY}python:${DHI_PYTHON_VERSION}-dev AS python
ARG UV_PROJECT_ENVIRONMENT=/opt/python
ENV PATH="${UV_PROJECT_ENVIRONMENT}/bin:$PATH"

FROM python AS builder
RUN --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
    --mount=type=cache,target=/var/cache/apt,sharing=locked \
    apt-get update \
 && apt-get install -y --no-install-recommends git

COPY --from=uv /uv /uvx /usr/local/bin/
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_INSTALLER_METADATA=1
ENV UV_LINK_MODE=copy

WORKDIR /source
COPY --parents \
    hawk \
    pyproject.toml \
    README.md \
    services/modules/eval_log_importer/pyproject.toml \
    services/modules/eval_log_importer/uv.lock \
    ./

WORKDIR /source/services/modules/eval_log_importer
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync \
        --locked \
        --no-dev \
        --no-editable \
        --no-install-project

FROM builder AS builder-test
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync \
        --all-extras \
        --locked \
        --no-editable \
        --no-install-project

FROM python AS prod
RUN --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
    --mount=type=cache,target=/var/cache/apt,sharing=locked \
    apt-get update \
 && apt-get install -y --no-install-recommends git

WORKDIR /home/nonroot/app
RUN chown nonroot:nonroot /home/nonroot/app

COPY --from=builder ${UV_PROJECT_ENVIRONMENT} ${UV_PROJECT_ENVIRONMENT}
COPY --chown=nonroot:nonroot services/modules/eval_log_importer services/modules/eval_log_importer
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,from=uv,source=/uv,target=/usr/local/bin/uv \
    --mount=type=bind,source=hawk,target=/home/nonroot/app/hawk \
    --mount=type=bind,source=pyproject.toml,target=/home/nonroot/app/pyproject.toml \
    --mount=type=bind,source=README.md,target=/home/nonroot/app/README.md \
    uv sync \
        --locked \
        --no-dev \
        --no-editable \
        --project services/modules/eval_log_importer

USER nonroot
ENV PYTHONUNBUFFERED=1
ENTRYPOINT ["python", "-m", "eval_log_importer"]

FROM prod AS test
COPY --from=builder-test --chown=nonroot:nonroot ${UV_PROJECT_ENVIRONMENT} ${UV_PROJECT_ENVIRONMENT}
COPY --chown=nonroot:nonroot services/modules/eval_log_importer/pyproject.toml ./pyproject.toml
COPY --chown=nonroot:nonroot services/modules/eval_log_importer/eval_log_importer ./eval_log_importer
COPY --chown=nonroot:nonroot services/modules/eval_log_importer/tests ./tests

ENTRYPOINT ["python", "-m"]
CMD ["pytest", "tests"]
