菜单

构建与部署

相关源文件

此页面记录了 Tabby 的构建和部署流程,解释了该应用程序如何跨多个平台进行编译、打包和分发。有关设置开发环境的信息,请参阅开发指南设置开发环境

概述

Tabby 使用强大的构建和部署系统,支持多个平台(Windows、macOS、Linux)和架构(x64、arm64、armhf)。构建过程通过 Webpack 进行打包,并使用 Electron Builder 创建平台特定的安装程序和便携式软件包,将 TypeScript 源代码转换为可分发软件包。整个过程通过 GitHub Actions 工作流自动化,这些工作流负责应用程序的构建、测试、签名和分发。

构建和部署架构

来源: package.json102-115 .github/workflows/build.yml1-421

构建系统配置

包配置

Tabby 的构建系统通过两个独立的 package.json 文件进行配置

  1. 根目录下的 package.json - 包含整个项目的开发依赖和构建脚本
  2. app/package.json - 定义了实际被打包和分发的应用程序

根目录 package.json 中的关键构建脚本

脚本目的
build构建类型定义和模块
build:typings生成 TypeScript 类型定义
watch监视更改并重新构建(开发模式)
start在开发模式下运行应用程序
docs构建 API 文档
lint运行 ESLint 检查代码质量

来源: package.json102-115

关键依赖项

类别依赖项
框架Angular, RxJS
构建工具Webpack, TypeScript, Electron Builder
Electronelectron, @electron/rebuild
UIBootstrap, FontAwesome
测试ESLint

来源: package.json2-94 app/package.json17-46

构建目录结构

来源: package.json1 app/package.json1 .github/workflows/build.yml1 .github/workflows/docs.yml1

构建流程

构建过程通过多个阶段将 TypeScript 源代码转换为平台特定软件包。

开发构建

对于本地开发,Tabby 使用 Webpack 的监视模式,在代码更改时持续重新编译。

来源: package.json105-106 app/package.json14-15

生产构建流程

生产构建过程涉及多个阶段

来源: package.json103-104 .github/workflows/build.yml70-83 .github/workflows/build.yml226-230 .github/workflows/build.yml344-347

CI/CD 流水线

Tabby 使用 GitHub Actions 进行持续集成和部署,并为构建软件包和文档设置了独立的工作流。

构建工作流结构

来源: .github/workflows/build.yml1-421

构建矩阵

CI 流水线使用构建矩阵为所有受支持的平台和架构构建 Tabby

作业平台架构
macOS 构建macOSx86_64, arm64
Linux 构建Linuxx64, arm64, armhf
Windows 构建Windowsx64,arm64

来源: .github/workflows/build.yml34-46 .github/workflows/build.yml132-151 .github/workflows/build.yml300-310

软件包制品

每个平台构建作业都会生成多种类型的软件包

Windows 软件包

  • 安装程序 (.exe)
  • 便携版 (.zip)

macOS 软件包

  • 磁盘映像 (.dmg)
  • 归档文件 (.zip)

Linux 软件包

  • AppImage
  • Debian 软件包 (.deb)
  • RPM 软件包 (.rpm)
  • Arch Linux 软件包 (.pacman)
  • 压缩包 (.tar.gz)
  • Web 构建 (仅限 x64)

来源: .github/workflows/build.yml114-129 .github/workflows/build.yml263-298 .github/workflows/build.yml404-420

代码签名

对于正式发布(由标签触发),软件包会进行签名以确保真实性

macOS 签名

macOS 构建使用 Apple 开发者证书签名,并经 Apple 公证服务公证。

来源: .github/workflows/build.yml82-94

Windows 签名

Windows 构建使用 DigiCert 的 Software Trust Manager 进行签名

来源: .github/workflows/build.yml322-386

发布流程

发布触发器

当标签被推送到仓库时,发布过程会自动触发

来源: .github/workflows/build.yml84 .github/workflows/build.yml254 .github/workflows/build.yml324

分发渠道

Tabby 通过多个渠道分发

渠道包类型触发器
GitHub 发布所有软件包类型Git 标签
packagecloud.ioLinux (.deb, .rpm)Git 标签
Keygen更新服务Git 标签

来源: .github/workflows/build.yml252-261 .github/workflows/build.yml87 .github/workflows/build.yml378

Linux 软件包仓库

Linux 软件包通过 packagecloud.io 分发,支持多种发行版

Debian/Ubuntu:

  • Ubuntu: bionic, focal, hirsute, impish, jammy, kinetic, noble, oracular
  • Debian: jessie, stretch, buster, bullseye, bookworm, trixie, testing, unstable

基于 RPM 的:

  • RHEL/CentOS: 8, 9
  • Oracle Linux: 6, 7

来源: .github/workflows/build.yml258-261

错误追踪与符号

Tabby 在生产环境中使用 Sentry 进行错误追踪。调试符号在构建过程中上传,以实现正确的堆栈跟踪符号化。

来源: .github/workflows/build.yml104-111 .github/workflows/build.yml242-250 .github/workflows/build.yml394-401

文档部署

API 文档自动生成并部署到 Firebase Hosting

来源: .github/workflows/docs.yml1-40 firebase.json1-10 package.json109

构建问题故障排除

常见的构建问题及解决方案

问题解决方案
原生模块编译错误更新 node-gyp 或运行 yarn postinstall 以重新构建原生依赖项
代码签名失败确保为签名证书设置了正确的环境变量
缺少依赖项构建前运行 yarn 安装依赖项
交叉编译问题为目标架构使用正确的工具链
构建过程中内存不足使用 NODE_OPTIONS=--max_old_space_size=4096 增加 Node.js 内存限制

来源: package.json111 .github/workflows/build.yml45-48 .github/workflows/build.yml155-161