# PR #45869 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[ROCm][CI] pass merge-base to container for python-only wheel metadata
- 合并时间：2026-06-23 23:44
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/45869

---

# 执行摘要

- 一句话：传递 merge-base 到 ROCm 容器，修复预编译 wheel 元数据解析
- 推荐动作：值得精读。该 PR 展示了在 CI 流水线中处理 artifact 镜像缺乏 git 元数据的典型解法：在 agent 点计算必要信息并通过环境变量传递，同时保留 fallback 机制以兼容不同环境。对设计跨环境 CI 脚本有参考价值。

# 功能与动机

在 ROCm CI 中，python_only_compile.sh 脚本依赖 git merge-base 来获取 wheels.vllm.ai 上对应提交的预编译 wheel 元数据。然而，当 /vllm-workspace 是 artifact 打包布局时，没有 .git 目录，导致 git merge-base 执行失败，测试无法进行。PR body 指出需要将 merge-base 传入容器（作为环境变量），同时保留脚本中的 git fallback 以兼容仍有 .git 的场景。

# 实现拆解

1. **Agent 端计算 merge-base**：在 `.buildkite/scripts/hardware_ci/run-amd-test.sh` 中，利用 agent 上完整的 git checkout 计算 `merge-base HEAD origin/main`，若计算失败则回退到 `BUILDKITE_COMMIT`。随后通过 `-e VLLM_STANDALONE_MERGE_BASE` 将该值传入 Docker 容器。同时检测命令中是否包含 `python_only_compile.sh`，若是则禁用 artifact 镜像（`VLLM_CI_USE_ARTIFACTS=0`）。

2. **脚本优先使用环境变量**：修改 `tests/standalone_tests/python_only_compile.sh`，使 merge_base_commit 优先读取 `VLLM_STANDALONE_MERGE_BASE`，其次尝试在 `/vllm-workspace` 和当前目录执行 `git merge-base`，同时增加目录结构检查（确保 `src/vllm` 或 `vllm` 存在）。此外，根据 `VLLM_TARGET_DEVICE` 是否为 `rocm` 来决定使用 `setup.py develop` 还是 `pip install -e`。

3. **配置 AMD CI 镜像**：在 `.buildkite/test_areas/misc.yaml` 的 `Python-only Installation` 步骤下添加 `mirror` 块，指定 AMD 设备 `mi325_1`，依赖 `image-build-amd`，并将 `vllm/platforms/rocm.py` 加入源文件依赖，确保 ROCm 专用文件变更会触发该测试。

关键文件：
- `tests/standalone_tests/python_only_compile.sh`（模块 安装测试；类别 test；类型 test-coverage）: 核心测试脚本，实现了 merge-base 的 fallback 链（环境变量 → git）并为 ROCm 环境适配 setup.py develop 安装方式。
- `.buildkite/scripts/hardware_ci/run-amd-test.sh`（模块 CI 脚本；类别 infra；类型 infrastructure）: CI 基础设施脚本，主要改动：在 agent 上计算 merge-base 并通过环境变量传入容器；同时检测 python_only_compile 场景禁用 artifact 镜像。
- `.buildkite/test_areas/misc.yaml`（模块 CI 配置；类别 config；类型 configuration）: CI 配置，为 python-only 安装测试添加 AMD 镜像 mirror 配置，使其可以在 ROCm CI 上运行。

关键符号：未识别

## 关键源码片段

### `tests/standalone_tests/python_only_compile.sh`

核心测试脚本，实现了 merge-base 的 fallback 链（环境变量 → git）并为 ROCm 环境适配 setup.py develop 安装方式。

```bash
# 优先使用环境变量传递的 merge-base （来自 agent 完整 git 仓库）
# 如果不可用，尝试在 /vllm-workspace 内执行 git，再回退到当前目录 git
merge_base_commit=""
if [[ -n "${VLLM_STANDALONE_MERGE_BASE:-}" ]]; then
    merge_base_commit="${VLLM_STANDALONE_MERGE_BASE}"
elif merge_base_commit="$(git -C /vllm-workspace merge-base HEAD origin/main 2>/dev/null)"; then
    :
elif merge_base_commit="$(git merge-base HEAD origin/main 2>/dev/null)"; then
    :
else
    echo "ERROR: need a git checkout or VLLM_STANDALONE_MERGE_BASE" >&2
    exit 1
fi
# 使用 merge_base_commit 拼接 metadata URL 并下载验证
meta_json_url="https://wheels.vllm.ai/$merge_base_commit/vllm/metadata.json"
echo "INFO: will use metadata.json from $meta_json_url"

```

# 评论区精华

评审人员 AndreasKaratzas 和 tjtanaa 均直接批准，未产生实质性技术讨论。

- 暂无高价值评论线程

# 风险与影响

- 风险：新增环境变量依赖 agent 具备完整 git 仓库；回退到 BUILDKITE_COMMIT 可能不准确（但脚本内仍有 git 回退作为兜底，且测试本身是 optional）；仅影响 ROCm CI。
- 影响：影响范围局限于 ROCm CI 的 python-only 安装测试步骤，提升其稳定性，减少因缺失 merge-base 导致的失败。对用户无直接影响。团队内减少人工干预和重试。
- 风险标记：依赖 agent git 环境 , 新环境变量影响回退路径

# 关联脉络

- 暂无明显关联 PR