ARG PYTHON_VERSION=3.13 ARG POSTGRES_VERSION=17 FROM python:${PYTHON_VERSION}-slim AS base ENV PYTHONUNBUFFERED=1 \ PIP_DISABLE_PIP_VERSION_CHECK=on \ DEBIAN_FRONTEND=noninteractive RUN : \ && apt-get update \ && apt-get install -y \ build-essential \ openssh-client \ gnupg \ wget \ lsb-release \ git \ gettext \ && rm -rf /var/lib/apt/lists* \ && : RUN : \ && echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \ && apt update \ && apt install -y postgresql-client-${POSTGRESQL_VERSION} libpq-dev \ && rm -rf /var/lib/apt/lists* \ && : COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/ FROM base AS deps RUN adduser --disabled-password runner USER runner WORKDIR /app ENV UV_PROJECT_ENVIRONMENT=/home/runner/.venv \ UV_PYTHON_DOWNLOADS=never RUN --mount=type=bind,target=/app,source=. \ : \ && uv sync --frozen \ && : ENTRYPOINT [ "/app/scripts/entrypoint.sh" ] FROM deps AS dev ARG UID=1000 ARG GID=1000 USER root RUN usermod -u ${UID} runner && groupmod -g ${GID} runner ENV PATH=${UV_PROJECT_ENVIRONMENT}/bin:${PATH} WORKDIR /app USER runner CMD [ "/app/scripts/run-dev.sh" ] FROM deps AS release ENV PATH=${UV_PROJECT_ENVIRONMENT}/bin:${PATH} WORKDIR /app COPY --chown=runner:runner ./ ./ CMD [ "/app/scripts/run.sh" ]