
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.py 和 backend/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 = 120和quote-style = "single"的配置是否正确加载。
解决步骤
- 定位格式化失败的文件:在本地执行
ruff format --check . --exclude .venv --exclude venv命令,确认具体是哪些文件需要被格式化。 - 执行格式化操作:运行
ruff format . --exclude .venv --exclude venv,让ruff自动写入修改。 - 提交并推送修复:将格式化后的文件(本例中为
milvus_multitenancy.py和files.py)提交到修复分支,并创建 Pull Request(如 #27030)。注意,该操作 不应该 改变任何业务逻辑。 - 等待 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 步骤应为绿色通过状态。



