# 使用国内镜像源拉取基础镜像
# 备选镜像源前缀：docker.1ms.run / dockerpull.com / docker.xuanyuan.me
FROM docker.m.daocloud.io/python:3.13-slim

# 环境变量：非交互 + 路径配置
ENV DEBIAN_FRONTEND=noninteractive \
    LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    UV_LINK_MODE=copy \
    UV_CACHE_DIR=/uv-cache \
    UV_PYTHON_INSTALL_DIR=/uv-python \
    UV_PROJECT_ENVIRONMENT=/opt/venv \
    PATH="/opt/venv/bin:${PATH}"

# 配置 apt 国内镜像（阿里云）并安装系统依赖
RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        git \
        jq \
        build-essential \
    && rm -rf /var/lib/apt/lists/*

# 配置 pip 国内镜像（阿里云）
RUN mkdir -p /etc/pip \
    && printf '[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com\n' \
       > /etc/pip/pip.conf \
    && mkdir -p /root/.config/pip \
    && ln -sf /etc/pip/pip.conf /root/.config/pip/pip.conf

# 安装 uv 并预装 Python 3.8 / 3.13
RUN pip install --no-cache-dir uv -i https://mirrors.aliyun.com/pypi/simple/ \
    && uv python install 3.8 3.13

# 安装 Node.js 20.x（actions/checkout 需要）
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
    apt-get install -y nodejs && \
    node --version

# 预装项目 dev 依赖（仅复制依赖描述文件，利用 Docker 层缓存）
WORKDIR /workspace
COPY pyproject.toml tox.ini README.md ./
COPY src/ ./src/

# 同步依赖到 /opt/venv（CI 时直接复用）
RUN uv sync --frozen --no-install-project 2>/dev/null || uv sync --no-install-project

# 预装 tox 环境（py38 + py313）
RUN uvx tox run -e py38,py313 --notest 2>/dev/null || true

# 持久化 uv 缓存目录（CI 可挂载到宿主机加速）
VOLUME ["/uv-cache"]

# 默认入口
CMD ["/bin/bash"]
