这个工作流实现了跨平台自动构建和发布功能,每次推送到main分支时自动触发。
- ✅ 自动触发:推送到main分支时自动构建
- ✅ 智能构建:只有源代码变化时才构建
- ✅ 跨平台构建:Windows (x64)、macOS (Intel + Apple Silicon)、Linux (x64)
- ✅ 自动版本号:基于时间戳和Git提交自动生成版本号
- ✅ 自动发布:构建完成后自动创建GitHub Release
- ✅ 版本管理:自动清理旧版本,保持仓库整洁
- ✅ 手动触发:支持手动运行工作流
- ✅ 构建缓存:优化构建速度
- 自动触发:当推送到
main分支时(如果源文件有变化) - 手动触发:在 GitHub Actions 页面手动运行
自动生成的版本号格式:{package.json版本}-{时间戳}-{Git短哈希}
例如:0.1.0-20250713-143022-a1b2c3d
- 只有当以下文件发生变化时才会触发构建:
- JavaScript/TypeScript 文件 (
.js,.jsx,.ts,.tsx) - 配置文件 (
.json) - 样式文件 (
.css,.scss) - Rust源文件 (
.rs)
- JavaScript/TypeScript 文件 (
- 每次构建创建为
prerelease - 自动删除超过10个的旧构建版本
- 保留最新的10个构建版本供下载
这个工作流设计为开箱即用,不需要任何额外的Secrets或配置。
如果你想避免Windows/macOS系统的安全警告,可以配置代码签名:
Windows代码签名:
- 在仓库设置中添加
WINDOWS_CERTIFICATE_BASE64(base64编码的证书文件) - 添加
WINDOWS_CERTIFICATE_PASSWORD(证书密码)
macOS代码签名:
- 在仓库设置中添加
APPLE_CERTIFICATE_BASE64(base64编码的证书文件) - 添加
APPLE_CERTIFICATE_PASSWORD(证书密码) - 添加
APPLE_SIGNING_IDENTITY(签名身份,如 "Developer ID Application: Your Name")
- 格式: MSI 安装包
- 架构: x86_64
- 文件名示例:
api-key-manager_1.0.0_x64_en-US.msi
- 格式: DMG 磁盘映像
- 架构:
- Intel Mac:
x86_64-apple-darwin - Apple Silicon:
aarch64-apple-darwin
- Intel Mac:
- 文件名示例:
api-key-manager_1.0.0_x64.dmg
- 格式: AppImage 便携应用
- 架构: x86_64
- 文件名示例:
API-Key-Manager_1.0.0_amd64.AppImage
现在每次推送到main分支时会自动触发构建:
# 开发和提交代码
git add .
git commit -m "添加新功能或修复bug"
git push origin main- 访问 GitHub 仓库的 Actions 页面
- 查看 "Build and Release" 工作流状态
- 构建分为三个阶段:
generate-version: 生成版本号和检查文件变化build-and-release: 跨平台构建和发布cleanup-old-releases: 清理旧版本
- 访问 GitHub 仓库的 Releases 页面
- 找到最新的构建版本(标记为Pre-release)
- 根据你的操作系统下载对应的安装包:
- Windows: 下载
.msi文件 - macOS: 下载
.dmg文件 - Linux: 下载
.AppImage文件
- Windows: 下载
如果需要手动构建:
- 访问 GitHub 仓库的 Actions 页面
- 选择 "Build and Release" 工作流
- 点击 "Run workflow" 按钮
- 选择分支并确认运行
如果需要发布正式版本(非预发布):
# 创建正式版本标签
git tag v1.0.0
git push origin v1.0.0这会创建一个正式版本,不会被自动清理。
在推送前,可以在本地测试构建:
# 安装依赖
npm install
# 构建前端
npm run build
# 构建 Tauri 应用
npm run tauri:build构建产物位于 src-tauri/target/release/bundle/ 目录中。
-
构建没有触发
- 检查是否有源代码文件变化
- 确认推送到了
main分支 - 查看工作流日志中的 "should_release" 输出
-
构建失败 - 依赖问题
- 确保
package.json中的依赖版本正确 - 检查 Rust 工具链是否兼容
- 查看构建日志中的具体错误信息
- 确保
-
构建失败 - 权限问题
- 检查仓库是否允许Actions创建Release
- 确认
GITHUB_TOKEN有写入权限 - 检查仓库设置中的Actions权限配置
-
Release 创建失败
- 检查
GITHUB_TOKEN权限 - 确认仓库设置允许 Actions 创建 Release
- 查看是否有命名冲突的标签
- 检查
-
版本号重复
- 如果同一分钟内有多次推送,可能出现版本号冲突
- 等待1分钟后重试,或手动触发构建
-
查看详细日志
- 在 GitHub Actions 页面点击失败的构建
- 重点查看以下阶段:
generate-version: 版本号生成和文件变化检测build-and-release: 构建和发布过程cleanup-old-releases: 清理过程
-
本地复现
# 检查文件变化 git diff --name-only HEAD~1 HEAD | grep -E '\.(js|jsx|ts|tsx|json|css|scss|rs)$' # 本地构建测试 npm run build npm run tauri:build
-
检查配置
- 验证
tauri.conf.json配置正确 - 检查仓库权限设置
- 确认Actions有权限创建Release
- 验证
-
减少不必要的构建
- 只有源代码变化时才构建
- 文档更新不会触发构建
-
缓存利用
- 工作流自动使用 Rust 和 npm 缓存
- 后续构建会更快
-
并行构建
- 三个平台同时构建
- 不需要等待其他平台完成
编辑 .github/workflows/build-and-release.yml 中的 matrix 部分:
strategy:
matrix:
include:
- platform: 'windows-latest'
args: ''
name: 'windows-x86_64'
bundle: 'msi'
# 添加或修改其他平台...在 src-tauri/tauri.conf.json 中修改 targets 数组:
{
"bundle": {
"targets": ["msi", "nsis", "app", "appimage", "dmg"]
}
}在工作流文件中修改:
- name: Build the app
uses: tauri-apps/tauri-action@v0
with:
releaseName: '你的应用名称 ${{ github.ref_name }}'
releaseBody: '自定义发布描述...'-
版本管理
- 使用语义化版本控制(SemVer)
- 在发布前充分测试
-
安全考虑
- 定期轮换签名密钥
- 限制 Secrets 访问权限
-
性能优化
- 使用缓存加速构建
- 并行构建多个平台
-
文档维护
- 及时更新 CHANGELOG
- 在 Release 中提供详细的更新说明