持续集成与持续交付管线
持续集成与持续交付管线
相关源文件
本章引用的主要源码文件:
.github/ISSUE_TEMPLATE/bug_report.yml.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/documentation_issue.yml.github/ISSUE_TEMPLATE/feature_request.yml.github/PULL_REQUEST_TEMPLATE.md.github/advanced-issue-labeler.yml.github/workflows/cd.yml.github/workflows/ci.yml.github/workflows/cli-node-cd.yml.github/workflows/issue-labeler.yml.github/workflows/openclaw-cd.yml.github/workflows/stale.yml.github/workflows/ts-sdk-cd.yml.github/workflows/ts-sdk-ci.yml.github/workflows/vercel-ai-cd.ymlCONTRIBUTING.mddocs/changelog/sdk.mdxmem0-ts/jest.config.jsmem0-ts/jest.setup.tsmem0-ts/src/global.d.tsmem0-ts/src/oss/src/utils/telemetry.tsmem0-ts/tsup.config.ts
本文档描述了 Mem0 仓库的持续集成(CI)和持续部署(CD)基础设施。CI 管线在多个 Python 版本和组件(mem0 和 embedchain)上校验代码质量,而 CD 管线则自动将包发布到 PyPI 和 npm。
工作流总览
Mem0 的 CI/CD 基础设施由多个 GitHub Actions 工作流组成,这些工作流负责处理 Python 和 TypeScript 生态系统的测试与部署。
CI/CD 工作流架构与作业依赖关系
来源: .github/workflows/ci.yml:1-118, .github/workflows/cd.yml:1-46, .github/workflows/ts-sdk-cd.yml:1-10, .github/workflows/cli-node-cd.yml:1-10
CI 工作流架构
工作流触发器
CI 工作流由事件触发,并附带路径特定的过滤器以优化构建执行:
| 事件 | 监控路径 |
|---|---|
push 到 main | mem0/**, tests/**, embedchain/**, .github/workflows/**, pyproject.toml |
pull_request | mem0/**, tests/**, embedchain/**, pyproject.toml |
来源: .github/workflows/ci.yml:3-17
变更日志强制检查
对于拉取请求,changelog_check 作业确保 pyproject.toml 中的任何版本提升都伴随有 docs/changelog/sdk.mdx 中的条目 .github/workflows/ci.yml:20-58。它使用一个自定义的 shell 函数 extract_version 来比较 base_version(来自目标分支)和 head_version(来自 PR 分支).github/workflows/ci.yml:35-40。
来源: .github/workflows/ci.yml:20-58
基于路径的变更检测
check_changes 作业使用 dorny/paths-filter@v2 来确定哪些组件发生了变更:
来源: .github/workflows/ci.yml:59-77
矩阵测试策略
构建作业:build_mem0
当 mem0 相关路径发生变更时,此作业会被执行。它会通过移除大型未使用的工具集(如 .NET、Android SDK 和 CodeQL)来清理磁盘空间,以便容纳向量存储和大语言模型(LLM)提供商的依赖树 .github/workflows/ci.yml:91-97。
- 环境:Python 3.10、3.11、3.12
.github/workflows/ci.yml:84。 - 系统依赖:安装
libgeos-dev以支持地理空间操作.github/workflows/ci.yml:106-107。 - Python 依赖:安装带有额外功能的包:
pip install -e ".[test,graph,vector_stores,llms,extras]".github/workflows/ci.yml:111。 - 校验:运行
make lint和make test.github/workflows/ci.yml:114-117。
来源: .github/workflows/ci.yml:78-118
CD 工作流:多包发布
Mem0 使用标签前缀策略将发布路由到正确的注册表和包。
标签前缀映射
| 包 | 注册表 | 标签前缀 | 工作流文件 |
|---|---|---|---|
mem0ai(Python) | PyPI | v* | cd.yml |
mem0ai(TypeScript) | npm | ts-v* | ts-sdk-cd.yml |
@mem0/cli(Node) | npm | cli-node-v* | cli-node-cd.yml |
mem0-cli(Python) | PyPI | cli-v* | 不适用 |
@mem0/vercel-ai-provider | npm | vercel-ai-v* | vercel-ai-cd.yml |
@mem0/openclaw-mem0 | npm | openclaw-v* | openclaw-cd.yml |
来源: CONTRIBUTING.md:65-78
Python 发布(PyPI)
cd.yml 工作流使用 hatch build --clean 来生成分发制品 .github/workflows/cd.yml:32。它通过 pypa/gh-action-pypi-publish 使用 OIDC 可信发布,需要 permissions: id-token: write 权限 .github/workflows/cd.yml:12-13, 41-46。
来源: .github/workflows/cd.yml:1-46
TypeScript/Node 发布(npm)
TypeScript 工作流(例如 ts-sdk-cd.yml)遵循标准的 Node.js 构建与发布模式:
- 设置:使用
pnpm版本 10 和 Node.js 22.github/workflows/ts-sdk-cd.yml:20-28。 - 构建:运行
pnpm run build,该命令会调用tsup.github/workflows/ts-sdk-cd.yml:36-37。 - 遥测版本管理:
tsup将package.json中的版本内联到__MEM0_SDK_VERSION__全局常量中mem0-ts/tsup.config.ts:27-29。 - 发布:使用
--provenance进行安全的 npm 发布.github/workflows/ts-sdk-cd.yml:43-45。
来源: .github/workflows/ts-sdk-cd.yml:1-47, mem0-ts/tsup.config.ts:1-49
遥测与版本管理
CI/CD 管线确保 SDK 版本被正确传播到构建制品中,以用于遥测目的。
遥测版本流转
在 TypeScript SDK 中,UnifiedTelemetry 使用此版本来标记每个捕获的事件 mem0-ts/src/oss/src/utils/telemetry.ts:53。如果全局常量 __MEM0_SDK_VERSION__ 未定义(例如在未打包的测试环境中),版本会默认为 "dev" mem0-ts/src/oss/src/utils/telemetry.ts:10-11。
来源: mem0-ts/tsup.config.ts:27-29, mem0-ts/src/oss/src/utils/telemetry.ts:1-127, mem0-ts/src/global.d.ts:1-4
质量标准与测试
Python 测试
测试通过 make test 使用 pytest 执行 .github/workflows/ci.yml:117。该项目支持由 hatch 管理的多个 Python 环境 CONTRIBUTING.md:19-33。
代码检查与格式化
- Python:使用
ruff进行代码检查.github/workflows/ci.yml:112-115。 - TypeScript:构建过程使用
tsup,该工具会执行类型检查和打包mem0-ts/tsup.config.ts:31-49。 - 预提交钩子:鼓励开发者在推送前运行
pre-commit install以在本地执行这些检查CONTRIBUTING.md:35-41。
来源: .github/workflows/ci.yml:112-117, CONTRIBUTING.md:35-62