Prhub

#23644 [AMD] Fix nightly version tag selection

原始 PR 作者 yctseng0211 合并时间 2026-04-24 17:39 文件变更 4 提交数 2 评论 2 代码增减 +20 / -10

执行摘要

修复 AMD 夜间 Docker 版本标签排序问题

AMD夜间Docker构建需要选择最新的发布版本标签,但原来的排序方式将post和稳定版本排在rc之后,导致错误的版本被选中。PR通过引入共享的PEP 440版本比较工具来解决此问题。

此PR是基础设施维护类变更,逻辑相对简单,但review中提出的路径鲁棒性问题值得关注。建议在后续的PR中跟进修复路径问题,使用$BASH_SOURCE构建相对路径。对于想了解SGLang CI流水线的读者,此PR展示了如何统一版本标签选择逻辑。

讨论亮点

Review中gemini-code-assist[bot]提出了一个关于路径鲁棒性的问题:

当前Python脚本的路径是相对于工作目录的,如果脚本从其他目录(如scripts/ci/amd/)执行,将无法找到脚本。之前的git tag命令可以在仓库的任何子目录下工作。建议使用相对于脚本位置的路径。

该评论使用了$(dirname "${BASH_SOURCE[0]}")/../../../python/tools/get_version_tag.py作为替代方案。

结论: 该建议未在最终提交中被采纳。PR的合并者bingxche在完成审核后直接将PR合并,未回应此建议。目前scripts/ci/amd/目录下的脚本仍然依赖从仓库根目录执行。

实现拆解

1. 修改GitHub Actions工作流文件

  • 文件: .github/workflows/release-docker-amd-nightly.yml.github/workflows/release-docker-amd-rocm720-nightly.yml
  • 变更: 将原来通过git tag -l 'v[0-9]*' --sort=-v:refname获取最新版本标签的方式,替换为调用Python脚本python tools/get_version_tag.py --tag-only,该脚本实现了PEP 440兼容的版本比较逻辑。
  • 原因: --sort=-v:refname按ASCII顺序排序,导致v0.5.7post1排在v0.5.7rc2之后,而PEP 440规定post版本应高于rc版本。
  • 影响: 确保稳定版和post发行版标签优先于rc候选版。

2. 在Nightly工作流中添加Python环境配置

  • 文件: 同上两个工作流文件
  • 变更: 在调用Python脚本之前添加了actions/setup-python@v5步骤,设置Python版本为3.10。
  • 原因: 原来的工作流没有Python环境,无法执行Python脚本。添加此步骤确保脚本可以正常运行。

3. 更新AMD CI容器启动脚本

  • 文件: scripts/ci/amd/amd_ci_start_container.shscripts/ci/amd/amd_ci_start_container_disagg.sh
  • 变更: 将原来类似的git tag命令替换为python3 python/tools/get_version_tag.py --tag-only || true
  • 原因: 保持一致性,使得容器启动时选择的版本标签与Docker构建使用相同的逻辑。使用|| true避免Python不可用时脚本失败。

4. 测试验证

  • 执行了python3 test/registered/unit/tools/test_get_version_tag.py验证共享工具的正确性。
  • 对shell脚本进行了语法检查(bash -n)。
文件 模块 状态 重要度
.github/workflows/release-docker-amd-nightly.yml GitHub 工作流 modified 3.89
.github/workflows/release-docker-amd-rocm720-nightly.yml GitHub 工作流 modified 3.77
scripts/ci/amd/amd_ci_start_container.sh CI 脚本 modified 3.13
scripts/ci/amd/amd_ci_start_container_disagg.sh CI 脚本 modified 3.13

关键符号

get_version_tag.py ( 未直接修改,通过 --tag-only 参数使用 )

关键源码片段

scripts/ci/amd/amd_ci_start_container.sh infrastructure

AMD CI 容器启动脚本之一,使用共享工具获取版本标签。但存在路径依赖问题。

# scripts/ci/amd/amd_ci_start_container.sh(片段)
SGLANG_VERSION="v0.5.5"
# 从 origin 获取最新标签以确保最新
if git fetch --tags origin; then
  # 使用共享工具,使稳定版 /post 版本排在 rc 版本之上
  VERSION_FROM_TAG=$(python3 python/tools/get_version_tag.py --tag-only || true)
  if [ -n "$VERSION_FROM_TAG" ]; then
    SGLANG_VERSION="$VERSION_FROM_TAG"
    echo "Using SGLang version from git tags: $SGLANG_VERSION"
  fi
fi
# 注意:此路径依赖仓库根目录执行,否则会失败

评论区精华

Python 脚本路径鲁棒性 正确性

gemini-code-assist[bot] 建议使用相对于脚本位置的路径(`$(dirname "${BASH_SOURCE[0]}")/../../../python/tools/get_version_tag.py`)替代相对路径,以确保从任意目录执行脚本都能正常工作。

结论:建议未被采纳。当前实现仍然依赖从仓库根目录执行。 · unresolved

风险与影响

  1. 路径依赖性(中风险): scripts/ci/amd/amd_ci_start_container.shamd_ci_start_container_disagg.sh 中直接使用python3 python/tools/get_version_tag.py,如果用户不从仓库根目录执行脚本,将导致失败。review中已指出此问题但未修复。
  2. Python依赖风险(低风险): 这些脚本假设系统已安装Python3,如果环境中没有Python,脚本可能失败(虽然使用|| true缓解)。
  3. 工具行为变更风险(低风险): 共享工具get_version_tag.py的行为必须与预期一致。如果该工具未来被修改而未考虑此处的使用场景,可能导致版本选择错误。

影响范围: AMD夜间Docker构建工作流和AMD CI容器启动脚本。
影响程度: 中等。修复影响AMD平台的自动化发布流程,确保选择正确的版本标签。对于手动执行CI脚本的开发人员,可能存在路径问题。
用户影响: 无直接用户影响,属于基础设施改进。
团队影响: AMD相关的开发和CI团队。

脚本路径依赖 缺少 Python 环境回退

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论