GitHub Actions 云端编译指南
📋 概述
使用 GitHub Actions 可以在云端自动编译所有平台的 bili-sync 版本,无需本地安装复杂的交叉编译工具链。
🚀 快速开始
1. 上传代码到 GitHub
bash
# 如果还没有 Git 仓库
git init
git add .
git commit -m "Initial commit"
# 推送到 GitHub(替换为你的仓库地址)
git remote add origin https://github.com/你的用户名/bili-sync.git
git push -u origin main
2. 触发编译
有三种方式触发编译:
方式一:手动触发(推荐)
- 打开你的 GitHub 仓库
- 点击
Actions
标签页 - 选择
Manual Build
工作流 - 点击
Run workflow
- 选择要编译的平台:
all
- 编译所有平台windows
- 只编译 Windowslinux
- 只编译 Linuxmacos
- 只编译 macOS
方式二:推送代码自动触发
bash
git add .
git commit -m "更新代码"
git push
方式三:创建版本标签
bash
git tag v2.5.1
git push origin v2.5.1
这会自动创建 GitHub Release 并上传所有编译文件。
📦 编译结果
编译平台
- ✅ Windows x86_64 -
bili-sync-rs-Windows-x86_64.zip
- ✅ Linux x86_64 -
bili-sync-rs-Linux-x86_64-musl.tar.gz
- ✅ Linux ARM64 -
bili-sync-rs-Linux-aarch64-musl.tar.gz
- ✅ macOS x86_64 -
bili-sync-rs-Darwin-x86_64.tar.gz
- ✅ macOS ARM64 -
bili-sync-rs-Darwin-aarch64.tar.gz
下载编译结果
从 Actions 页面下载
- 进入
Actions
标签页 - 点击最新的编译任务
- 在
Artifacts
部分下载对应平台的文件
从 Releases 页面下载(仅限标签触发)
- 进入
Releases
标签页 - 下载最新版本的文件
⚙️ 工作流说明
build.yml - 完整编译工作流
- 触发条件:推送到 main/master 分支、创建标签、手动触发
- 功能:编译所有平台,创建 Release(仅标签触发)
- 时间:约 15-20 分钟
manual-build.yml - 手动编译工作流
- 触发条件:仅手动触发
- 功能:可选择编译特定平台
- 时间:约 5-15 分钟(取决于选择的平台)
🔧 自定义配置
修改编译目标
编辑 .github/workflows/build.yml
文件中的 matrix.include
部分:
yaml
matrix:
include:
- target: x86_64-pc-windows-msvc
os: windows-latest
name: Windows-x86_64
# 添加或删除其他平台...
修改触发条件
编辑工作流文件中的 on
部分:
yaml
on:
push:
branches: [ main ] # 只在推送到 main 分支时触发
workflow_dispatch: # 允许手动触发
💡 优势
相比本地编译
- ✅ 无需配置复杂环境:GitHub 提供预配置的编译环境
- ✅ 并行编译:5个平台同时编译,节省时间
- ✅ 稳定可靠:统一的编译环境,避免本地环境问题
- ✅ 自动化:推送代码即可触发编译
- ✅ 免费:GitHub Actions 对公开仓库免费
编译时间对比
- 本地编译:每个平台 5-10 分钟,总计 25-50 分钟
- GitHub Actions:并行编译,总计 15-20 分钟
🚨 注意事项
- 仓库必须是公开的,或者有 GitHub Pro 账户
- 每月有免费额度限制:
- 公开仓库:无限制
- 私有仓库:2000 分钟/月
- 编译失败时:检查 Actions 页面的错误日志
- 首次编译较慢:需要下载依赖,后续编译会使用缓存
🔍 故障排除
编译失败
- 检查 Actions 页面的详细日志
- 确认代码没有语法错误
- 检查
web/package.json
是否存在
下载不到文件
- 确认编译任务已完成
- 检查是否有权限访问仓库
- Artifacts 有 90 天过期时间
想要更快的编译
- 使用
manual-build.yml
只编译需要的平台 - 考虑使用自托管的 GitHub Runner