Prhub

#23017 ci: install rust toolchain in ci_install_dependency.sh

原始 PR 作者 alexnails 合并时间 2026-04-17 14:18 文件变更 3 提交数 1 评论 3 代码增减 +53 / -1

执行摘要

在 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 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论