FROM python:3.12-slim-bookworm AS python-base

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

ENV PYTHONUNBUFFERED=true \
    PYSETUP_PATH="/opt/pysetup" \
    DBT_PACKAGES_INSTALL_PATH="/opt/pysetup/dbt_packages"


FROM python-base AS builder-base

RUN apt-get update \
    && apt-get install --no-install-recommends -y curl build-essential

WORKDIR $PYSETUP_PATH

COPY uv.lock pyproject.toml dbt_project.yml packages.yml ./

# Install project related packages
RUN uv sync --no-dev

# Install dbt related packages
RUN uv run dbt deps

### Linting and testing layer ###
FROM python-base AS lint-and-test

WORKDIR $PYSETUP_PATH

COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

RUN uv sync

ADD scripts/lint-and-test.sh /
RUN chmod +x /lint-and-test.sh

WORKDIR /var/app

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

### test layer ###
FROM python-base AS dbt-test

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

ADD scripts/dbt-test.sh /
RUN chmod +x /dbt-test.sh

ADD . /var/app
WORKDIR /var/app

ENTRYPOINT ["/dbt-test.sh"]

### Deploy layer ###
FROM python-base AS deploy

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

ADD scripts/dbt-run.sh /
RUN chmod +x /dbt-run.sh

ADD . /var/app
WORKDIR /var/app

ENTRYPOINT ["/dbt-run.sh"]
