FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:python313 AS base

ENV         PYTHONUNBUFFERED=1 \
            UV_COMPILE_BYTECODE=1 \
            UV_LINK_MODE=copy \
            UV_PYTHON_DOWNLOADS=never \
            UV_CACHE_DIR="/tmp/uv_cache" \
            UV_PROJECT_ENVIRONMENT="/opt/.venv"

ENV         PATH="$UV_PROJECT_ENVIRONMENT/bin:$PATH"

USER        root

# Install uv
COPY        --from=ghcr.io/astral-sh/uv:0.11.5 /uv /uvx /bin/

WORKDIR     /var/app
COPY        pyproject.toml uv.lock ./


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

# Install app dependencies.
RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            --mount=type=bind,source=uv.lock,target=uv.lock \
            --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
            uv sync --locked --no-install-project --no-dev

# Copy project files
COPY        --chown=worker:worker src/ ./src

USER        worker

ENTRYPOINT  ["python", "-u", "-m", "src.main"]

#################################
### Build image for unit-lint ###
#################################

FROM        base AS unit-lint

# Install dev/test requirements
RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            uv sync --locked --no-install-project

# Copy the rest of the project files
COPY        --chown=worker:worker src/ ./src
COPY        --chown=worker:worker lint-and-test.sh docker-compose.yaml ./

USER        worker

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

#################################
#### Build image for format ####
#################################

FROM        base AS format

# Install dev/test requirements
RUN         --mount=type=cache,target=$UV_CACHE_DIR \
            uv sync --locked --no-install-project

# Copy the rest of the project files
COPY        --chown=worker:worker src/ ./src
COPY        --chown=worker:worker format.sh ./

USER        worker

ENTRYPOINT  ["./format.sh"]

#################################
## Build image for lockfile update
#################################

FROM        base AS update-lockfile

ENTRYPOINT  ["uv", "lock", "--upgrade"]
