# Apollo Router Dockerfile (v2.1 M2)
#
# 自包含镜像：rover（组合 supergraph）+ apollo-router（运行时）
# 启动时自动等待子图就绪 → rover compose → 启动 router

FROM ghcr.io/apollographql/router:v1.45.0

USER root

# 安装 curl（healthcheck + rover 下载）
RUN apt-get update && \
    apt-get install -y --no-install-recommends curl ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# 安装 rover（Apollo CLI for supergraph composition）
# 直接下载 release tarball 解压到 /usr/local/bin（避免 install 脚本参数兼容问题）
# tarball 内 rover 位于 dist/rover 子目录
RUN curl -sSL -o /tmp/rover.tar.gz https://github.com/apollographql/rover/releases/download/v0.30.0/rover-v0.30.0-x86_64-unknown-linux-gnu.tar.gz && \
    mkdir -p /tmp/rover-extract && \
    tar -xzf /tmp/rover.tar.gz -C /tmp/rover-extract && \
    cp /tmp/rover-extract/dist/rover /usr/local/bin/rover && \
    chmod +x /usr/local/bin/rover && \
    rm -rf /tmp/rover.tar.gz /tmp/rover-extract && \
    rover --version

# 预下载 supergraph 插件（federation-rs supergraph v2.9.0）
# 避免运行时因网络问题（如 GitHub 不可达）导致 rover compose 失败
# 插件会被缓存到 /root/.rover/bin/supergraph-v2.9.0
RUN APOLLO_ELV2_LICENSE=accept rover supergraph compose --config /dev/null --output /tmp/test-supergraph.graphql 2>&1 || \
    (echo "[build] Pre-downloading supergraph plugin..." && \
     curl -sSL -o /tmp/supergraph-plugin.tar.gz \
       "https://github.com/apollographql/federation-rs/releases/download/supergraph%40v2.9.0/supergraph-v2.9.0-x86_64-unknown-linux-gnu.tar.gz" && \
     mkdir -p /root/.rover/bin && \
     tar -xzf /tmp/supergraph-plugin.tar.gz -C /root/.rover/bin/ && \
     mv /root/.rover/bin/supergraph /root/.rover/bin/supergraph-v2.9.0 2>/dev/null || true && \
     chmod +x /root/.rover/bin/supergraph-v2.9.0 && \
     rm -f /tmp/supergraph-plugin.tar.gz /tmp/test-supergraph.graphql && \
     echo "[build] Supergraph plugin pre-installed")

# 接受 ELv2 许可
ENV APOLLO_ELV2_LICENSE=accept

# 复制配置文件
COPY router.yaml /dist/configuration.yaml
COPY supergraph.yaml /dist/supergraph.yaml
COPY entrypoint.sh /dist/entrypoint.sh
RUN chmod +x /dist/entrypoint.sh

EXPOSE 3000 8088

ENTRYPOINT ["/dist/entrypoint.sh"]
