FROM node:22-slim AS admin_frontend_builder

WORKDIR /build/admin-frontend

COPY labs/admin/frontend/package.json labs/admin/frontend/package-lock.json ./

RUN --mount=type=cache,target=/root/.npm \
    npm ci

COPY labs/admin/frontend/ ./

RUN npm run build


FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS uv-builder
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
ENV UV_NO_DEV=1
ENV UV_PYTHON_DOWNLOADS=0

RUN apt-get update \
  && apt-get install -y --no-install-recommends \
    gcc \
    pkg-config \
    default-libmysqlclient-dev \
    gettext \
  && rm -rf /var/lib/apt/lists/*

WORKDIR /app
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv sync --locked --no-install-project

COPY . /app
COPY --from=admin_frontend_builder /build/admin-frontend/dist /app/labs/admin/frontend/dist

RUN uv run python manage.py compilemessages \
    && uv run python manage.py collectstatic --noinput


FROM python:3.13-slim-bookworm

ARG LABS_BACKEND_VERSION=unknown
ENV LABS_BACKEND_VERSION=${LABS_BACKEND_VERSION}

LABEL org.opencontainers.image.version=${LABS_BACKEND_VERSION}
LABEL org.opencontainers.image.source=https://github.com/pingcap-inc/labs.tidb.io/backend

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libmariadb3 \
        libpango-1.0-0 \
        libharfbuzz0b \
        libpangoft2-1.0-0 \
        libharfbuzz-subset0 \
    && rm -rf /var/lib/apt/lists/*

COPY --from=uv-builder /app /app

ENV PATH="/app/.venv/bin:$PATH"

WORKDIR /app

EXPOSE 8000

CMD ["gunicorn", "labs.wsgi:application", "--log-level", "info", "--workers", "7", "--bind", "0.0.0.0:8000"]
