Prhub

#23017 ci: install rust toolchain in ci_install_dependency.sh

sgl-project/sglang · 作者 alexnails · 合并时间 2026-04-17 14:18

分析状态 已生成
文件变更 3提交数 1 · 评论 3
代码增减 +53 / -1
run-ci npu

执行摘要

在 CI 依赖安装脚本中新增 Rust 工具链安装步骤,确保源码构建时 cargo/rustc 可用。

PR body明确指出,由于sglang wheel通过setuptools-rust捆绑了原生Rust gRPC crate(rust/sglang-grpc/),任何源码安装(包括CI执行的可编辑安装)都会在构建时调用cargo/rustc。如果PATH中缺少Rust编译器,安装会失败并报错“error: can't find Rust compiler”。这是一个兜底修复,确保无论CI运行器镜像是否预装Rust工具链,都能正常工作。

该PR变更直接且必要,适合快速浏览以理解CI依赖管理策略。值得关注的设计决策是复用install_protoc.sh的模式,将工具链安装封装为可重用脚本,体现了基础设施代码的模块化思想。

讨论亮点

无review评论,PR body中作者说明了变更原因和测试计划,并提及了相关PR #23014和#23016(它们也做了类似改动,但可后续合并)。

实现拆解

  1. 新增Rust安装脚本:创建scripts/ci/utils/install_rustup.sh,该脚本首先检查cargo和rustc是否已安装,若已存在则直接退出;否则通过curl从sh.rustup.rs安装rustup,并更新PATH确保后续步骤可用。
  2. 集成到CUDA CI依赖脚本:修改scripts/ci/cuda/ci_install_dependency.sh,在安装protoc后调用install_rustup.sh,并更新步骤完成标记。
  3. 集成到NPU CI依赖脚本:修改scripts/ci/npu/npu_ci_install_dependency.sh,在环境变量设置后调用install_rustup.sh,并更新PATH。
  4. 配套调整:无测试或文档配套改动,纯基础设施脚本调整。
文件 模块 状态 重要度
scripts/ci/utils/install_rustup.sh CI 脚本 added 4.91
scripts/ci/cuda/ci_install_dependency.sh CI 脚本 modified 3.53
scripts/ci/npu/npu_ci_install_dependency.sh CI 脚本 modified 3.65
scripts/ci/utils/install_rustup.sh infrastructure

新增的核心脚本,负责检测并安装 Rust 工具链,是本次变更的基石。

#!/bin/bash
# 确保为源码构建的crate(如通过setuptools-rust捆绑的原生gRPC扩展)安装Rust工具链(rustc/cargo)。
# 最小支持版本为1.85(2024版)。
set -euxo pipefail
​
# 如果之前CI步骤已安装rustup,则拾取cargo。
export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}"if command -v cargo >/dev/null 2>&1 && command -v rustc >/dev/null 2>&1; then
    echo "rust already installed: $(rustc --version), $(cargo --version)"
    exit 0 # 已安装则提前退出,避免重复安装
fiecho "rust not found, installing via rustup..."# rustup.rs需要curl——确保其存在。
if ! command -v curl >/dev/null 2>&1; then
    if command -v apt-get &> /dev/null; then
        apt-get update || true
        apt-get install -y --no-install-recommends curl ca-certificates
    elif command -v yum &> /dev/null; then
        yum install -y curl ca-certificates
    else
        echo "ERROR: curl is required to install rustup, but no supported package manager was found"
        exit 1 # 无支持的包管理器时失败
    fi
fi# 通过官方脚本安装rustup,使用非交互模式且不修改PATH(后续手动处理)。
curl --proto '=https' --tlsv1.2 --retry 3 --retry-delay 2 -sSf https://sh.rustup.rs \
    | sh -s -- -y --no-modify-path
​
# 使cargo/rustc对当前shell和后续GitHub Actions步骤可见。
export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}"
if [ -n "${GITHUB_PATH:-}" ]; then
    echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> "${GITHUB_PATH}" # 更新GitHub Actions的PATH
fi# 验证安装成功。
rustc --version
cargo --version

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险。主要风险点:

  • 脚本健壮性install_rustup.sh依赖curl和包管理器(apt-get/yum),若运行在不支持的环境中可能失败;但脚本已包含错误处理。
  • 环境污染:自动安装Rust可能覆盖或干扰现有工具链,但脚本在检测到已安装时会提前退出,降低了冲突风险。
  • 依赖版本:脚本未指定Rust版本,默认安装最新稳定版,可能与项目要求的特定版本不匹配;但PR body提到最小支持版本为1.85,需确保兼容性。

影响范围有限但关键

  • 对系统:仅影响CI构建流程,确保源码安装成功,避免因缺失Rust导致的构建中断。
  • 对用户:无直接影响,属于后台基础设施改进。
  • 对团队:提高了CI的可靠性和可重复性,减少了因环境差异导致的构建失败。
环境依赖风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:在CI依赖安装脚本中新增Rust工具链安装步骤,确保源码构建时cargo/rustc可用。
  • 推荐动作:该PR变更直接且必要,适合快速浏览以理解CI依赖管理策略。值得关注的设计决策是复用install_protoc.sh的模式,将工具链安装封装为可重用脚本,体现了基础设施代码的模块化思想。

功能与动机

PR body明确指出,由于sglang wheel通过setuptools-rust捆绑了原生Rust gRPC crate(rust/sglang-grpc/),任何源码安装(包括CI执行的可编辑安装)都会在构建时调用cargo/rustc。如果PATH中缺少Rust编译器,安装会失败并报错“error: can't find Rust compiler”。这是一个兜底修复,确保无论CI运行器镜像是否预装Rust工具链,都能正常工作。

实现拆解

  1. 新增Rust安装脚本:创建scripts/ci/utils/install_rustup.sh,该脚本首先检查cargo和rustc是否已安装,若已存在则直接退出;否则通过curl从sh.rustup.rs安装rustup,并更新PATH确保后续步骤可用。
  2. 集成到CUDA CI依赖脚本:修改scripts/ci/cuda/ci_install_dependency.sh,在安装protoc后调用install_rustup.sh,并更新步骤完成标记。
  3. 集成到NPU CI依赖脚本:修改scripts/ci/npu/npu_ci_install_dependency.sh,在环境变量设置后调用install_rustup.sh,并更新PATH。
  4. 配套调整:无测试或文档配套改动,纯基础设施脚本调整。

关键文件:

  • scripts/ci/utils/install_rustup.sh(模块 CI脚本;类别 infra;类型 infrastructure): 新增的核心脚本,负责检测并安装Rust工具链,是本次变更的基石。
  • scripts/ci/cuda/ci_install_dependency.sh(模块 CI脚本;类别 infra;类型 infrastructure): CUDA平台的主要CI依赖安装脚本,集成了Rust安装步骤,影响大部分CI流水线。
  • scripts/ci/npu/npu_ci_install_dependency.sh(模块 CI脚本;类别 infra;类型 infrastructure): NPU平台的CI依赖安装脚本,同样集成了Rust安装,确保Ascend NPU CI也能正常工作。

关键符号:未识别

关键源码片段

scripts/ci/utils/install_rustup.sh

新增的核心脚本,负责检测并安装Rust工具链,是本次变更的基石。

#!/bin/bash
# 确保为源码构建的crate(如通过setuptools-rust捆绑的原生gRPC扩展)安装Rust工具链(rustc/cargo)。
# 最小支持版本为1.85(2024版)。
set -euxo pipefail
​
# 如果之前CI步骤已安装rustup,则拾取cargo。
export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}"if command -v cargo >/dev/null 2>&1 && command -v rustc >/dev/null 2>&1; then
    echo "rust already installed: $(rustc --version), $(cargo --version)"
    exit 0 # 已安装则提前退出,避免重复安装
fiecho "rust not found, installing via rustup..."# rustup.rs需要curl——确保其存在。
if ! command -v curl >/dev/null 2>&1; then
    if command -v apt-get &> /dev/null; then
        apt-get update || true
        apt-get install -y --no-install-recommends curl ca-certificates
    elif command -v yum &> /dev/null; then
        yum install -y curl ca-certificates
    else
        echo "ERROR: curl is required to install rustup, but no supported package manager was found"
        exit 1 # 无支持的包管理器时失败
    fi
fi# 通过官方脚本安装rustup,使用非交互模式且不修改PATH(后续手动处理)。
curl --proto '=https' --tlsv1.2 --retry 3 --retry-delay 2 -sSf https://sh.rustup.rs \
    | sh -s -- -y --no-modify-path
​
# 使cargo/rustc对当前shell和后续GitHub Actions步骤可见。
export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}"
if [ -n "${GITHUB_PATH:-}" ]; then
    echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> "${GITHUB_PATH}" # 更新GitHub Actions的PATH
fi# 验证安装成功。
rustc --version
cargo --version

评论区精华

无review评论,PR body中作者说明了变更原因和测试计划,并提及了相关PR #23014和#23016(它们也做了类似改动,但可后续合并)。

  • 暂无高价值评论线程

风险与影响

  • 风险:低风险。主要风险点:
  • 脚本健壮性install_rustup.sh依赖curl和包管理器(apt-get/yum),若运行在不支持的环境中可能失败;但脚本已包含错误处理。
  • 环境污染:自动安装Rust可能覆盖或干扰现有工具链,但脚本在检测到已安装时会提前退出,降低了冲突风险。
  • 依赖版本:脚本未指定Rust版本,默认安装最新稳定版,可能与项目要求的特定版本不匹配;但PR body提到最小支持版本为1.85,需确保兼容性。
  • 影响:影响范围有限但关键
  • 对系统:仅影响CI构建流程,确保源码安装成功,避免因缺失Rust导致的构建中断。
  • 对用户:无直接影响,属于后台基础设施改进。
  • 对团队:提高了CI的可靠性和可重复性,减少了因环境差异导致的构建失败。
  • 风险标记:环境依赖风险

关联脉络

  • PR #23014 [main image] also install rust toolchain: PR body中提及,同样在主镜像中安装Rust工具链,属于同一批CI改进。
  • PR #23016 [release images] also install rust toolchain: PR body中提及,同样在发布镜像中安装Rust工具链,属于同一批CI改进。

参与讨论