agentic_huge_data_base / wiki
页面 Dify · 11.5 自动修复与代码现代化·DeepWiki 中文全文译文

11.5 · 自动修复与代码现代化

应用编排与外部知识接入 · 聚焦本章的模块关系、源码依据与实现要点。

项目Dify 章节11.5 状态全文译文 模块安装与启动、测试、发布与运维、文档对象与元数据、工作流与编排
源码线索
  • .github/labeler.yml
  • .github/workflows/api-tests.yml
  • .github/workflows/autofix.yml
  • .github/workflows/build-push.yml
  • .github/workflows/db-migration-test.yml
  • .github/workflows/docker-build.yml
  • .github/workflows/main-ci.yml
  • .github/workflows/pyrefly-diff-comment.yml
  • .github/workflows/pyrefly-diff.yml
  • .github/workflows/style.yml
模块标签
  • 安装与启动
  • 测试、发布与运维
  • 文档对象与元数据
  • 工作流与编排
  • 界面与交互

章节正文

自动修复与代码现代化

自动修复与代码现代化

相关源文件

本章引用的主要源码文件:

  • .github/labeler.yml
  • .github/workflows/api-tests.yml
  • .github/workflows/autofix.yml
  • .github/workflows/build-push.yml
  • .github/workflows/db-migration-test.yml
  • .github/workflows/docker-build.yml
  • .github/workflows/main-ci.yml
  • .github/workflows/pyrefly-diff-comment.yml
  • .github/workflows/pyrefly-diff.yml
  • .github/workflows/style.yml
  • .github/workflows/tool-test-sdks.yaml
  • .github/workflows/translate-i18n-claude.yml
  • .github/workflows/trigger-i18n-sync.yml
  • .github/workflows/vdb-tests-full.yml
  • .github/workflows/vdb-tests.yml
  • .github/workflows/web-tests.yml
  • depot.json

目的与范围

本文档记录了自动修复管线,该管线会自动纠正代码质量问题、应用格式化,并执行渐进式的代码现代化。自动修复工作流会在每次拉取请求和推送到 main 分支时运行,并将修复结果直接提交回该分支。关于代码质量强制检查和代码风格规则,请参见代码质量与代码风格。关于持续集成/持续部署(CI/CD)架构,请参见持续集成(CI)管线架构

自动修复系统实现在 .github/workflows/autofix.yml 中,执行以下操作:

  • Docker Compose 生成:从模板重新生成 docker-compose.yaml .github/workflows/autofix.yml:62-66
  • Python 格式化和代码风格检查:使用 Ruff 进行代码风格和代码风格修复 .github/workflows/autofix.yml:68-78
  • 结构性代码转换:使用 ast-grep 进行 SQLAlchemy 2.0 迁移 .github/workflows/autofix.yml:85-92
  • 类型注解现代化:将 Optional[T] 转换为 T | None .github/workflows/autofix.yml:93-110
  • API 文档:自动生成 Swagger Markdown 文档和前端合约 .github/workflows/autofix.yml:119-127
  • Web 代码风格修复:使用 ESLint 自动修复 TypeScript/JavaScript 代码 .github/workflows/autofix.yml:129-133

来源:.github/workflows/autofix.yml:1-136

自动修复工作流架构

自动修复工作流执行一个顺序的转换管线,并将所有更改提交回拉取请求分支。

完整自动修复管线
Dify · 完整自动修复管线 · 图 1
Dify · 完整自动修复管线 · 图 1

工作流触发器:自动修复工作流由针对 main 分支的拉取请求、推送到 main 分支以及合并组检查触发 .github/workflows/autofix.yml:2-9

仓库限制:该工作流仅在官方 langgenius/dify 仓库上运行,以防止分支出现提交循环 .github/workflows/autofix.yml:15

来源:.github/workflows/autofix.yml:1-136

Docker Compose 生成

当模板文件发生更改时,工作流会重新生成 docker-compose.yaml,以确保模板与用于本地部署的生成文件之间的一致性。

Docker Compose 生成逻辑

生成步骤使用基于路径的过滤来检测更改 .github/workflows/autofix.yml:25-34

输入文件作用
docker/generate_docker_compose生成脚本本身 .github/workflows/autofix.yml:31
docker/.env.example环境变量默认值的来源 .github/workflows/autofix.yml:32
docker/docker-compose-template.yaml用于生成的基础模板 .github/workflows/autofix.yml:33
docker/docker-compose.yaml生成的输出文件 .github/workflows/autofix.yml:34

如果这些文件中的任何一个发生了更改,脚本会在 docker 目录内运行 ./generate_docker_compose 来重新生成 Compose 文件 .github/workflows/autofix.yml:63-66

来源:.github/workflows/autofix.yml:25-66

Ruff:Python 格式化与自动修复

Ruff 用于快速的 Python 代码风格检查和格式化。自动修复工作流通过三阶段管线运行 Ruff,以确保代码完全一致。

三阶段 Ruff 管线
Dify · 三阶段 Ruff 管线 · 图 2
Dify · 三阶段 Ruff 管线 · 图 2

阶段 1:初始格式化 .github/workflows/autofix.yml:73:首先应用代码格式化,以防止"行过长"错误干扰代码风格检查。

阶段 2:代码风格检查与修复 .github/workflows/autofix.yml:75:运行配置好的 Ruff 代码风格检查规则,并自动修复诸如未使用的导入或冗余代码等问题。

阶段 3:重新格式化 .github/workflows/autofix.yml:77:在代码风格修复后重新应用格式化,因为自动修复可能会引入格式不一致的问题。

来源:.github/workflows/autofix.yml:68-78

AST-grep:结构性代码转换

ast-grep 是一种结构性搜索和替换工具,用于 SQLAlchemy 2.0 迁移和类型现代化。

SQLAlchemy 2.0 迁移

Dify 正在使用基于抽象语法树(AST)的转换,逐步自动迁移遗留模式 .github/workflows/autofix.yml:89-92

遗留模式现代模式逻辑
db.session.query($W).filter($H)db.session.query($W).where($H)查询过滤器的结构性转换 .github/workflows/autofix.yml:89-90
db.Column($$$B)mapped_column($$$B)转换为 SQLAlchemy 2.0 声明式 API .github/workflows/autofix.yml:91-92
类型注解现代化

工作流使用自定义的 ast-grep 规则,将 Optional[T] 转换为现代的 T | None 语法 .github/workflows/autofix.yml:94-110

前向引用修复:由于 Python 不支持使用字符串字面量前向引用的联合语法(例如,"Type" | None 是无效的),后处理 sed 命令将这些特定情况恢复为 Optional["Type"] .github/workflows/autofix.yml:112-113

来源:.github/workflows/autofix.yml:85-114

Web 与文档修复

API 文档与前端合约

当 API 发生更改时,工作流会自动更新文档和类型定义:

  • Swagger 文档:执行 api/dev/generate_swagger_markdown_docs.py,使 Markdown 文档与 OpenAPI 规范保持同步 .github/workflows/autofix.yml:123
  • 前端合约:在 packages/contracts 目录中运行 gen-api-contract-from-openapi,更新 Web 前端使用的 TypeScript 定义 .github/workflows/autofix.yml:127
ESLint 自动修复

对于 Web 相关的更改,工作流会使用 --fix 标志执行 ESLint,以解决 web 目录中的代码风格违规问题 .github/workflows/autofix.yml:132。此步骤使用 setup-web 操作来准备环境 .github/workflows/autofix.yml:117

迁移进度跟踪

工作流通过执行 api/cnt_base.sh 来跟踪 SQLAlchemy 迁移的进度 .github/workflows/autofix.yml:83。此脚本提供有关代码库中遗留模式数量的指标。

来源:.github/workflows/autofix.yml:79-84, .github/workflows/autofix.yml:115-133

自动修复提交机制

所有转换结果都会使用 autofix-ci/action 自动提交回拉取请求分支。

提交流程
Dify · 提交流程 · 图 3
Dify · 提交流程 · 图 3

操作集成autofix-ci/action@v1.3.4 负责检测本地更改并将其推送回 GitHub 分支的逻辑 .github/workflows/autofix.yml:135

来源:.github/workflows/autofix.yml:135-136