本页面记录了 Cypress 代码库的构建、持续集成和持续交付流程。它涵盖了 Cypress 应用程序的构建、优化、跨不同平台的测试以及最终打包分发给用户的方式。
有关 CLI 及其如何管理二进制安装的信息,请参阅 CLI & 二进制文件。
Cypress 采用复杂的构建和 CI/CD 流水线,管理跨平台 Electron 应用程序的构建、测试和分发复杂性。该系统确保在 Linux、macOS(x64 和 ARM64)和 Windows 平台上的构建一致性,同时通过 V8 快照等技术优化性能。
来源
Cypress 在 CI/CD 流水线中同时使用了 CircleCI 和 GitHub Actions
CircleCI 配置分为两个文件
.circleci/config.yml:入口点,决定是否运行 CI.circleci/workflows.yml:包含工作流定义的主配置文件CI 流水线在以下场景触发
develop 分支release/*)来源
Cypress 的构建在多个平台上执行,以确保兼容性
| 平台 | 架构 | 备注 |
|---|---|---|
| Linux | x64 | 默认构建,始终运行 |
| Linux | ARM64 | 为 develop/release 分支运行 |
| macOS | x64 | 为 develop/release 分支运行 |
| macOS | ARM64 | 为 develop/release 分支运行 |
| Windows | x64 | 为 develop/release 分支运行 |
该配置允许开发者在处理特定平台问题时,将自己的分支添加到特定的平台条件中
来源
Cypress 包构建流程包含几个关键步骤,将源代码转换为特定平台的二进制文件。
CircleCI 实现了复杂的缓存机制,通过在可能时重用 node 模块来减少构建时间
来源
构建过程编译 TypeScript 代码库并准备分发
来源
Electron 打包过程将应用程序捆绑到每个平台
来源
二进制清理过程通过删除不必要的文件来减小最终包的大小
来源
Cypress 使用 V8 快照来提高启动性能。快照过程捕获初始化的 JavaScript 堆并将其序列化,通过反序列化堆而不是从头开始执行 JavaScript 来实现更快的启动。
快照是特定于平台的,并且为每个平台配置不同
来源
V8 快照缓存通过 GitHub Actions 工作流自动更新
该工作流每天运行一次,并在发布分支上运行,确保 V8 快照缓存与最新的代码更改保持同步。它还提供了手动触发和从头生成快照的选项。
来源
Cypress 通过 GitHub Actions 工作流自动更新浏览器版本,以在测试中保持与特定浏览器版本的兼容性
工作流
来源
Cypress 通过 GitHub Actions 在 CI/CD 流水线中实施安全扫描
来源
Cypress 通过自动化的拉取请求验证来强制执行语义版本控制
验证确保
来源
发布过程将来自不同平台的构建输出组合起来,并将它们发布到 Cypress 分发渠道
该过程从主 CircleCI 工作流触发,并在单独的存储库 (cypress-publish-binary) 中执行,以处理实际的发布过程。
来源
当发布新版本时,Cypress 会自动生成一个软件物料清单(SBOM),并将其作为发布资产进行附加。
SBOM 提供了有关发布中包含的组件的透明度,以满足合规性要求。
来源
Cypress 的构建和 CI/CD 流程是一个全面的系统,可确保跨多个平台的质量和一致性。CircleCI 用于核心构建和测试,而 GitHub Actions 用于专门任务,提供了一个强大的管道,自动化了软件交付过程的大部分方面。
该系统的主要优势包括:
此基础设施使 Cypress 团队能够在支持多种平台和架构的同时,维护高质量的应用程序。