菜单

CI/CD 流水线

相关源文件

本页面描述了 Tabby 终端项目使用的持续集成和持续部署 (CI/CD) 管道。该管道自动化了 Tabby 在多个平台和架构上的构建、测试和部署。有关构建系统配置的信息,请参阅构建系统配置;有关发布过程的详细信息,请参阅发布过程

概述

Tabby 使用 GitHub Actions 实现了一个全面的 CI/CD 管道。该管道确保代码更改自动构建、测试并打包为所有支持的平台和架构。该管道在代码推送和拉取请求时触发,并在基于标签的发布期间执行额外步骤。

来源:.github/workflows/build.yml1-421 .github/workflows/docs.yml1-40 .github/workflows/codeql-analysis.yml1-71

工作流配置

Tabby 的 CI/CD 管道在位于 .github/workflows 目录中的 GitHub Actions 工作流程文件中定义。主要工作流程包括:

工作流文件目的
build.yml所有平台的主要构建管道
docs.yml文档生成和部署
codeql-analysis.yml代码安全分析

来源:.github/workflows/build.yml1-3 .github/workflows/docs.yml1-3 .github/workflows/codeql-analysis.yml12-22

构建管道结构

构建管道由在初始 linting 通过后并行运行的多个作业组成。每个作业都针对特定平台并包含多架构支持。

来源:.github/workflows/build.yml4-40 .github/workflows/build.yml132-153 .github/workflows/build.yml300-315

CI 作业和步骤

Lint 作业

Lint 作业是管道的第一步,作为其他构建作业的关卡。它执行代码质量检查,以确保代码库保持一致的风格并避免常见问题。

关键步骤

  1. 检出代码
  2. 设置 Node.js 环境
  3. 安装依赖项
  4. 构建 TypeScript 类型定义
  5. 运行 linting 检查

来源:.github/workflows/build.yml4-32

特定平台构建作业

macOS 构建

macOS 构建作业为 Intel (x86_64) 和 Apple Silicon (arm64) 架构编译 Tabby。它包括对官方发布的代码签名进行特殊处理。

关键步骤

  1. 设置 Rust 和 Node.js 环境
  2. 使用 yarn 安装依赖项
  3. 使用 webpack 打包应用程序
  4. 预打包插件
  5. 构建和签名包(用于标签和受保护的分支)
  6. 将调试符号上传到 Sentry
  7. 打包并上传工件(.dmg 和 .zip 文件)

来源:.github/workflows/build.yml34-130

Linux 构建

Linux 构建作业最为复杂,因为它处理多种架构(x64、arm64、arm)并为各种 Linux 发行版(Debian、Ubuntu、Red Hat 等)生成软件包。

关键步骤

  1. 使用特定架构工具设置构建环境
  2. 安装依赖项
  3. 使用 webpack 打包应用程序
  4. 预打包插件
  5. 构建软件包(AppImage、DEB、RPM、Pacman、tarball)
  6. 将软件包上传到 packagecloud.io(用于带标签的发布)
  7. 上传工件

来源:.github/workflows/build.yml132-298

Windows 构建

Windows 构建作业为 x64 和 arm64 架构创建软件包,并使用 DigiCert 的 Software Trust Manager 对代码签名进行特殊处理。

关键步骤

  1. 设置构建环境(Node.js、Rust)
  2. 配置代码签名(用于带标签的发布)
  3. 构建应用程序
  4. 打包为安装程序和便携版
  5. 将调试符号上传到 Sentry
  6. 上传工件

来源:.github/workflows/build.yml300-420

文档流程

文档管道构建并将 API 文档部署到 Firebase Hosting。

关键步骤

  1. 检出代码
  2. 设置 Node.js 环境
  3. 构建 TypeScript 类型定义
  4. 生成文档
  5. 部署到 Firebase Hosting

来源:.github/workflows/docs.yml1-40 firebase.json1-11

代码安全分析

Tabby 使用 GitHub 的 CodeQL 进行静态代码分析,以识别安全漏洞和代码质量问题。

关键方面:

  1. 在推送到 master 和向 master 的拉取请求时运行
  2. 每周定时运行
  3. 目前专注于 JavaScript 分析
  4. 结果报告到 GitHub 安全选项卡

来源:.github/workflows/codeql-analysis.yml1-71

发布流程

CI/CD 管道包括对由标签创建触发的官方发布的特殊处理

  1. macOS 和 Windows 构建激活代码签名
  2. Linux 软件包上传到 packagecloud.io 仓库
  3. 调试符号上传到 Sentry 用于错误跟踪
  4. 来自受保护分支的带标签构建获得完整的发布处理

当新的版本标签被推送时,管道自动执行以下操作:

  • 为所有支持的平台和架构构建软件包
  • 使用相应证书对软件包进行签名
  • 将软件包上传到分发渠道

来源:.github/workflows/build.yml82-94 .github/workflows/build.yml252-261 .github/workflows/build.yml322-386

构建工件

该管道为每个平台生成以下工件:

平台工件
macOS.dmg 安装程序, .zip 归档
LinuxAppImage、.deb 软件包、.rpm 软件包、Pacman 软件包、.tar.gz 归档
Windows.exe 安装程序, 便携式 .zip

这些工件被上传到 GitHub Actions,并可用于测试或发布分发。

来源:.github/workflows/build.yml113-130 .github/workflows/build.yml262-298 .github/workflows/build.yml403-420

环境配置

CI/CD 管道使用多个环境变量和秘密来配置构建过程。其中包括:

  1. 每个平台的代码签名凭据
  2. 服务集成(Sentry、packagecloud.io)的 API 令牌
  3. 特定平台构建参数

这些秘密存储在 GitHub 的仓库秘密中,并在运行时注入到工作流程中。

来源:.github/workflows/build.yml87-94 .github/workflows/build.yml108-111 .github/workflows/build.yml376-385