基础设施、CI/CD 与工具链
基础设施、持续集成/持续部署(CI/CD)与工具链
相关源文件
本章引用的主要源码文件:
.github/scripts/verify_windows_install.ps1.github/workflows/ci.yml.github/workflows/release.yml.github/workflows/windows-smoke.ymlCargo.lockCargo.tomldocs/COMPILE_PERFORMANCE_PLAN.mdscripts/bench_selfdev_checkpoints.shscripts/build_linux_compat.shscripts/install.ps1scripts/install.shscripts/invoke_cargo_with_timeout.ps1scripts/quick-release.shscripts/update_packages.shtests/e2e/windows_lifecycle.rs
本节概述了 jcode 的构建系统、确保代码质量和分发的自动化管线,以及用于本地迭代的开发工具。该项目强调快速迭代周期、多平台支持和强大的自开发能力。
构建系统与发布管线
jcode 的构建系统以 Cargo 工作区为核心,旨在实现高性能编译和跨环境的一致版本管理。
版本管理与元数据
版本字符串定义在根目录的 Cargo.toml Cargo.toml:1-3 中。在构建过程中,会注入元数据以追踪构建来源。发布构建通过 JCODE_RELEASE_BUILD 环境变量进行区分,该变量会在持续集成(CI)中触发特定的优化和版本标记 .github/workflows/release.yml:91-96。
编译性能计划
为了维持快速的自开发循环,该项目实施了严格的性能计划:
- 链接器优化: 在 Linux 上使用
mold或通过clang使用lld来加速链接docs/COMPILE_PERFORMANCE_PLAN.md:67-71。 - Crate 分解: 工作区被拆分为超过 50 个 crate,以最大化 Rust 的增量编译和缓存能力
Cargo.toml:8-61。 - 减少元数据变更: 通过稳定构建时元数据,本地构建不再每次运行时都重新编译主 crate
docs/COMPILE_PERFORMANCE_PLAN.md:93-97。 - 自开发配置: 专用的
selfdev配置在debug和release之间提供了折中方案,显著降低了热构建时间docs/COMPILE_PERFORMANCE_PLAN.md:98-102。
自动化管线
持续集成/持续部署(CI/CD)通过 GitHub Actions 处理,分为主要工作流:
- 持续集成(CI)(
ci.yml): 每次推送和拉取请求时运行。它执行完整的测试套件,通过scripts/check_warning_budget.sh强制执行警告预算,并进行安全审计.github/workflows/ci.yml:1-199。 - 发布(
release.yml): 由版本标签触发。它为 Linux(包括 glibc 2.17 兼容构建)、macOS 和 Windows 构建优化后的二进制文件.github/workflows/release.yml:21-125。 - Windows 冒烟测试(
windows-smoke.yml): 专门针对 Windows 特有逻辑(如命名管道和进程生命周期)进行验证.github/workflows/windows-smoke.yml:1-126。
详情请参见构建系统与发布管线。
构建基础设施概览
| 组件 | 实体/脚本 | 角色 |
|---|---|---|
| 链接器 | mold / lld | 在 Linux 上通过 clang 加速链接 .github/workflows/ci.yml:140-156 |
| 编译器缓存 | sccache | 在 GitHub Actions 中全局缓存构建制品 .github/workflows/ci.yml:131-135 |
| 发布辅助工具 | quick-release.sh | 通过 osxcross 进行并行 Linux/macOS 构建的本地脚本 scripts/quick-release.sh:64-83 |
| 基准测试 | bench_selfdev_checkpoints.sh | 标准化测量冷启动与热启动编译时间 scripts/bench_selfdev_checkpoints.sh:21-26 |
来源: .github/workflows/ci.yml:1-199, .github/workflows/release.yml:1-125, docs/COMPILE_PERFORMANCE_PLAN.md:1-137, scripts/quick-release.sh:1-126。
测试基础设施
jcode 采用多层测试策略,以确保其终端用户界面(TUI)、代理逻辑和各种大语言模型(LLM)提供商的可靠性。
测试类别
- 单元测试与二进制测试: 覆盖核心逻辑的标准 Rust 测试
.github/workflows/ci.yml:164-169。 - 提供商矩阵: 验证不同大语言模型(LLM)后端(如 OpenAI、Anthropic 等)的兼容性
.github/workflows/ci.yml:170-175。 - 端到端(E2E)测试: 位于
tests/e2e/目录下的综合集成测试,模拟真实用户会话.github/workflows/ci.yml:176-181。 - 移动端模拟器: 在 Linux 运行器上验证移动端协议和用户界面(UI)渲染
.github/workflows/ci.yml:71-101。
棘轮机制与预算
持续集成(CI)系统使用"棘轮机制"来防止代码质量退化:
- 警告预算: 限制允许的编译器警告数量
scripts/check_warning_budget.sh:1-10。 - 大小预算: 监控代码和测试文件大小,以防止模块膨胀
.github/workflows/ci.yml:55-62。 - 安全棘轮: 追踪"易引发恐慌"的使用情况和被吞没的错误
.github/workflows/ci.yml:63-69。
详情请参见测试基础设施。
来源: .github/workflows/ci.yml:1-200, Cargo.toml:67-93。
遥测与更新系统
更新系统旨在让用户以最小的摩擦保持最新版本,同时支持二进制发布和基于源码的更新。
更新生命周期
该系统通过 ~/.jcode/builds/ 下的结构化目录布局来管理更新 scripts/install.sh:58-62。
- 检查: 安装程序查询 GitHub API 以获取最新发布标签
scripts/install.sh:47。 - 下载/构建: 它尝试下载预构建的
.tar.gz制品;如果没有与架构匹配的制品,则回退到从源码进行本地cargo build --releasescripts/install.sh:84-122。 - 应用: 新的二进制文件被移动到版本化目录,并更新
stable符号链接scripts/install.sh:124-134。
分发工具
- Homebrew: 自动更新自定义 tap 中的
jcode.rb公式scripts/update_packages.sh:41-100。 - AUR: 自动更新 Arch Linux 用户仓库中的
PKGBUILDscripts/update_packages.sh:103-133。 - Windows 安装程序: 基于 PowerShell 的安装程序,处理 PATH 配置和 Alacritty 设置
scripts/install.ps1:1-220。
详情请参见遥测与更新系统。
来源: scripts/install.sh:1-218, scripts/install.ps1:1-220, scripts/update_packages.sh:1-137。
代码到系统的映射
发布与安装流程
此图展示了源代码如何成为用户系统上已安装的二进制文件。
来源: .github/workflows/release.yml:80-107, scripts/install.sh:47-64, docs/COMPILE_PERFORMANCE_PLAN.md:67-71。
测试与质量护栏
此图连接了自动化质量检查与代码库之间的关系。
来源: .github/workflows/ci.yml:18-70, .github/workflows/ci.yml:194-199, Cargo.toml:8-61。