FROM ghcr.io/astral-sh/uv:0.11.30@sha256:93b61e21202b1dab861092748e46bbd6e0e41dd84f59b9174efd2353186e1b47 AS uv
FROM python:3.12-slim-bookworm@sha256:392307d22300de8b5986851a12d9176dfc0fc073e65bf6523ebd7dcbeb23564e AS builder
COPY --from=uv /uv /usr/local/bin/uv
WORKDIR /app
ENV UV_PYTHON_DOWNLOADS=never UV_LINK_MODE=copy TMPDIR=/app/.work
RUN mkdir /app/.work
COPY pyproject.toml uv.lock ./
ARG DEPENDENCY_GROUP=runtime
RUN --mount=type=cache,target=/root/.cache/uv \
    if [ "$DEPENDENCY_GROUP" = inference ]; then \
      uv sync --locked --no-default-groups --group inference --no-install-project; \
    elif [ "$DEPENDENCY_GROUP" = runtime ]; then \
      uv sync --locked --no-default-groups --no-install-project; \
    else exit 1; fi
COPY src/ src/
RUN --mount=type=cache,target=/root/.cache/uv \
    if [ "$DEPENDENCY_GROUP" = inference ]; then \
      uv sync --locked --no-default-groups --group inference --no-editable; \
    else uv sync --locked --no-default-groups --no-editable; fi

FROM python:3.12-slim-bookworm@sha256:392307d22300de8b5986851a12d9176dfc0fc073e65bf6523ebd7dcbeb23564e AS runtime
RUN useradd --uid 10001 --create-home app
WORKDIR /app
ENV PATH=/app/.venv/bin:$PATH PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 TMPDIR=/app/.work
COPY --from=builder /app/.venv /app/.venv
COPY alembic.ini oms-alembic.ini ./
COPY migrations/ migrations/
COPY oms_migrations/ oms_migrations/
RUN mkdir /app/.work && chown app:app /app/.work
USER 10001:10001
EXPOSE 8000
CMD ["uvicorn", "zhifu.app:create_app", "--factory", "--host", "0.0.0.0", "--port", "8000", "--timeout-graceful-shutdown", "60"]
