ARG         AWS_ACCOUNT=086679231553

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

WORKDIR     /var/app

USER        root

############
### base ###
############
FROM parent AS base

RUN         apt update && apt install -y gcc make
RUN         --mount=type=cache,target=/root/.cache/pip \
            python -m venv /poetry && \
            /poetry/bin/pip install --upgrade pip && \
            /poetry/bin/pip install poetry==1.7.1

ENV         POETRY_NO_INTERACTION=1 \
            POETRY_VIRTUALENVS_IN_PROJECT=1 \
            POETRY_VIRTUALENVS_CREATE=1 \
            POETRY_CACHE_DIR=/tmp/poetry_cache \
            PATH=/poetry/bin:$PATH

COPY        pyproject.toml poetry.lock ./
RUN         --mount=type=cache,target=$POETRY_CACHE_DIR \
            poetry install --sync --without dev,scripts --no-root && \
            .venv/bin/pip uninstall --yes pip


###########
### dev ###
###########
FROM        base AS dev

RUN         --mount=type=cache,target=$POETRY_CACHE_DIR \
            poetry install --no-root

COPY        . ./


#################
### unit-lint ###
#################
FROM        dev AS unit-lint

RUN         chown -R worker /var/app

USER        worker
ENTRYPOINT  ["make", "unit_lint"]


########################
### test-integration ###
########################
FROM        dev AS test-integration

USER        worker
ENTRYPOINT  ["make", "test_integration"]


##############
### deploy ###
##############
FROM        parent AS deploy

ARG         DD_GIT_REPOSITORY_URL
ARG         DD_GIT_COMMIT_SHA

ENV         DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} \
            DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA} \
            DD_PROFILING_ENABLED=true \
            DD_EXCEPTION_DEBUGGING_ENABLED=true

COPY        --from=base /var/app/.venv .venv

COPY        . ./

RUN         find . \
                -not -path './collaborator' -not -path './collaborator/*' \
                -not -path './.venv' -not -path './.venv/*' \
                -not -path './application.py' \
                -not -path './uwsgi.ini' \
                -delete && \
            mkdir -p /var/app/spooler_tasks && \
            chown -R worker /var/app/spooler_tasks

USER        worker
ENTRYPOINT  [".venv/bin/uwsgi", "--ini=uwsgi.ini"]

EXPOSE      8080
