# PR #53949 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Rocm][CI] add dockerfile.xpu to rocm ci artifact
- 合并时间：2026-08-27 16:06
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/53949

---

# 执行摘要

- 一句话：修复 ROCm CI 中 Dockerfile.xpu 缺失导致的测试失败
- 推荐动作：该 PR 改动简单，逻辑合理，建议合并。但可考虑未来将平台相关文件列表提炼为测试辅助函数，便于维护。整体不值得精读，但可作为理解平台特性测试的示例。

# 功能与动机

PR 描述中指出，`tools/test_docker_build_metadata_args.py::test_rust_build_cache_excludes_git_metadata` 测试需要 `dockerfile.xpu` 文件，但在 ROCm CI 环境中该文件可能不存在（或不被支持），导致测试失败。通过条件判断，让 ROCm 平台跳过该文件的校验，从而修复 CI。

# 实现拆解

变更集中在测试文件 `tests/tools/test_docker_build_metadata_args.py`，具体步骤如下：
1. 在 `test_rust_build_cache_excludes_git_metadata` 函数内部引入 `from vllm.platforms import current_platform`，用于检测当前平台。
2. 将原先硬编码的 `("Dockerfile", "Dockerfile.cpu", "Dockerfile.xpu")` 列表改为动态构建：基础列表为 `["Dockerfile", "Dockerfile.cpu"]`，仅当 `current_platform.is_rocm()` 为假时才追加 `Dockerfile.xpu`。
3. 循环遍历该动态列表，执行原有的 Dockerfile 内容校验逻辑，确保在 ROCm 之外的其他平台仍能验证 `Dockerfile.xpu`。
该改动不涉及生产代码，仅调整测试的覆盖范围，使其更符合各平台的文件实际情况。

关键文件：
- `tests/tools/test_docker_build_metadata_args.py`（模块 测试；类别 test；类型 test-coverage）: 核心改动：根据平台条件动态决定是否校验 Dockerfile.xpu，修复 ROCm CI 测试失败

关键符号：test_rust_build_cache_excludes_git_metadata

## 关键源码片段

### `tests/tools/test_docker_build_metadata_args.py`

核心改动：根据平台条件动态决定是否校验 Dockerfile.xpu，修复 ROCm CI 测试失败

```python
# 从 vllm.platforms 导入 current_platform 以检测运行平台
def test_rust_build_cache_excludes_git_metadata() -> None:
    from vllm.platforms import current_platform

    # 基础列表始终包含公共 Dockerfile
    dockerfile_names = ["Dockerfile", "Dockerfile.cpu"]
    # 仅当非 ROCm 平台时追加 Dockerfile.xpu，避免 ROCm CI 因缺失文件而失败
    if not current_platform.is_rocm():
        dockerfile_names.append("Dockerfile.xpu")

    for name in dockerfile_names:
        dockerfile = (REPO_ROOT / "docker" / name).read_text()
        cached_stage, exact_version_stage = dockerfile.split(
            "FROM rust-build-cache AS rust-build", maxsplit=1
        )
        exact_version_stage = exact_version_stage.split("\nFROM ", maxsplit=1)[0]
        cached_run = cached_stage.rsplit("RUN ", maxsplit=1)[1]

        # 校验缓存阶段的 rust 构建不含 git 元数据
        assert 'SETUPTOOLS_SCM_PRETEND_VERSION="0.0.0+docker.cache"' in cached_run
        assert "source=.git,target=.git" not in cached_run
        # 校验精确版本阶段包含 git 元数据
        assert "source=.git,target=.git" in exact_version_stage
        assert 'SETUPTOOLS_SCM_PRETEND_METADATA="{dirty=false}"' in exact_version_stage
        assert "bash build_rust.sh" in exact_version_stage

```

# 评论区精华

未发现实质性的 review 讨论，仅有 CI 触发和 Claude 自动审查提示。维护者 AndreasKaratzas 直接批准了 PR。

- 暂无高价值评论线程

# 风险与影响

- 风险：主要风险是测试覆盖不足：在 ROCm 平台上不再验证 `Dockerfile.xpu` 的内容，如果未来该文件在 ROCm 上引入问题，此测试将无法捕获。但当前条件是合理的，因为 `Dockerfile.xpu` 本身针对 XPU 平台，与 ROCm 无关。此外，`current_platform.is_rocm()` 的判断逻辑可能影响其他平台，但现有逻辑只针对 ROCm 有差异，其他平台行为不变。
- 影响：影响范围较小，仅影响 CI 测试的稳定性和覆盖范围。对用户功能无直接影响，对团队而言，修复了 ROCm CI 的失败，提高了构建可靠性，同时保持了其他平台的验证完整性。
- 风险标记：测试覆盖范围缩减 , 平台相关逻辑依赖

# 关联脉络

- PR #53817 [XPU][Dockerfile] Update UCX install: 同样涉及 docker/Dockerfile.xpu 的改动，与本 PR 的 Dockerfile.xpu 相关联，本 PR 的修改避免 ROCm 测试因该文件缺失而失败。