菜单

持续集成

相关源文件

本页面概述了 drawio-desktop 仓库中使用的持续集成 (CI) 设置。它解释了所使用的 CI 系统、代码更改触发的工作流、构建过程、特定于平台的构建以及工件生成。本文件特别关注自动化构建和测试基础架构 - 有关构建配置和打包过程的详细信息,请参阅构建与打包

使用的 CI 系统

drawio-desktop 项目使用三个主要的 CI 系统来确保所有支持平台上的可靠构建。

  1. GitHub Actions:用于在所有平台(Windows、macOS 和 Linux)上构建的主要 CI 系统。
  2. Travis CI:用作辅助 CI 系统,主要用于 macOS 和 Linux 构建。
  3. AppVeyor:用作辅助 CI 系统,主要用于 Windows 构建。

这种多 CI 方法提供了冗余并实现了不同的构建配置。

CI 系统主要平台工作流文件
GitHub ActionsWindows、macOS、Linux.github/workflows/electron-builder.yml .github/workflows/electron-builder-win.yml
Travis CImacOS、Linux.travis.yml
AppVeyorWindowsappveyor.yml

来源

CI 工作流

CI 工作流主要由标签推送触发。当一个模式为 v*(例如,v1.0.0)的标签被推送到仓库时,所有 CI 系统都会为其各自的平台触发构建。

来源

构建流程

构建过程包含几个关键步骤,这些步骤在所有 CI 系统中都是通用的。

  1. 检出仓库:检出仓库及其子模块。
  2. drawio-dev 仓库:检出 drawio-dev 仓库以检索最新的 draw.io 核心文件。
  3. 环境设置:安装 Node.js 和 Yarn。
  4. 依赖安装:使用 Yarn 安装项目依赖。
  5. 同步:运行 sync.js/sync.cjs 脚本准备构建。
  6. 构建:执行特定于平台的构建。
  7. 工件发布:将构建的工件发布到 GitHub Releases。

来源

同步流程

sync.js/sync.cjs 脚本在构建过程中起着至关重要的作用。它通过以下方式为构建准备应用程序:

  1. 从 drawio 子模块复制必要文件
  2. 配置应用程序设置
  3. 为特定构建可选地禁用自动更新功能

该脚本接受一个可选参数 disableUpdate,当提供此参数时,它将修改配置以禁用自动更新功能。

yarn run sync            # Normal build with auto-update enabled
yarn run sync disableUpdate  # Build with auto-update disabled

这用于 32 位 Windows、ARM64 Windows 和 APPX 构建,以确保只有 64 位 Windows 版本会自动更新。

来源

特定平台构建

CI 系统以不同的方式处理特定于平台的构建,为每个平台使用不同的脚本。

Windows 构建

Windows 构建由以下脚本处理:

  1. yarn run release-win:构建 64 位 Windows 版本
  2. yarn run release-win32:构建 32 位 Windows 版本
  3. yarn run release-win-arm64:构建 ARM64 Windows 版本
  4. yarn run release-appx:构建 Windows 应用商店 (APPX) 包

这些脚本使用 electron-builder 配置文件,例如 electron-builder-win.jsonelectron-builder-win32.jsonelectron-builder-win-arm64.jsonelectron-builder-appx.json

macOS 构建

macOS 构建由以下命令处理:

  1. yarn run release-linux:尽管名称如此,此脚本在 macOS 上运行时会同时构建 Linux 和 macOS 版本。

此脚本使用 electron-builder-linux-mac.json 配置文件。

Linux 构建

Linux 构建由以下命令处理:

  1. yarn run release-linux:构建 AppImage、DEB 和 RPM 包
  2. yarn run release-snap:构建 Snap 包

这些脚本使用 electron-builder-linux-mac.jsonelectron-builder-snap.json 配置文件。

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

平台工件
WindowsNSIS 安装程序 (.exe)、便携版 (.exe)、MSI 包 (.msi)、Windows 应用商店包 (.appx)
macOS磁盘映像 (.dmg)
LinuxAppImage (.AppImage)、Debian 包 (.deb)、RPM 包 (.rpm)、Snap 包 (.snap)

来源

环境变量和密钥

CI 系统使用多个环境变量和秘密来启用代码签名、公证和部署。

GitHub Actions Secrets

用于 macOS 和 Linux 构建

  • APPLEID:用于公证的 Apple ID
  • APPLEIDPASS:用于公证的 Apple ID 密码
  • APPLE_TEAM_ID:Apple Developer Team ID
  • CSC_KEY_PASSWORD:代码签名证书密码
  • CSC_LINK:代码签名证书
  • GITHUB_TOKEN:用于发布 releases 的 GitHub Token
  • SNAP_TOKEN:用于发布到 Snap Store 的 Snapcraft Token

用于 Windows 构建

  • WIN_CSC_LINK:Windows 代码签名证书
  • WIN_CSC_KEY_PASSWORD:Windows 代码签名证书密码
  • GITHUB_TOKEN:用于发布 releases 的 GitHub Token

下表显示了哪些秘密被哪个 CI 系统使用。

秘密GitHub ActionsTravis CIAppVeyor
APPLEID
APPLEIDPASS
APPLE_TEAM_ID
CSC_KEY_PASSWORD
CSC_LINK
WIN_CSC_LINK
WIN_CSC_KEY_PASSWORD
GITHUB_TOKEN
SNAP_TOKEN

来源

总结

drawio-desktop 的持续集成系统支持在所有支持的平台上自动构建和测试应用程序。使用多个 CI 系统可提供冗余并支持不同的构建配置。CI 过程由标签推送触发,包括从仓库检出到工件发布的多个步骤。

该系统使用特定的脚本和配置文件来处理不同的平台。

  • sync.js/sync.cjs:为构建准备应用程序
  • release-winrelease-win32release-win-arm64release-appx:构建 Windows 工件
  • release-linux:构建 Linux 和 macOS 工件
  • release-snap:构建 Snap 包

这些脚本使用 electron-builder 和特定于平台的配置文件来创建最终工件,然后将这些工件发布到 GitHub Releases,对于 Snap 包,则发布到 Snap Store。

来源