# syntax=docker/dockerfile:1

ARG         AWS_ACCOUNT=086679231553
ARG         UV_VERSION=0.11.14
ARG         PARENT_IMAGE_TAG=python313

# base builder
FROM        ghcr.io/astral-sh/uv:${UV_VERSION} AS uv
FROM        ${AWS_ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:${PARENT_IMAGE_TAG} AS base-builder

ENV         PYTHONUNBUFFERED=1 \
            # Configure optimizations recommended by https://docs.astral.sh/uv/guides/integration/docker/#optimizations
            UV_COMPILE_BYTECODE=1 \
            UV_LINK_MODE=copy \
            # Always use python from the base image
            UV_PYTHON_DOWNLOADS=never \
            # Configure uv cache to be independent of user home
            UV_CACHE_DIR="/tmp/uv_cache"

USER        root


RUN        apt-get update && apt-get install -y --no-install-recommends \
           gcc python3-dev build-essential && \
           rm -rf /var/lib/apt/lists/*

COPY        --from=uv /uv /uvx /bin/

WORKDIR     /var/app


# dev builder
FROM        base-builder AS dev-builder

RUN         --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
            --mount=type=bind,source=uv.lock,target=uv.lock \
            --mount=type=cache,target=$UV_CACHE_DIR \
            uv sync --frozen --no-install-project --group dev


# base dev image
FROM        ${AWS_ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:${PARENT_IMAGE_TAG} AS base-dev
COPY        --from=dev-builder /var/app/.venv /var/app/.venv

WORKDIR     /var/app


# test image
FROM        base-dev AS tests
USER        root
COPY        . .


# main builder
FROM       base-builder AS main-builder

RUN        --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
           --mount=type=bind,source=uv.lock,target=uv.lock \
           --mount=type=cache,target=$UV_CACHE_DIR \
           uv sync --frozen --no-install-project --no-dev --group prod


# main image
FROM        ${AWS_ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:${PARENT_IMAGE_TAG} AS main

USER        root

RUN        apt-get update && apt-get install -y --no-install-recommends \
           libexpat1 libz1 && \
           rm -rf /var/lib/apt/lists/*

WORKDIR     /var/app

COPY        --from=main-builder /var/app/.venv /var/app/.venv
COPY        . .

ENV         DD_GIT_COMMIT_SHA=$GIT_COMMIT
ENV         DD_GIT_REPOSITORY_URL=$REPOSITORY_URL
ENV         DD_VERSION=$VERSION
ENV         PATH="/var/app/.venv/bin:$PATH"

USER        worker

EXPOSE      8080
CMD         ["uwsgi", "--ini", "uwsgi.ini"]
