# Dockerfile

ARG         AWS_ACCOUNT=086679231553
ARG         UV_VERSION=0.9.18
ARG         PARENT_IMAGE_TAG=lambda-python313
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

ENV         PYTHONUNBUFFERED=1 \
            UV_COMPILE_BYTECODE=1 \
            UV_LINK_MODE=copy \
            UV_PYTHON_DOWNLOADS=never \
            UV_CACHE_DIR="/tmp/uv_cache"

USER        root

WORKDIR     /var/task

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

# Copy workspace dependencies
COPY        pyproject.toml uv.lock ./
COPY        common common


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

ENV         LC_ALL=en_US.utf-8 \
            LC_CTYPE=en_US.UTF-8 \
            PYTHONPYCACHEPREFIX=/tmp/pycache \
            XDG_CACHE_HOME=${LAMBDA_TASK_ROOT}/.cache \
            PYTEST_ADDOPTS=--basetemp=/tmp/pytest \
            COVERAGE_FILE=/tmp/.coverage

WORKDIR     /var/task/lambda/handle_metadata_success
COPY        lambda/handle_metadata_success/pyproject.toml ./

RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            uv sync

COPY        lambda/handle_metadata_success/config.py ./
COPY        lambda/handle_metadata_success/src/ ./src/

USER        worker

# Prevent unnecessary resyncs when mounting the project directory.
ENV         UV_NO_SYNC=1

ENTRYPOINT  []
CMD         ["/bin/sh"]


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

USER        root

WORKDIR     /var/task/lambda/handle_metadata_success

COPY        lambda/handle_metadata_success/tests ./tests/
COPY        lambda/handle_metadata_success/scripts ./scripts/


# Re-enable syncing and install dev dependencies
ENV         UV_NO_SYNC=0
RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            uv sync

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


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

ENTRYPOINT  ["scripts/integration.sh"]


####################################
### Builder image for deployment ###
####################################
FROM        base AS builder

# Install production dependencies to /var/task
COPY        lambda/handle_metadata_success/pyproject.toml lambda/handle_metadata_success/
COPY        pyproject.toml uv.lock ./
COPY        common common
WORKDIR     /var/task
RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            uv export --project lambda/handle_metadata_success --frozen --no-dev --no-editable -o lambda/handle_metadata_success/requirements.txt && \
            uv pip install -r lambda/handle_metadata_success/requirements.txt --target "${LAMBDA_TASK_ROOT}"

# Copy the rest of the project files
WORKDIR     /var/task/lambda/handle_metadata_success

COPY        lambda/handle_metadata_success/src/ ./src/
COPY        lambda/handle_metadata_success/config.py ./



##############################
### Build image for deploy ###
##############################
FROM        base AS deploy

ENV         LAMBDA_TASK_ROOT=/var/task
ENV         PYTHONPATH=${LAMBDA_TASK_ROOT}:${LAMBDA_TASK_ROOT}/lambda/handle_metadata_success

# Copy the installed packages from builder
COPY        --from=builder ${LAMBDA_TASK_ROOT} ${LAMBDA_TASK_ROOT}

# Copy the function code
COPY        --from=builder /var/task/lambda/handle_metadata_success/src ${LAMBDA_TASK_ROOT}/lambda/handle_metadata_success/src
COPY        --from=builder /var/task/lambda/handle_metadata_success/config.py ${LAMBDA_TASK_ROOT}/lambda/handle_metadata_success/

WORKDIR     ${LAMBDA_TASK_ROOT}

USER        worker

CMD         ["lambda.handle_metadata_success.src.app.handler"]
