本文档详细介绍了跨多个平台和架构构建、签名、打包和分发 Tabby 版本的自动化过程。有关构建系统配置的信息,请参阅构建系统配置;有关 CI/CD 流水线详细信息,请参阅CI/CD 流水线。
Tabby 使用 GitHub Actions 进行持续集成和发布工作流。发布流程设计为高度自动化,由 Git 推送触发,特别是通过创建发布标签触发。该系统为 Windows、macOS 和 Linux 生成可安装和便携式软件包,并支持多种 CPU 架构。
来源:.github/workflows/build.yml1-421 scripts/build-macos.mjs1-47 scripts/build-windows.mjs1-62 scripts/build-linux.mjs1-33
Tabby 的发布流程区分常规构建和官方版本
对于官方版本,会执行额外步骤,包括代码签名和发布到分发渠道。
来源:.github/workflows/build.yml2 scripts/build-macos.mjs6 scripts/build-windows.mjs7 scripts/build-linux.mjs6
Tabby 构建面向多个平台和架构
| 平台 | 架构 | 包格式 | 代码签名 |
|---|---|---|---|
| Windows | x64,arm64 | NSIS 安装程序 (.exe),便携式 (.zip) | 软件信任管理器 |
| macOS | x86_64, arm64 (Apple Silicon) | DMG、ZIP | 苹果公证 |
| Linux | x64, arm64, armhf | AppImage, DEB, RPM, Pacman, tarball | 未签名 |
| Web | 不适用 | tarball | 不适用 |
来源:.github/workflows/build.yml34-130 .github/workflows/build.yml132-298 .github/workflows/build.yml300-420 electron-builder.yml37-104
构建过程包括将源代码转换为特定平台软件包的几个步骤。
来源:.github/workflows/build.yml51-130 .github/workflows/build.yml163-246 .github/workflows/build.yml317-391
Electron Builder 用于为所有平台创建可分发软件包。其配置在 electron-builder.yml 中指定。
关键配置要素
特定平台的构建脚本(build-windows.mjs、build-macos.mjs、build-linux.mjs)根据目标架构和环境向 Electron Builder 传递额外参数。
来源:electron-builder.yml1-109 scripts/build-windows.mjs10-57 scripts/build-macos.mjs8-46 scripts/build-linux.mjs8-29
Windows 软件包在构建官方版本(从标签)时使用 DigiCert 的软件信任管理器进行签名。签名过程使用存储在 CI 环境中的证书。
签名过程在工作流文件和 Windows 构建脚本中定义,后者使用软件信任管理器 CLI(smctl)对可执行文件进行签名。
来源:.github/workflows/build.yml322-385 scripts/build-windows.mjs30-52 electron-builder.yml40-47
macOS 构建在作为官方版本发布时,会经过 Apple 的代码签名和公证流程。
macOS 构建使用通过环境变量(CSC_LINK 和 CSC_KEY_PASSWORD)指定的 Apple 开发者证书。构建配置了适用于应用程序功能的相应权限。
来源:.github/workflows/build.yml82-94 scripts/build-macos.mjs10-46 build/mac/entitlements.plist1-17 electron-builder.yml48-66
Tabby 版本通过多个渠道分发
带有标签的构建会自动发布到 GitHub Releases,为所有平台提供主要分发渠道。
Linux 软件包(DEB、RPM)会上传到 packagecloud.io,方便通过系统包管理器进行安装。
来源:.github/workflows/build.yml252-262 scripts/build-macos.mjs34-42 scripts/build-windows.mjs22-28 scripts/build-linux.mjs20-27
为了错误追踪和崩溃分析,调试符号会上传到 Sentry。
此过程可实现 JavaScript 和原生代码崩溃的正确堆栈跟踪符号化。
来源:.github/workflows/build.yml104-112 .github/workflows/build.yml242-250 .github/workflows/build.yml394-401 scripts/sentry-upload.mjs1-25
构建过程生成的构建产物遵循一致的命名约定
tabby-{version}-{package-type}-{architecture}.{extension}
例如
tabby-1.0.0-setup-x64.exe (Windows 安装程序)tabby-1.0.0-macos-arm64.dmg (macOS Apple Silicon)tabby-1.0.0-linux-amd64.deb (Linux Debian 软件包)来源:electron-builder.yml39 electron-builder.yml44 electron-builder.yml51 electron-builder.yml71
Tabby 遵循语义化版本控制,版本号来源于
v1.0.0 → 版本 1.0.0)版本通过 Electron Builder 配置中的 extraMetadata 属性注入到构建过程中。
来源:scripts/build-macos.mjs25-27 scripts/build-windows.mjs18-20 scripts/build-linux.mjs16-18 app/package.json11
除了发布应用程序二进制文件,API 文档也会在更改推送到主分支时自动生成并发布到 Firebase hosting。此过程由 .github/workflows/docs.yml 中定义的独立工作流处理。