菜单

发布流程

相关源文件

本文档详细介绍了跨多个平台和架构构建、签名、打包和分发 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 的发布流程区分常规构建和官方版本

  1. 常规构建:由对仓库的任何推送或拉取请求触发
  2. 官方版本:由推送 Git 标签触发

对于官方版本,会执行额外步骤,包括代码签名和发布到分发渠道。

来源:.github/workflows/build.yml2 scripts/build-macos.mjs6 scripts/build-windows.mjs7 scripts/build-linux.mjs6

平台矩阵

Tabby 构建面向多个平台和架构

平台架构包格式代码签名
Windowsx64,arm64NSIS 安装程序 (.exe),便携式 (.zip)软件信任管理器
macOSx86_64, arm64 (Apple Silicon)DMG、ZIP苹果公证
Linuxx64, arm64, armhfAppImage, 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 用于为所有平台创建可分发软件包。其配置在 electron-builder.yml 中指定。

关键配置要素

  • 应用程序元数据(ID、名称)
  • 文件包含和排除
  • 特定平台设置
  • 特殊构建要求
  • 构建产物命名约定

特定平台的构建脚本(build-windows.mjsbuild-macos.mjsbuild-linux.mjs)根据目标架构和环境向 Electron Builder 传递额外参数。

来源:electron-builder.yml1-109 scripts/build-windows.mjs10-57 scripts/build-macos.mjs8-46 scripts/build-linux.mjs8-29

代码签名过程

Windows 代码签名

Windows 软件包在构建官方版本(从标签)时使用 DigiCert 的软件信任管理器进行签名。签名过程使用存储在 CI 环境中的证书。

签名过程在工作流文件和 Windows 构建脚本中定义,后者使用软件信任管理器 CLI(smctl)对可执行文件进行签名。

来源:.github/workflows/build.yml322-385 scripts/build-windows.mjs30-52 electron-builder.yml40-47

macOS 代码签名和公证

macOS 构建在作为官方版本发布时,会经过 Apple 的代码签名和公证流程。

macOS 构建使用通过环境变量(CSC_LINKCSC_KEY_PASSWORD)指定的 Apple 开发者证书。构建配置了适用于应用程序功能的相应权限。

来源:.github/workflows/build.yml82-94 scripts/build-macos.mjs10-46 build/mac/entitlements.plist1-17 electron-builder.yml48-66

分发渠道

Tabby 版本通过多个渠道分发

1. GitHub Releases

带有标签的构建会自动发布到 GitHub Releases,为所有平台提供主要分发渠道。

2. Packagecloud.io(仅限 Linux)

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。

  1. 为原生模块准备符号文件
  2. Sentry CLI 工具上传调试信息文件
  3. 为每个插件上传源映射到 Sentry
  4. Sentry 中的版本与 Git 提交关联

此过程可实现 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 遵循语义化版本控制,版本号来源于

  1. 对于带标签的版本:Git 标签(例如,v1.0.0 → 版本 1.0.0
  2. 对于开发构建:最后一个标签和 git 提交信息的组合

版本通过 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 中定义的独立工作流处理。

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