代码质量与 CI/CD
代码质量与持续集成/持续部署(CI/CD)
相关源文件
本章引用的主要源码文件:
.github/workflows/claude-code-review-manual.yml.github/workflows/claude-code-review.yml.github/workflows/codeql.yml.github/workflows/lint.yml.github/workflows/pr-triage.yml.github/workflows/release-graphiti-core.yml.github/workflows/release-mcp-server.yml.github/workflows/release-server-container.yml.github/workflows/typecheck.yml.github/workflows/unit_tests.ymlMakefile
本文档记录了 Graphiti 仓库的自动化工作流、质量门禁和发布管线。内容涵盖用于测试、代码检查、类型检查、自动化代码审查的 GitHub Actions 配置,以及将 graphiti-core Python 包发布到 PyPI 和将各种 Docker 镜像发布到 Docker Hub 的流程。
工作流概览
所有 CI/CD 自动化均以 GitHub Actions 工作流的形式实现,位于 .github/workflows/ 目录下。这些工作流可分为以下几类:
| 工作流文件 | 用途 | 触发条件 |
|---|---|---|
lint.yml | 使用 Ruff 进行代码风格检查 | 推送到 main 分支或向 main 分支发起拉取请求 |
typecheck.yml | 使用 Pyright 进行静态类型分析 | 推送到 main 分支或向 main 分支发起拉取请求 |
unit_tests.yml | Pytest 测试套件(模拟测试与集成测试) | 推送到 main 分支或向 main 分支发起拉取请求 |
codeql.yml | 安全漏洞扫描 | 推送到 main 分支、向 main 分支发起拉取请求或定时执行 |
pr-triage.yml | 自动化拉取请求标签管理和 RFC 检查 | 拉取请求被打开或同步 |
claude-code-review.yml | 自动化 Claude 拉取请求审查 | 拉取请求被打开或同步 |
release-graphiti-core.yml | 将 graphiti-core 发布到 PyPI | 标签 v*.*.* |
release-server-container.yml | 发布 FastAPI 服务器 Docker 镜像 | PyPI 发布成功 |
release-mcp-server.yml | 发布 MCP 服务器 Docker 镜像 | 标签 mcp-v*.*.* |
ai-moderator.yml | 垃圾信息和 AI 生成内容检测 | Issue/评论/拉取请求 |
来源:.github/workflows/lint.yml:3-8, .github/workflows/typecheck.yml:6-11, .github/workflows/unit_tests.yml:3-8, .github/workflows/pr-triage.yml:3-14, .github/workflows/release-server-container.yml:3-8, .github/workflows/claude-code-review.yml:3-8
质量门禁与静态分析
Graphiti 采用多层方法确保代码在合并到 main 分支之前的质量。
代码检查与格式化
lint.yml 工作流使用 Ruff(>0.1.7)来强制执行编码标准 .github/workflows/lint.yml:25。它使用 --output-format=github 标志运行,以便直接在 GitHub 拉取请求界面中显示代码检查错误 .github/workflows/lint.yml:27。开发者可以通过 Makefile 使用 make lint 或 make format 命令在本地运行这些检查 .Makefile:18-25。
类型检查
typecheck.yml 工作流利用 Pyright 验证代码库中两个不同区域的类型提示 .github/workflows/typecheck.yml:1-43:
- graphiti-core:位于
graphiti_core/目录下的核心库逻辑.github/workflows/typecheck.yml:32。 - graph-service:位于
server/目录下的 FastAPI 服务器实现.github/workflows/typecheck.yml:42。
测试框架
unit_tests.yml 工作流管理 pytest 测试套件的执行 .github/workflows/unit_tests.yml:1-101。它分为两个主要任务:
- unit-tests:通过将
DISABLE_NEPTUNE、DISABLE_NEO4J、DISABLE_FALKORDB和DISABLE_KUZU设置为1,运行不需要外部依赖的测试.github/workflows/unit_tests.yml:30-33。它会明确忽略集成密集型测试文件和tests/evals/目录.github/workflows/unit_tests.yml:36-45。 - database-integration-tests:启动 Neo4j(v5.26-community,带 APOC 插件)和 FalkorDB 作为 GitHub Actions 服务
.github/workflows/unit_tests.yml:50-63。它会等待这些服务健康就绪后,再运行特定驱动的集成测试.github/workflows/unit_tests.yml:78-83, 94-100。
质量门禁——从静态分析到测试的流程
来源:.github/workflows/lint.yml:27, .github/workflows/typecheck.yml:32-42, .github/workflows/unit_tests.yml:30-63, Makefile:18-25
自动化拉取请求管理
拉取请求分类与 RFC 强制执行
pr-triage.yml 工作流会自动为来自 Fork 的拉取请求打上标签 .github/workflows/pr-triage.yml:25-40。
- RFC 检查:如果拉取请求的差异行数超过 5000 行,则会自动标记为
needs-rfc和triage/skip,因为大的变更需要事先进行设计讨论(RFC).github/workflows/pr-triage.yml:113-126。 - 标签管理:它会创建并管理诸如
triage/high、slop-detected(用于低质量的 AI 贡献)和needs-tests等标签.github/workflows/pr-triage.yml:84-92。
AI 驱动的代码审查
claude-code-review.yml 工作流使用 claude-opus-4-5-20251101 提供关键反馈 .github/workflows/claude-code-review.yml:92。
- 安全沙箱:该工作流使用严格的工具允许列表,只允许 Claude 使用
gh pr diff、gh pr comment、gh pr view、gh pr list和Read工具.github/workflows/claude-code-review.yml:91。 - 隔离:它使用
pull_request_target来允许访问密钥(用于 Anthropic API),同时确保只检出基础仓库(绝不检出 Fork 仓库),以防止恶意代码执行.github/workflows/claude-code-review.yml:5-7, 25-28。 - 手动触发:
claude-code-review-manual.yml工作流允许维护者手动触发对特定拉取请求的审查,并提供全面审查或安全重点审查的选项.github/workflows/claude-code-review-manual.yml:1-108。
拉取请求分类与审查架构
来源:.github/workflows/pr-triage.yml:113-126, .github/workflows/claude-code-review.yml:25-28, 91-94, .github/workflows/claude-code-review-manual.yml:1-108
发布管线
Graphiti 自动化了核心库、FastAPI 服务器和 MCP 服务器的发布流程。
1. graphiti-核心(PyPI)
由匹配 v*.*.* 的标签触发 .github/workflows/release-graphiti-core.yml:5。它会验证标签是否与 pyproject.toml 中的版本匹配,然后运行 uv build 并发布到 PyPI .github/workflows/release-graphiti-core.yml:27-37。
2. FastAPI 服务器(Docker)
release-server-container.yml 工作流在 "Release to PyPI" 工作流成功完成后自动触发 .github/workflows/release-server-container.yml:4-6。
- 它会等待新版本在 PyPI 索引上可用后再进行构建
.github/workflows/release-server-container.yml:89-103。 - 它使用 Depot 为
linux/amd64和linux/arm64构建zepai/graphiti镜像.github/workflows/release-server-container.yml:137-142。
3. MCP 服务器(Docker)
由匹配 mcp-v*.*.* 的标签触发 .github/workflows/release-mcp-server.yml:5。
- 变体:它会构建
standalone(外部数据库)和combined(包含 FalkorDB)两种镜像.github/workflows/release-mcp-server.yml:27-39。 - 依赖同步:它会动态从 PyPI 获取最新的
graphiti-core版本,以确保 MCP 服务器使用最新的库版本构建.github/workflows/release-mcp-server.yml:95-105。
发布工作流数据流
来源:.github/workflows/release-graphiti-core.yml:5, 37, .github/workflows/release-server-container.yml:4-6, 16, .github/workflows/release-mcp-server.yml:5, 15, 95