云端打包流程——GitHub Actions 在背后做了什么
一键发布背后的流水线
在 PakePlus 配置页面点"发布"按钮,触发的不是一个本地编译过程,而是一串 GitHub 上的自动化动作:
flowchart LR
A[点发布按钮] --> B[PakePlus 客户端]
B --> C{你自己的 fork 仓库}
C --> D[触发 GitHub Actions]
D --> E[Windows Runner 编译]
D --> F[macOS Runner 编译]
D --> G[Linux Runner 编译]
E --> H[.exe / .dmg / .deb]
F --> H
G --> H
H --> I[上传到 GitHub Release]
I --> J[PakePlus 通知你打包完成]
第 1 步:PakePlus 客户端同步配置
点发布按钮后,PakePlus 本地客户端做的第一件事是:
- 读取当前项目的所有配置(APP 名称、网站地址、窗口模式、图标、JS 注入脚本等)
- 读取你可能上传的 dist 静态文件
- 通过 GitHub API(用你的 Token)把这些内容 push 到你 fork 出来的模板仓库的某个分支
- 推送完成后触发 GitHub Actions workflow
这一步完成很快(几秒钟),瓶颈在 dist 文件大小和 GitHub API 响应速度。
第 2 步:GitHub Actions 接收事件
你的 fork 仓库里预设了一套 .github/workflows/*.yml 文件——这是 PakePlus 模板自带的。当 PakePlus push 上来后,GitHub 自动:
- 检测到推送事件
- 触发 workflow 执行
- 并行启动多个 Runner(Windows / macOS / Linux)
GitHub Actions 的免费额度
| 资源 | 免费额度 |
|---|---|
| 公共仓库 | 无限 |
| 私有仓库 | 2000 分钟/月 |
| macOS Runner | 1000 分钟/月 |
| 同时运行任务数 | 2 |
| 单任务最长 | 6 小时 |
大多数 PakePlus 打包一次用 2-5 分钟,2000 分钟足够每月打 400-1000 次。
第 3 步:各 Runner 并行编译
每个 Runner 做的事情:
Windows Runner
windows-latest(Windows Server 2022,含 x64 和 ARM64)- 安装 Rust toolchain
- 安装 Tauri CLI
- 读取 fork 仓库里的项目配置
- 编译出
.exe安装包 + 绿色免安装版 - 可选:打包 Win7 兼容版
macOS Runner
macos-latest(Apple Silicon)+macos-13(Intel)- 分别编译 Apple Silicon 和 Intel 二进制
- 合成通用二进制(Universal Binary)
- 打包成
.dmg
Linux Runner
ubuntu-latest(x64)+ubuntu-22.04-arm(ARM64,模拟)- 安装 WebKitGTK 等编译依赖
- 编译出
.deb和.AppImage - 可选:打包统信/麒麟专用版本
移动端额外步骤
如果需要 Android/iOS,还有额外的编译步骤:
- Android:安装 Android NDK → 用 Gradle 编译 APK
- iOS:安装 Xcode → 用原生框架编译 IPA
第 4 步:产物上传到 GitHub Release
所有 Runner 编译完成后,产物统一上传到 GitHub 的 Release 页面:
- Release 自动创建(以版本号命名)
- 每个产物作为一个 Asset 上传
- Release 页面公开可访问
用户最终在 GitHub Release 页面看到的就是这样一个页面:所有平台的安装包按文件名排列,点哪个下哪个。
第 5 步:PakePlus 通知
PakePlus 客户端会轮询 GitHub API 查询 Actions 运行状态,或者通过 webhook 接收通知:
- 进行中 → 显示进度条和百分比
- 成功 → 显示"打包完成"并跳转到 Release 页面
- 失败 → 显示错误日志,引导排查
常见失败原因
| 阶段 | 失败原因 | 怎么修 |
|---|---|---|
| 推送阶段 | Token scope 不够 | 确认 repo + workflow 都勾了 |
| 推送阶段 | 网络超时 | 重试或换网络环境 |
| Actions 触发 | 私有仓库超 2000 分钟/月 | 等下月重置或升级 GitHub Pro |
| Windows 编译 | 缺少 WebView2 | PakePlus 模板通常处理了,看日志 |
| macOS 编译 | Xcode 版本不匹配 | 检查 workflow 里用的 macOS Runner 版本 |
| Linux 编译 | WebKitGTK 依赖缺失 | workflow 里会自动 apt install,看日志 |
| 产物上传 | 文件太大(>2GB) | GitHub Release 单个 Asset 上限 2GB;减小 dist |
耗时估算
| 阶段 | 典型耗时 |
|---|---|
| PakePlus 推送配置 | 3-10 秒 |
| GitHub Actions 排队 + 初始化 | 30-60 秒 |
| 各平台并行编译 | 2-8 分钟(取决于 Runner 负载和产物大小) |
| 产物上传 | 10-30 秒 |
| 总计 | 3-10 分钟 |
为什么不本地编译
云端编译的核心优势是:本地什么都不用装。Rust toolchain 下载安装(几百 MB)、Tauri CLI 安装、WebKitGTK 依赖……这些全部由 GitHub Actions Runner 自动搞定。用户只需要那个 10MB 的 PakePlus 客户端。