开发与 CI/CD
开发与持续集成/持续部署(CI/CD)
相关源文件
本 Wiki 页面的生成基于以下文件:
.devcontainer/Dockerfile.devcontainer/README.md.devcontainer/devcontainer.json.devcontainer/post_create_command.sh.devcontainer/post_start_command.sh.github/CODE_OF_CONDUCT.md.github/dependabot.yml.github/labeler.yml.github/pull_request_template.md.github/workflows/api-tests.yml.github/workflows/autofix.yml.github/workflows/build-push.yml.github/workflows/db-migration-test.yml.github/workflows/deploy-agent-dev.yml.github/workflows/deploy-dev.yml.github/workflows/deploy-hitl.yml.github/workflows/docker-build.yml.github/workflows/labeler.yml.github/workflows/main-ci.yml.github/workflows/pyrefly-diff-comment.yml.github/workflows/pyrefly-diff.yml.github/workflows/stale.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.gitignore.vite-hooks/pre-commit.vscode/README.md.vscode/launch.json.templateCONTRIBUTING.mdapi/README.mdapi/docker/entrypoint.shapi/tasks/generate_summary_index_task.pyapi/tasks/regenerate_summary_index_task.pyapi/tasks/remove_document_from_index_task.pyapi/tests/unit_tests/tasks/test_summary_queue_isolation.pydepot.jsondev/start-webdev/start-workerweb/service/fetch.spec.ts
本文档涵盖了 Dify 平台的开发工作流、本地环境搭建、测试基础设施以及持续集成/持续部署(CI/CD)管线。它解释了如何搭建本地开发环境、运行测试,并理解每次代码变更时自动运行的质量检查。
关于将 Dify 部署到生产环境的信息,请参阅部署与运维。关于 Docker 构建过程和多阶段镜像的详细信息,请参阅 Docker 构建过程与多阶段镜像。
开发环境概览
Dify 使用现代化的开发工具,针对 Python(后端)和 TypeScript(前端)开发进行了优化:
- Python:使用
uv包管理器,实现快速、可复现的依赖管理api/README.md:7-10。 - 前端:使用
pnpm进行高效的 Node.js 包管理api/README.md:11-12。 - 数据库:PostgreSQL 或 MySQL(可配置)
api/docker/entrypoint.sh:97-98。 - 缓存:Redis,用于会话管理和 Celery 消息代理
api/docker/entrypoint.sh:170。 - 容器化:Docker Compose,用于编排本地服务
api/README.md:25-29。 - 持续集成/持续部署(CI/CD):GitHub Actions,用于自动化测试和质量检查
.github/workflows/api-tests.yml:1-4。
开发工作流同时支持容器化和原生开发,允许开发者选择最适合自己的工作方式。
来源:api/README.md:7-29, api/docker/entrypoint.sh:97-170, .github/workflows/api-tests.yml:1-4
本地开发环境搭建
Docker Compose 开发栈
主要开发环境使用 Docker Compose 来编排所有必需的服务。该栈在几个关键文件中定义:
关键文件:
docker/generate_docker_compose:将模板和环境变量合并,生成最终的 compose 文件.github/workflows/autofix.yml:31-34。docker/docker-compose.middleware.yaml:在本地开发和测试期间使用的独立中间件服务.devcontainer/post_create_command.sh:13。
来源:.github/workflows/autofix.yml:31-34, .devcontainer/post_create_command.sh:13
环境配置
环境变量通过 .env 文件管理。仓库提供了模板和自动化脚本用于设置:
| 配置文件 | 用途 | 关键变量 |
|---|---|---|
docker/.env.example | Docker Compose 环境 | DB_TYPE, DB_HOST, REDIS_HOST |
api/.env.example | API 服务配置 | SECRET_KEY, CONSOLE_API_URL, 存储设置 |
docker/middleware.env | 中间件服务配置 | 数据库凭据和 Redis 设置 |
详情请参阅开发环境搭建。
来源:api/README.md:23-24, .devcontainer/post_create_command.sh:13-14
使用 UV 进行 Python 开发
UV 包管理器
Dify 使用 uv 进行 Python 依赖管理,替代了 poetry 以获得更佳性能:
关键 UV 命令:
# 安装所有依赖,包括开发组
uv sync --project api --dev
# 本地运行测试
uv run pytest
来源:api/README.md:7-10, api/README.md:86-88, api/README.md:94-96
测试基础设施
测试套件架构
API 测试执行
本地运行测试:
# 运行所有 API 测试
uv run pytest
# 运行特定类型测试
uv run pytest api/tests/unit_tests/
uv run pytest api/tests/integration_tests/
持续集成(CI)配置:
- API 单元测试在
depot-ubuntu-24.04上运行,使用pytest-xdist进行并行化.github/workflows/api-tests.yml:17-59。 - API 集成测试使用完整的中间件栈,并验证工作流和工具
.github/workflows/api-tests.yml:112-121。 - 向量存储冒烟测试验证了
chroma、pgvector、qdrant和weaviate的集成.github/workflows/vdb-tests.yml:61-67。
详情请参阅测试基础设施与策略。
来源:api/README.md:94-96, .github/workflows/api-tests.yml:17-121, .github/workflows/vdb-tests.yml:61-67
持续集成/持续部署(CI/CD)管线架构
GitHub Actions 工作流结构
CI 管线使用智能路径过滤,仅根据变更的文件运行相关测试:
管线优化
- 并发控制:工作流使用并发组,当有新提交推送时取消正在进行的运行
.github/workflows/api-tests.yml:12-14。 - 路径过滤:像
style.yml这样的工作流使用tj-actions/changed-files,如果相关目录(例如api/或web/)未变更,则跳过任务.github/workflows/style.yml:26-33。 - 分片:Web 测试在多个运行器上进行分片,以减少执行时间
.github/workflows/web-tests.yml:22-26。
详情请参阅CI 管线架构。
来源:.github/workflows/api-tests.yml:12-14, .github/workflows/style.yml:26-33, .github/workflows/web-tests.yml:22-26
代码质量与代码检查
Python 代码质量
Dify 使用多种工具来维护后端代码质量:
- Ruff:快速的代码检查器和格式化工具
api/README.md:100-101。 - Mypy:通过
make type-check-core进行静态类型检查.github/workflows/style.yml:52。 - Import Linter:通过检查模块依赖关系来强制实施架构边界
.github/workflows/style.yml:48。 - Dotenv Linter:验证
.env.example文件之间的一致性.github/workflows/style.yml:56。
前端代码质量
- ESLint:使用自定义配置进行 JavaScript/TypeScript 代码检查
.github/workflows/style.yml:107。 - tsslint:TypeScript 专用的代码检查
.github/workflows/style.yml:114。 - Knip:检测 web 目录中未使用的文件、依赖和导出
.github/workflows/style.yml:124。
详情请参阅代码质量与代码检查。
来源:api/README.md:100-101, .github/workflows/style.yml:48-124
自动修复与代码现代化
autofix.ci 工作流会自动对拉取请求应用修复:
- Ruff 修复:自动修复代码检查违规并格式化代码
api/README.md:100。 - ast-grep:执行结构性代码重写,例如将 SQLAlchemy 查询语法从
.filter()现代化为.where().github/workflows/autofix.yml:89-90,以及将Optional[T]转换为T | None.github/workflows/autofix.yml:94-110。 - ESLint 自动修复:使用
eslint --fix自动修复前端风格问题.github/workflows/autofix.yml:132。
详情请参阅自动修复与代码现代化。
来源:.github/workflows/autofix.yml:89-132, api/README.md:100
AI 编码代理技能
仓库包含针对 AI 编码助手的专门自动化功能:
- 翻译同步:使用 Claude 根据变更的键,将 i18n 文件与英文源文件同步
.github/workflows/translate-i18n-claude.yml:1-170。 - 代码审查技能:对拉取请求进行自动化检查,以确保与仓库模式的一致性。
详情请参阅AI 编码代理技能。
来源:.github/workflows/translate-i18n-claude.yml:1-170