Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

GitHub Actions 自动构建和发布

这个工作流实现了跨平台自动构建和发布功能,每次推送到main分支时自动触发。

功能特性

  • 自动触发:推送到main分支时自动构建
  • 智能构建:只有源代码变化时才构建
  • 跨平台构建:Windows (x64)、macOS (Intel + Apple Silicon)、Linux (x64)
  • 自动版本号:基于时间戳和Git提交自动生成版本号
  • 自动发布:构建完成后自动创建GitHub Release
  • 版本管理:自动清理旧版本,保持仓库整洁
  • 手动触发:支持手动运行工作流
  • 构建缓存:优化构建速度

触发条件

  1. 自动触发:当推送到 main 分支时(如果源文件有变化)
  2. 手动触发:在 GitHub Actions 页面手动运行

版本号规则

自动生成的版本号格式:{package.json版本}-{时间戳}-{Git短哈希}

例如:0.1.0-20250713-143022-a1b2c3d

构建逻辑

智能检测

  • 只有当以下文件发生变化时才会触发构建:
    • JavaScript/TypeScript 文件 (.js, .jsx, .ts, .tsx)
    • 配置文件 (.json)
    • 样式文件 (.css, .scss)
    • Rust源文件 (.rs)

版本管理

  • 每次构建创建为 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")

⚠️ 注意:代码签名是可选的,主要用于分发应用时避免系统安全警告。对于个人使用或开源项目,通常不需要。

构建产物

Windows

  • 格式: MSI 安装包
  • 架构: x86_64
  • 文件名示例: api-key-manager_1.0.0_x64_en-US.msi

macOS

  • 格式: DMG 磁盘映像
  • 架构:
    • Intel Mac: x86_64-apple-darwin
    • Apple Silicon: aarch64-apple-darwin
  • 文件名示例: api-key-manager_1.0.0_x64.dmg

Linux

  • 格式: AppImage 便携应用
  • 架构: x86_64
  • 文件名示例: API-Key-Manager_1.0.0_amd64.AppImage

使用流程

自动构建(推荐)

现在每次推送到main分支时会自动触发构建:

# 开发和提交代码
git add .
git commit -m "添加新功能或修复bug"
git push origin main

监控构建状态

  1. 访问 GitHub 仓库的 Actions 页面
  2. 查看 "Build and Release" 工作流状态
  3. 构建分为三个阶段:
    • generate-version: 生成版本号和检查文件变化
    • build-and-release: 跨平台构建和发布
    • cleanup-old-releases: 清理旧版本

下载和安装

  1. 访问 GitHub 仓库的 Releases 页面
  2. 找到最新的构建版本(标记为Pre-release)
  3. 根据你的操作系统下载对应的安装包:
    • Windows: 下载 .msi 文件
    • macOS: 下载 .dmg 文件
    • Linux: 下载 .AppImage 文件

手动触发构建

如果需要手动构建:

  1. 访问 GitHub 仓库的 Actions 页面
  2. 选择 "Build and Release" 工作流
  3. 点击 "Run workflow" 按钮
  4. 选择分支并确认运行

发布正式版本

如果需要发布正式版本(非预发布):

# 创建正式版本标签
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/ 目录中。

故障排除

常见问题

  1. 构建没有触发

    • 检查是否有源代码文件变化
    • 确认推送到了 main 分支
    • 查看工作流日志中的 "should_release" 输出
  2. 构建失败 - 依赖问题

    • 确保 package.json 中的依赖版本正确
    • 检查 Rust 工具链是否兼容
    • 查看构建日志中的具体错误信息
  3. 构建失败 - 权限问题

    • 检查仓库是否允许Actions创建Release
    • 确认 GITHUB_TOKEN 有写入权限
    • 检查仓库设置中的Actions权限配置
  4. Release 创建失败

    • 检查 GITHUB_TOKEN 权限
    • 确认仓库设置允许 Actions 创建 Release
    • 查看是否有命名冲突的标签
  5. 版本号重复

    • 如果同一分钟内有多次推送,可能出现版本号冲突
    • 等待1分钟后重试,或手动触发构建

调试技巧

  1. 查看详细日志

    • 在 GitHub Actions 页面点击失败的构建
    • 重点查看以下阶段:
      • generate-version: 版本号生成和文件变化检测
      • build-and-release: 构建和发布过程
      • cleanup-old-releases: 清理过程
  2. 本地复现

    # 检查文件变化
    git diff --name-only HEAD~1 HEAD | grep -E '\.(js|jsx|ts|tsx|json|css|scss|rs)$'
    
    # 本地构建测试
    npm run build
    npm run tauri:build
  3. 检查配置

    • 验证 tauri.conf.json 配置正确
    • 检查仓库权限设置
    • 确认Actions有权限创建Release

性能优化建议

  1. 减少不必要的构建

    • 只有源代码变化时才构建
    • 文档更新不会触发构建
  2. 缓存利用

    • 工作流自动使用 Rust 和 npm 缓存
    • 后续构建会更快
  3. 并行构建

    • 三个平台同时构建
    • 不需要等待其他平台完成

自定义配置

修改构建目标

编辑 .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"]
  }
}

修改 Release 信息

在工作流文件中修改:

- name: Build the app
  uses: tauri-apps/tauri-action@v0
  with:
    releaseName: '你的应用名称 ${{ github.ref_name }}'
    releaseBody: '自定义发布描述...'

最佳实践

  1. 版本管理

    • 使用语义化版本控制(SemVer)
    • 在发布前充分测试
  2. 安全考虑

    • 定期轮换签名密钥
    • 限制 Secrets 访问权限
  3. 性能优化

    • 使用缓存加速构建
    • 并行构建多个平台
  4. 文档维护

    • 及时更新 CHANGELOG
    • 在 Release 中提供详细的更新说明