菜单

CI/CD 流水线

相关源文件

本文档描述了 Hydra Launcher 的持续集成和持续部署 (CI/CD) 管道。该管道自动化了应用程序在多个平台上的构建、测试和发布。有关 Electron Builder 配置的详细信息,请参阅 Electron Builder 配置

流水线概览

Hydra 的 CI/CD 管道是使用 GitHub Actions 工作流实现的。主要有三个工作流:

  1. 构建工作流 - 在拉取请求时触发
  2. 发布工作流 - 在推送到主分支时触发
  3. Lint 工作流 - 在拉取请求时触发,用于代码质量检查

来源: .github/workflows/build.yml .github/workflows/release.yml .github/workflows/lint.yml

构建工作流

构建工作流在每次拉取请求时触发。其主要目的是验证更改可以成功地为所有受支持的平台构建。

构建工作流步骤

  1. 检出代码库
  2. 设置环境
    • 安装 Node.js 20.18.0
    • 使用 Yarn 安装项目依赖
    • 设置 Python 3.9
    • 安装 Python 依赖
  3. 构建 Python RPC 组件
    • 使用 cx_Freeze 编译 Python RPC 服务器
  4. 平台特定构建
    • 对于 Windows:使用 yarn build:win 构建应用程序
    • 对于 Linux:安装所需软件包并使用 yarn build:linux 构建
  5. 上传构建产物
    • 上传到 S3 存储,方便审查者访问
    • 创建 GitHub Actions 产物以供持久化

来源: .github/workflows/build.yml9-90

构建环境变量

构建过程使用多个环境变量来为不同环境配置应用程序。在拉取请求时,它使用预发布(staging)API URL

可变描述应用场景
MAIN_VITE_API_URL后端服务的 API URL主进程
MAIN_VITE_AUTH_URL认证服务 URL主进程
MAIN_VITE_CHECKOUT_URL结账/支付 URL主进程
RENDERER_VITE_EXTERNAL_RESOURCES_URL外部资源 URL渲染进程
MAIN_VITE_EXTERNAL_RESOURCES_URL外部资源 URL主进程
RENDERER_VITE_SENTRY_DSN用于错误报告的 Sentry DSN渲染进程
RENDERER_VITE_REAL_DEBRID_REFERRAL_IDReal-Debrid 推荐 ID渲染进程
RENDERER_VITE_TORBOX_REFERRAL_CODETorBox 推荐代码渲染进程

来源: .github/workflows/build.yml47-57 .github/workflows/build.yml62-72 .env.example src/main/vite-env.d.ts src/renderer/src/vite-env.d.ts

上传到 S3 存储

构建工作流包含一个将构建产物上传到 S3 兼容存储的步骤,方便开发人员访问和测试拉取请求中的构建。

上传过程由 upload-build.cjs 脚本处理,该脚本执行以下操作:

  1. 连接到 S3 兼容存储服务
  2. 上传具有特定文件扩展名(.deb, .exe, .pacman)的构建产物
  3. 设置上传文件的过期时间(3 天)
  4. 发送带有构建详细信息的 webhook 通知

来源: scripts/upload-build.cjs .github/workflows/build.yml74-84

发布工作流

当更改推送到主分支时,发布工作流被触发。它为所有受支持的平台构建应用程序,并创建一个 GitHub 草稿发布。

发布工作流步骤

发布工作流的步骤与构建工作流类似,但有几个主要区别:

  1. 它使用生产环境(production)变量而非预发布(staging)变量
  2. 它创建一个包含所有构建产物的 GitHub 草稿发布
  3. 它不上传到 S3 存储

来源: .github/workflows/release.yml11-109

发布环境变量

发布过程使用生产环境变量而非预发布(staging)变量

可变描述应用场景
MAIN_VITE_API_URL生产 API URL主进程
MAIN_VITE_AUTH_URL生产认证 URL主进程
MAIN_VITE_CHECKOUT_URL生产结账 URL主进程
RENDERER_VITE_EXTERNAL_RESOURCES_URL生产外部资源 URL渲染进程
MAIN_VITE_EXTERNAL_RESOURCES_URL生产外部资源 URL主进程
RENDERER_VITE_SENTRY_DSN用于错误报告的 Sentry DSN渲染进程
RENDERER_VITE_REAL_DEBRID_REFERRAL_IDReal-Debrid 推荐 ID渲染进程
RENDERER_VITE_TORBOX_REFERRAL_CODETorBox 推荐代码渲染进程

来源: .github/workflows/release.yml49-58 .github/workflows/release.yml63-73

Lint 工作流

Lint 工作流在拉取请求时触发,并执行代码质量检查。

Lint 工作流步骤

  1. 检出代码库
  2. 设置 Node.js 并安装依赖
  3. 运行代码质量检查:
    • 使用 commitlint 验证提交信息
    • 运行 TypeScript 类型检查
    • 运行 ESLint 检查代码问题
    • 使用 Prettier 验证代码格式

来源: .github/workflows/lint.yml9-36

构建输出

CI/CD 管道为不同平台生成各种构建产物

文件扩展名平台描述
.exeWindowsWindows 安装程序
-portable.exeWindowsWindows 便携式可执行文件
.zipWindows压缩的 Windows 构建
.debLinuxDebian 软件包
.rpmLinuxRPM 软件包
.tar.gzLinuxTarball 归档
.pacmanLinuxArch Linux 软件包
.dmgmacOSmacOS 磁盘映像
.yml所有用于自动更新的元数据
.blockmap所有用于自动更新的增量文件

来源: .github/workflows/build.yml86-99 .github/workflows/release.yml77-89 .github/workflows/release.yml93-106

Hydra 代码库中的 CI/CD 架构

下图说明了 CI/CD 管道组件与 Hydra 代码库和外部服务之间的关系:

来源: .github/workflows/build.yml .github/workflows/release.yml .github/workflows/lint.yml scripts/upload-build.cjs

环境变量和密钥

CI/CD 管道依赖于存储在 GitHub 仓库中的几个环境变量和秘密(secrets)

GitHub 秘密

秘密描述
GITHUB_TOKEN由 GitHub Actions 自动提供,用于仓库访问
SENTRY_AUTH_TOKEN用于 Sentry 错误跟踪集成的认证令牌
S3_ENDPOINTS3 兼容存储的端点 URL
S3_ACCESS_KEY_IDS3 兼容存储的访问密钥
S3_SECRET_ACCESS_KEYS3 兼容存储的秘密密钥
S3_BUILDS_BUCKET_NAME用于存储构建的存储桶名称
BUILDS_URL访问已上传构建的基础 URL
BUILD_WEBHOOK_URL用于构建通知的 Webhook URL

GitHub 变量

可变描述
MAIN_VITE_API_URL生产 API URL
MAIN_VITE_STAGING_API_URL预发布 API URL
MAIN_VITE_AUTH_URL生产认证 URL
MAIN_VITE_STAGING_AUTH_URL预发布认证 URL
MAIN_VITE_CHECKOUT_URL生产结账 URL
MAIN_VITE_STAGING_CHECKOUT_URL预发布结账 URL
EXTERNAL_RESOURCES_URL外部资源 URL
SENTRY_DSN用于错误报告的 Sentry DSN
RENDERER_VITE_REAL_DEBRID_REFERRAL_IDReal-Debrid 推荐 ID
RENDERER_VITE_TORBOX_REFERRAL_CODETorBox 推荐代码

来源: .github/workflows/build.yml47-57 .github/workflows/build.yml62-72 .env.example

工作流执行顺序

下图说明了 CI/CD 管道中的操作顺序:

来源: .github/workflows/build.yml .github/workflows/release.yml .github/workflows/lint.yml scripts/upload-build.cjs

结论

Hydra Launcher CI/CD 管道确保了应用程序在多个平台上的持续构建、测试和部署。它提供自动代码质量检查、生成构建产物并简化发布流程。

该管道与外部服务集成,例如用于构建产物的 S3 存储、用于构建状态的 webhook 通知以及用于错误跟踪的 Sentry。这种全面的方法有助于为 Hydra Launcher 应用程序保持高代码质量和顺畅的发布流程。