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

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    POETRY_HOME="/opt/poetry" \
    PYSETUP_PATH="/opt/pysetup" \
    POETRY_VIRTUALENVS_IN_PROJECT=1 \
    POETRY_VIRTUALENVS_CREATE=1 \
    VIRTUAL_ENV="/opt/pysetup/.venv"

ENV PATH="$POETRY_HOME/bin:$VIRTUAL_ENV/bin:$PATH"

USER        root

# Install poetry
RUN         python -m venv $VIRTUAL_ENV && \
            $VIRTUAL_ENV/bin/pip install --no-cache --upgrade pip && \
            $VIRTUAL_ENV/bin/pip install --no-cache poetry==1.7.1  # Poetry version should match https://github.com/theorchard/python-deployment-utils/blob/master/pypi/docker/requirements.txt

USER        worker

# Switch to the app directory
WORKDIR     /var/app
COPY        pyproject.toml /var/app/

################################
### Generate poetry lockfile ###
################################
FROM        base AS poetry_update

USER        root
COPY        scripts/update-poetry-lock.sh /var/app/scripts/
ENTRYPOINT  ["scripts/update-poetry-lock.sh"]

###########################
### Build image for dev ###
###########################
FROM        base AS dev

# Install requirements to PYSETUP_PATH
WORKDIR     $PYSETUP_PATH
COPY        pyproject.toml poetry.lock ./

USER        root
RUN         poetry install --no-root --no-cache

# change to the app dir.
WORKDIR     /var/app
COPY        ows_assets_uploader /var/app/ows_assets_uploader

USER        worker

##########################
### Format source code ###
##########################
FROM        dev AS format

COPY        tests /var/app/tests
COPY        scripts/format.sh /var/app/scripts/

ENTRYPOINT  ["scripts/format.sh"]

#################################
### Build image for unit-lint ###
#################################
FROM        dev AS unit-lint

COPY        tests /var/app/tests
COPY        docker-compose.yml /var/app/
COPY        scripts/unit-lint.sh /var/app/scripts/

ENTRYPOINT  ["scripts/unit-lint.sh"]
