FROM harbor.mindreon.com/ops/python:3.12-slim AS builder

COPY --from=harbor.mindreon.com/ops/astral/uv:latest /uv /uvx /bin/

ENV DEBIAN_FRONTEND=noninteractive \
    PATH=/opt/venv/bin:$PATH \
    PIP_NO_CACHE_DIR=1 \
    PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple \
    PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn \
    UV_PROJECT_ENVIRONMENT=/opt/venv

WORKDIR /opt/mai-cli

RUN sed -i \
      -e 's#http://deb.debian.org/debian#https://mirrors.tuna.tsinghua.edu.cn/debian#g' \
      -e 's#http://deb.debian.org/debian-security#https://mirrors.tuna.tsinghua.edu.cn/debian-security#g' \
      /etc/apt/sources.list.d/debian.sources && \
    apt-get update && apt-get install -y --no-install-recommends \
    bash \
    ca-certificates \
    git \
    make \
    openssh-client \
    skopeo \
    && rm -rf /var/lib/apt/lists/*

COPY pyproject.toml uv.lock README.md ./
COPY src ./src

RUN uv sync --frozen --no-dev --no-editable --no-cache

RUN mai --help >/dev/null && \
    python -m mai --help >/dev/null && \
    python -c "import dvc.repo, huggingface_hub, modelscope_hub, botocore" && \
    dvc version >/dev/null && \
    hf --help >/dev/null && \
    ms -V >/dev/null 2>&1 && \
    modelscope -V >/dev/null 2>&1 && \
    skopeo --version >/dev/null && \
    git --version >/dev/null

FROM harbor.mindreon.com/ops/python:3.12-slim AS runtime

ENV DEBIAN_FRONTEND=noninteractive \
    PATH=/opt/venv/bin:$PATH \
    PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1

RUN sed -i \
      -e 's#http://deb.debian.org/debian#https://mirrors.tuna.tsinghua.edu.cn/debian#g' \
      -e 's#http://deb.debian.org/debian-security#https://mirrors.tuna.tsinghua.edu.cn/debian-security#g' \
      /etc/apt/sources.list.d/debian.sources && \
    apt-get update && apt-get install -y --no-install-recommends \
    bash \
    ca-certificates \
    git \
    openssh-client \
    skopeo \
    && rm -rf /var/lib/apt/lists/*

COPY --from=builder /opt/venv /opt/venv

RUN ln -sf /opt/venv/bin/mai /usr/local/bin/mai && \
    ln -sf /opt/venv/bin/dvc /usr/local/bin/dvc && \
    ln -sf /opt/venv/bin/hf /usr/local/bin/hf && \
    ln -sf /opt/venv/bin/ms /usr/local/bin/ms && \
    ln -sf /opt/venv/bin/modelscope /usr/local/bin/modelscope && \
    mkdir -p /workspace

WORKDIR /workspace

CMD ["mai", "--help"]
