Prhub

#29926 Fix Diffusion GT generation pipelines

原始 PR 作者 e-martirosian 合并时间 2026-07-05 16:43 文件变更 1 提交数 2 评论 3 代码增减 +41 / -0

执行摘要

修复 diffusion CI 生成脚本因上游重构而中断

PR #28762 移除了 run_suite.py 中的 collect_test_items 导出,导致 gen_diffusion_ci_outputs.py 无法导入该函数,进而破坏了 diffusion-ci-gt-gen*.yml 工作流。本 PR 旨在将缺失的函数直接内联到脚本中,恢复受影响的工作流。

该 PR 是小型修复,值得快速合并以恢复 CI。但对于未来,考虑将 collect_test_items 放在共享的工具模块中,以避免重复。

讨论亮点

gemini-code-assist[bot] 建议将 :: 检查改为 .py::,以避免警告中的误匹配。作者 e-martirosian 回复 "Don't need such changes",认为现有检查足够,最终该建议未采纳。

实现拆解

  1. 内联 collect_test_items 函数python/sglang/multimodal_gen/test/scripts/gen_diffusion_ci_outputs.py):新函数通过 subprocess.run 调用 pytest --collect-only -q 收集测试节点 ID,然后解析 stdout 筛选出包含 :: 的测试项。
  2. 调整导入语句:移除原有从 run_suite 模块导入的依赖,并将 run_pytest 导入改为 run_pytest 仅保持外部依赖不变。
  3. 增加 subprocess 导入:新增 import subprocess 以支持函数实现。
  4. 修复工作流依赖:此直接内联避免了跨模块依赖,使脚本独立运行,确保 diffusion-ci-gt-gen*.yml 工作流恢复功能。
文件 模块 状态 重要度
python/sglang/multimodal_gen/test/scripts/gen_diffusion_ci_outputs.py CI 脚本 modified 5.53

关键符号

collect_test_items

关键源码片段

python/sglang/multimodal_gen/test/scripts/gen_diffusion_ci_outputs.py test-coverage

唯一修改的文件,内联了 collect_test_items 函数,修复了因上游重构导致的导入错误。

def collect_test_items(files: list[str], filter_expr: str | None = None) -> list[str]:
    """Collect test node IDs from the given files using pytest --collect-only."""
    cmd = [sys.executable, "-m", "pytest", "--collect-only", "-q"]
    if filter_expr:
        cmd.extend(["-k", filter_expr])
    cmd.extend(files)
​
    filter_note = f" with filter: {filter_expr}" if filter_expr else ""
    print(f"Collecting tests from {len(files)} file(s){filter_note}")
    result = subprocess.run(cmd, capture_output=True, text=True)
​
    # exit code 5 means no tests collected (acceptable with filters)
    if result.returncode not in (0, 5):
        error_msg = (
            f"pytest --collect-only failed with exit code {result.returncode}\n"
            f"Command: {' '.join(cmd)}\n"
        )
        if result.stderr:
            error_msg += f"stderr:\n{result.stderr}\n"
        if result.stdout:
            error_msg += f"stdout:\n{result.stdout}\n"
        logger.error(error_msg)
        raise RuntimeError(error_msg)
​
    if result.returncode == 5:
        print(
            "No tests were collected (exit code 5). This may be expected with filters."
        )
​
    # Parse pytest output to extract test node IDs (lines containing "::")
    test_items = []
    for line in result.stdout.strip().split("\n"):
        line = line.strip()
        if line and "::" in line and not line.startswith(("=", "-", " ")):
            test_id = line.split()[0] if " " in line else line
            if "::" in test_id:
                test_items.append(test_id)
​
    print(f"Collected {len(test_items)} test items")
    return test_items

评论区精华

pytest 输出解析鲁棒性:建议用 .py:: 代替 :: 正确性

gemini-code-assist[bot] 建议在检查 `::` 时添加 `.py::` 前缀,以避免警告信息中的误匹配。

结论:作者 e-martirosian 认为无需改动,现有检查已足够。 · 已解决

风险与影响

风险较低。该变更仅涉及内联一个已经存在且测试过的函数,逻辑未改变。但新的实现通过子进程调用 pytest,若 pytest 输出格式未来变化可能导致解析失败。

直接影响 diffusion CI 的 GT 生成工作流,使其恢复到正常状态。对用户无影响,因为这是 CI 基础设施的一部分。间接影响是降低了 gen_diffusion_ci_outputs.pyrun_suite.py 的耦合,使脚本更独立。

CI 恢复修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论