菜单

构建与 CI/CD

相关源文件

本页面记录了 Cypress 代码库的构建、持续集成和持续交付流程。它涵盖了 Cypress 应用程序的构建、优化、跨不同平台的测试以及最终打包分发给用户的方式。

有关 CLI 及其如何管理二进制安装的信息,请参阅 CLI & 二进制文件

概述

Cypress 采用复杂的构建和 CI/CD 流水线,管理跨平台 Electron 应用程序的构建、测试和分发复杂性。该系统确保在 Linux、macOS(x64 和 ARM64)和 Windows 平台上的构建一致性,同时通过 V8 快照等技术优化性能。

来源

CI/CD 系统

Cypress 在 CI/CD 流水线中同时使用了 CircleCI 和 GitHub Actions

  1. CircleCI:构建、测试和打包 Cypress 应用程序的主要系统
  2. GitHub Actions:用于更新浏览器版本、V8 快照缓存和安全扫描等特定任务

CircleCI 配置

CircleCI 配置分为两个文件

  • .circleci/config.yml:入口点,决定是否运行 CI
  • .circleci/workflows.yml:包含工作流定义的主配置文件

CI 流水线在以下场景触发

  • 提交到 develop 分支
  • 提交到发布分支(release/*
  • 准备好进行审查的拉取请求
  • 提交消息包含“run ci”
  • 通过 CircleCI UI 手动触发

来源

特定平台构建

Cypress 的构建在多个平台上执行,以确保兼容性

平台架构备注
Linuxx64默认构建,始终运行
LinuxARM64为 develop/release 分支运行
macOSx64为 develop/release 分支运行
macOSARM64为 develop/release 分支运行
Windowsx64为 develop/release 分支运行

该配置允许开发者在处理特定平台问题时,将自己的分支添加到特定的平台条件中

来源

包构建流程

Cypress 包构建流程包含几个关键步骤,将源代码转换为特定平台的二进制文件。

1. 依赖管理

CircleCI 实现了复杂的缓存机制,通过在可能时重用 node 模块来减少构建时间

来源

2. 构建过程

构建过程编译 TypeScript 代码库并准备分发

来源

3. Electron 打包

Electron 打包过程将应用程序捆绑到每个平台

来源

4. 二进制清理

二进制清理过程通过删除不必要的文件来减小最终包的大小

来源

V8 快照优化

Cypress 使用 V8 快照来提高启动性能。快照过程捕获初始化的 JavaScript 堆并将其序列化,通过反序列化堆而不是从头开始执行 JavaScript 来实现更快的启动。

Snapshot 配置

快照是特定于平台的,并且为每个平台配置不同

来源

快照更新自动化

V8 快照缓存通过 GitHub Actions 工作流自动更新

该工作流每天运行一次,并在发布分支上运行,确保 V8 快照缓存与最新的代码更改保持同步。它还提供了手动触发和从头生成快照的选项。

来源

浏览器版本管理

Cypress 通过 GitHub Actions 工作流自动更新浏览器版本,以在测试中保持与特定浏览器版本的兼容性

工作流

  1. 检查当前 Chrome 稳定版和测试版版本
  2. 查询 Chrome 版本历史 API
  3. 如果可用,则更新 CircleCI 配置
  4. 创建或更新一个包含更改的拉取请求

来源

安全扫描

Cypress 通过 GitHub Actions 在 CI/CD 流水线中实施安全扫描

  1. 软件组成分析 (SCA):扫描开源依赖项中的漏洞
  2. 静态应用程序安全测试 (SAST):分析自有代码中的安全问题

来源

拉取请求验证

Cypress 通过自动化的拉取请求验证来强制执行语义版本控制

验证确保

  1. PR 标题遵循语义版本控制格式(例如,“fix: issue description”)
  2. 为面向用户的更改添加了 Changelog 条目
  3. 正确引用了链接的 issue

来源

发布流程

发布过程将来自不同平台的构建输出组合起来,并将它们发布到 Cypress 分发渠道

该过程从主 CircleCI 工作流触发,并在单独的存储库 (cypress-publish-binary) 中执行,以处理实际的发布过程。

来源

发布资产管理

当发布新版本时,Cypress 会自动生成一个软件物料清单(SBOM),并将其作为发布资产进行附加。

SBOM 提供了有关发布中包含的组件的透明度,以满足合规性要求。

来源

结论

Cypress 的构建和 CI/CD 流程是一个全面的系统,可确保跨多个平台的质量和一致性。CircleCI 用于核心构建和测试,而 GitHub Actions 用于专门任务,提供了一个强大的管道,自动化了软件交付过程的大部分方面。

该系统的主要优势包括:

  1. 跨平台构建和测试
  2. 通过V8快照进行性能优化
  3. 自动化依赖项管理和安全扫描
  4. 代码更改的一致性验证
  5. 简化的发布流程

此基础设施使 Cypress 团队能够在支持多种平台和架构的同时,维护高质量的应用程序。