# Gitea Actions CI 镜像（runner label: agenteval-ci）
# 预装 Python 3.11 + Node 20 + git/openssh/rsync + 项目依赖缓存。
# 基础镜像全部来自私有 registry 的 mirror，构建/运行均不触达 Docker Hub / GitHub。
#
# 构建与推送（在 Gitea 服务器或任意 linux/amd64 且能访问 registry 的机器上）：
#   docker build -f deploy/ci/Dockerfile -t registry.solahqb22.cn/ci/agenteval-ci:latest .
#   docker push registry.solahqb22.cn/ci/agenteval-ci:latest
# 注意：本地 macOS(arm64) 构建必须 --platform linux/amd64 并直接 --push；推荐在 Gitea 服务器上构建。

FROM registry.solahqb22.cn/mirror/node:20-bookworm AS node
FROM registry.solahqb22.cn/mirror/python:3.11-slim-bookworm

# Node 20：复制官方 node 镜像的二进制与内置 npm/corepack
COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
RUN ln -sf /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
    && ln -sf /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
    && ln -sf /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack \
    && node --version && npm --version

# 国内镜像源（pip / npm / apt）
ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
    PIP_TRUSTED_HOST=mirrors.aliyun.com \
    PIP_DISABLE_PIP_VERSION_CHECK=1 \
    NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

RUN sed -i \
        -e 's|deb.debian.org|mirrors.aliyun.com|g' \
        -e 's|security.debian.org|mirrors.aliyun.com/debian-security|g' \
        /etc/apt/sources.list.d/debian.sources \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        git openssh-client rsync curl ca-certificates gcc jq \
    && rm -rf /var/lib/apt/lists/*

# 骨架 trick 预热 Python 依赖：依赖列表以 pyproject.toml 为唯一数据源，
# CI 时 `pip install -e ".[dev]"` 全命中已装依赖，秒级完成。
WORKDIR /opt/seed
COPY pyproject.toml README.md ./
RUN mkdir -p backend/agenteval backend/cli \
    && touch backend/agenteval/__init__.py backend/cli/__init__.py \
    && pip install --no-cache-dir ".[dev]"

# 预热 npm 缓存：~/.npm 留在镜像层，CI 的 `npm ci` 主要命中本地缓存
COPY frontend/web/package.json frontend/web/package-lock.json ./frontend/web/
RUN cd frontend/web && npm ci --ignore-scripts --no-audit --no-fund

WORKDIR /
RUN rm -rf /opt/seed

CMD ["bash"]
