ARG AWS_ACCOUNT=086679231553
ARG UV_VERSION=0.11.6
ARG PARENT_IMAGE_TAG=lambda-python311

FROM ${AWS_ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:${PARENT_IMAGE_TAG} AS base
USER root
RUN yum -y update

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

# Enable bytecode compilation, to improve cold-start performance.
ENV UV_COMPILE_BYTECODE=1
# Disable installer metadata, to create a deterministic layer.
ENV UV_NO_INSTALLER_METADATA=1
# Enable copy mode to support bind mount caching.
ENV UV_LINK_MODE=copy
ENV PYTHONUNBUFFERED=1 \
    UV_PYTHON_DOWNLOADS=never

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

USER worker
COPY pyproject.toml uv.lock ./

RUN uv lock --check
RUN --mount=type=cache,target=$HOME/.cache/uv \
    uv sync --no-dev --locked

###########################
### Build image for dev ###
###########################
FROM uv AS dev

ENV LC_ALL=en_US.utf-8 \
    LC_CTYPE=en_US.UTF-8 \
    PYTHONPYCACHEPREFIX=/tmp/pycache \
    XDG_CACHE_HOME=/tmp/.cache \
    PYTEST_ADDOPTS="--basetemp=/tmp/pytest"

# Prevent unnecessary resyncs when mounting the project directory.
ENV UV_NO_SYNC=1
RUN --mount=type=cache,target=$HOME/.cache/uv \
    uv sync --locked

COPY *.py ./
COPY src ./src


COPY tests ./tests
COPY dev ./dev

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

WORKDIR ${LAMBDA_TASK_ROOT}
# Re-enable syncing and install dev dependencies
ENV UV_NO_SYNC=0
COPY lint-and-test.sh docker-compose.yaml ./
ENTRYPOINT ["bash", "./lint-and-test.sh"]

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

RUN --mount=type=cache,target=target=$HOME/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv export --frozen --no-emit-workspace --no-dev --no-editable -o requirements.txt && \
    uv pip install -r requirements.txt --target /tmp/uv-exported-venv

FROM base AS default
COPY --from=public.ecr.aws/datadog/lambda-extension:89 /opt/extensions/ /opt/extensions

# Copy the runtime dependencies from the builder stage.
COPY --from=builder /tmp/uv-exported-venv ${LAMBDA_TASK_ROOT}
COPY config.py ${LAMBDA_TASK_ROOT}/
COPY src ${LAMBDA_TASK_ROOT}/src


EXPOSE 8080

ENV DD_LAMBDA_HANDLER=src.app.handler
CMD [ "datadog_lambda.handler.handler" ]
