CI/CD 与发布流程
此页面内容来自 DeepWiki 重组后的对应页面(来源:10-2.zh.md)
CI/CD 工作流与发布流程
相关源文件
本章引用的主要源码文件:
.gitattributes.github/CONTRIBUTING.md.github/ISSUE_TEMPLATE/bug_report.yml.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/feature_request.yml.github/ISSUE_TEMPLATE/question.yml.github/dependabot.yml.github/pull_request_template.md.github/workflows/copilot-setup-steps.yml.github/workflows/docker-build-lite.yml.github/workflows/docker-build-manual.yml.github/workflows/docker-publish.yml.github/workflows/linting.yaml.github/workflows/pypi-publish.yml.github/workflows/stale.yaml.github/workflows/tests.yml.pre-commit-config.yamllightrag/_version.pytests/conftest.py
LightRAG 项目采用基于 GitHub Actions 的健壮 CI/CD 管线,以确保代码质量、自动化多平台分发(PyPI 和 Docker),并维护依赖健康。发布流程整合了 Python 核心和基于 React 的 WebUI 的版本管理。
质量保证工作流
项目通过对 main 和 dev 分支的每次推送和拉取请求执行自动化的代码检查和单元测试,来强制执行代码标准。
代码检查与格式化
linting.yaml 工作流利用 pre-commit 执行多个钩子:
- 标准钩子:
trailing-whitespace、end-of-file-fixer和requirements-txt-fixer.pre-commit-config.yaml:5-9。 - Ruff:用于代码格式化(
ruff-format)和启用自动修复的代码检查(ruff --fix).pre-commit-config.yaml:16-19。 - 排除项:所有代码检查钩子均排除
lightrag/api/webui/目录,因为该目录包含编译后的或二进制资源.pre-commit-config.yaml:6,8,10,17,20。
如果代码检查失败,工作流会使用 actions/github-script@v9 在拉取请求中发布一条包含本地修复说明的评论 .github/workflows/linting.yaml:74-134。
自动化测试
tests.yml 工作流在多个 Python 版本(当前为 3.12 和 3.14)上执行测试套件 .github/workflows/tests.yml:18。
- 离线模式:默认情况下,CI 仅运行标记有
@pytest.mark.offline标记的测试,以避免外部 API 或数据库依赖.github/workflows/tests.yml:46。 - 封闭环境:
tests/conftest.py中的_hermetic_mineru_env夹具会剥离MINERU_API_MODE和LIGHTRAG_PARSER等环境变量,以防止本地开发者配置泄露到 CI 环境中tests/conftest.py:11-43。 - 制品:测试结果和
.pytest_cache会上传为制品,保留 7 天.github/workflows/tests.yml:50-56。
CI 质量控制流程
来源:.github/workflows/linting.yaml:1-134、.github/workflows/tests.yml:1-57、tests/conftest.py:1-60。
发布与分发流程
发布流程由 GitHub Release 的发布触发。它涉及同步版本更新、构建 WebUI,以及发布到 PyPI 和 GHCR。
版本管理机制
版本的唯一真实来源是 lightrag/_version.py lightrag/_version.py:3。在发布工作流期间,会调用 scripts/release/set_version.py 脚本将此文件与 Git 标签同步 .github/workflows/pypi-publish.yml:67。
PyPI 发布
pypi-publish.yml 工作流处理 Python 包的分发:
- WebUI 构建:使用
oven-sh/setup-bun安装依赖并构建lightrag_webui/中的前端.github/workflows/pypi-publish.yml:22-31。 - 验证:在继续之前确认
lightrag/api/webui/index.html存在.github/workflows/pypi-publish.yml:35-38。 - 分发构建:使用
python -m build创建源码分发包和 Wheel 分发包.github/workflows/pypi-publish.yml:73。 - 上传:使用可信发布(OIDC)发布到 PyPI
.github/workflows/pypi-publish.yml:99。
Docker 发布
项目维护两个主要的 Docker 工作流:
docker-publish.yml:在发布时触发。它构建多平台镜像(linux/amd64、linux/arm64)并使用cosign签名.github/workflows/docker-publish.yml:84-111。docker-build-lite.yml:一个手动工作流(workflow_dispatch),使用Dockerfile.lite构建镜像的"精简"版本.github/workflows/docker-build-lite.yml:84。
发布数据流
来源:.github/workflows/pypi-publish.yml:1-102、.github/workflows/docker-publish.yml:1-121、lightrag/_version.py:1-5。
依赖与维护
Dependabot 配置
dependabot.yml 文件管理自动化更新,并采用特定的分组策略以减少拉取请求噪音:
- Python (pip):按类别分组:
llm-providers、storage、data-processing和web-framework.github/dependabot.yml:47-95。 - 前端 (bun):分组为
react、ui-components、graph-viz和build-tools.github/dependabot.yml:142-187。 - GitHub Actions:所有更新被分组到一个每周拉取请求中
.github/dependabot.yml:11-16。
过期问题管理
stale.yaml 工作流每天运行,以识别不活跃的问题和拉取请求。
- 问题:在 30 天不活跃后标记为过期,再过 7 天后关闭
.github/workflows/stale.yaml:12-14。 - 拉取请求:在 14 天后标记为过期,再过 7 天后关闭
.github/workflows/stale.yaml:17-19。
手动与辅助工作流
docker-build-manual.yml:允许开发者从任何分支或提交 SHA 构建和签名测试 Docker 镜像.github/workflows/docker-build-manual.yml:35-37。copilot-setup-steps.yml:为 GitHub Copilot 代理配置专门的环境,包括一个最小化的前端桩,使服务器无需完整 WebUI 构建即可启动.github/workflows/copilot-setup-steps.yml:48-52。
来源:.github/dependabot.yml:1-207、.github/workflows/stale.yaml:1-25、.github/workflows/docker-build-manual.yml:1-110、.github/workflows/copilot-setup-steps.yml:1-59。