# Dockerfile

##############################################
### Builder: compile and install prod deps ###
##############################################
FROM        amazon/aws-lambda-python:3.13 AS builder

ENV         UV_LINK_MODE=copy \
            UV_COMPILE_BYTECODE=1 \
            PYTHONDONTWRITEBYTECODE=1
WORKDIR     /var/task

COPY        --from=ghcr.io/astral-sh/uv:0.8.18 /uv /uvx /bin/

RUN         dnf -y install gcc && dnf clean all

COPY        uv.lock pyproject.toml ./
RUN         uv export --frozen --no-emit-workspace --no-dev -o requirements.txt && \
            uv pip install --system --no-cache -r requirements.txt

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

ENV         PYTHONPYCACHEPREFIX=/tmp/pycache \
            XDG_CACHE_HOME=/tmp/.cache \
            PYTEST_ADDOPTS=--basetemp=/tmp/pytest \
            COVERAGE_FILE=/tmp/.coverage

RUN         uv export --frozen --no-emit-workspace --group test -o requirements-test.txt && \
            uv pip install --system --no-cache -r requirements-test.txt

COPY        config.py lint-and-test.sh .yamllint.yaml docker-compose.yaml ./
COPY        src ./src
COPY        tests ./tests

ENTRYPOINT  ["./lint-and-test.sh"]

#######################################
### Build image for live deployment ###
#######################################
FROM        amazon/aws-lambda-python:3.13 AS deploy

ENV         PYTHONDONTWRITEBYTECODE=1
WORKDIR     /var/task

# Drop base-image-shipped Python packages so builder's site-packages is authoritative
# (prevents orphan *.dist-info from breaking importlib.metadata.version()).
RUN         rm -rf /var/lang/lib/python3.13/site-packages

COPY        --from=public.ecr.aws/datadog/lambda-extension:82 /opt/. /opt/
COPY        --from=builder /var/lang/lib/python3.13/site-packages /var/lang/lib/python3.13/site-packages

COPY        src ./src
COPY        config.py ./

RUN         python -m compileall -q /var/task/src /var/task/config.py

EXPOSE      8080

ENV         DD_LAMBDA_HANDLER=src.main.handler

ARG         version
LABEL       Version=$version
ENV         build_version=$version

CMD         [ "datadog_lambda.handler.handler" ]
