bug: Python CI (Ruff Format) failing on dev since 2026-07-09 — two files no longer match ruff format

在 Open WebUI 项目的 dev 分支进行开发并提交代码后,触发了 Python CI 中的 Ruff Format 工作流(该工作流对 Python 代码进行格式化检查)。

bug: Python CI (Ruff Format) failing on dev since 2026-07-09 — two files no longer match ruff format

bug: Python CI (Ruff Format) failing on dev since 2026-07-09 — two files no longer match ruff format

快速结论:该报错通常发生在向 Open WebUI 的 dev 分支提交代码后,Python CI / Ruff Format 检查因为个别文件的格式化结果与项目配置不一致而变红(红色状态)。优先排查目标文件是否被意外提交了未格式化(或格式化不一致)的版本,或者是否本地未安装匹配的 ruff 版本。

问题场景

在 Open WebUI 项目的 dev 分支进行开发并提交代码后,触发了 Python CI 中的 Ruff Format 工作流(该工作流对 Python 代码进行格式化检查)。

报错原文

ruff format --check . --exclude .venv --exclude venv
Would reformat: backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.py
Would reformat: backend/open_webui/routers/files.py
2 files would be reformatted, 236 files already formatted
$ echo $?
1

原因分析

此问题为 dev 分支的格式化检查回归(Regression),并非功能性问题。导致本次 CI 失败的直接原因是:backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.pybackend/open_webui/routers/files.py 这两个文件在不同时间被提交时,其代码格式可能无意中与 ruff 的当前设置(line-length = 120, quote-style = "single")不匹配,使得 ruff format 认为需要重写。这种情况在多人协作的开发流程中较为常见,通常不是逻辑错误。

环境排查

  • 检查当前 dev 分支 HEAD 的 commit hash:例如,已确定失败的 HEAD 为 09d4cccb,最后一个通过的检查是 d3ea8eb7 (2026-07-09)。
  • 确认本地 ruff 版本:需要与 CI 环境对齐,例如 ruff 0.15.21(可通过 pip install "ruff>=0.15.5" 安装)。
  • 确认项目的 pyproject.toml 中的格式化配置:确认 line-length = 120quote-style = "single" 的配置是否正确加载。

解决步骤

  1. 定位格式化失败的文件:在本地执行 ruff format --check . --exclude .venv --exclude venv 命令,确认具体是哪些文件需要被格式化。
  2. 执行格式化操作:运行 ruff format . --exclude .venv --exclude venv,让 ruff 自动写入修改。
  3. 提交并推送修复:将格式化后的文件(本例中为 milvus_multitenancy.pyfiles.py)提交到修复分支,并创建 Pull Request(如 #27030)。注意,该操作 不应该 改变任何业务逻辑。
  4. 等待 CI 通过:修复 PR 被合并后,dev 分支的 Ruff Format 检查应重新变绿。

注意: Issue 报告者指出,当前的 lint 规则(pyproject.toml 中的 select 列表)与 CI 实际执行的检查之间存在不匹配(#23902),但此问题属于已知且被项目维护者标记为 not_planned 的潜在改进点,不在此次格式化检查失败的修复范围内。

验证方法

在本地运行 ruff format --check . --exclude .venv --exclude venv,确保命令输出为 All checks passed! 且返回值为 0,不会列出任何待格式化的文件。同时,在后续的 CI 执行中,Python CI / Ruff Format 步骤应为绿色通过状态。

参考来源

open-webui/open-webui #27029

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13267

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注