本页面描述了 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
Lint 作业是管道的第一步,作为其他构建作业的关卡。它执行代码质量检查,以确保代码库保持一致的风格并避免常见问题。
关键步骤
来源:.github/workflows/build.yml4-32
macOS 构建作业为 Intel (x86_64) 和 Apple Silicon (arm64) 架构编译 Tabby。它包括对官方发布的代码签名进行特殊处理。
关键步骤
来源:.github/workflows/build.yml34-130
Linux 构建作业最为复杂,因为它处理多种架构(x64、arm64、arm)并为各种 Linux 发行版(Debian、Ubuntu、Red Hat 等)生成软件包。
关键步骤
来源:.github/workflows/build.yml132-298
Windows 构建作业为 x64 和 arm64 架构创建软件包,并使用 DigiCert 的 Software Trust Manager 对代码签名进行特殊处理。
关键步骤
来源:.github/workflows/build.yml300-420
文档管道构建并将 API 文档部署到 Firebase Hosting。
关键步骤
来源:.github/workflows/docs.yml1-40 firebase.json1-11
Tabby 使用 GitHub 的 CodeQL 进行静态代码分析,以识别安全漏洞和代码质量问题。
关键方面:
来源:.github/workflows/codeql-analysis.yml1-71
CI/CD 管道包括对由标签创建触发的官方发布的特殊处理
当新的版本标签被推送时,管道自动执行以下操作:
来源:.github/workflows/build.yml82-94 .github/workflows/build.yml252-261 .github/workflows/build.yml322-386
该管道为每个平台生成以下工件:
| 平台 | 工件 |
|---|---|
| macOS | .dmg 安装程序, .zip 归档 |
| Linux | AppImage、.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 管道使用多个环境变量和秘密来配置构建过程。其中包括:
这些秘密存储在 GitHub 的仓库秘密中,并在运行时注入到工作流程中。
来源:.github/workflows/build.yml87-94 .github/workflows/build.yml108-111 .github/workflows/build.yml376-385