-
-
Notifications
You must be signed in to change notification settings - Fork 0
162 lines (141 loc) · 5.07 KB
/
Copy pathbuild.yml
File metadata and controls
162 lines (141 loc) · 5.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# 构建和发布工作流
# 触发条件:
# 1. 推送到 main 分支且修改了 package.json
# 2. 手动触发 (workflow_dispatch)
# 构建条件:
# - package.json 中的 version 高于 GitHub Releases 已发布的版本
# - 或手动触发
name: Build and Release
on:
push:
branches:
- main
paths:
- 'package.json' # 只有 package.json 变化时才触发
workflow_dispatch: # 支持手动触发
permissions:
contents: write # 需要写权限来创建 Release
jobs:
# ============================================
# 第一步:检查版本号是否需要发布
# ============================================
check-version:
runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.check.outputs.should_release }}
version: ${{ steps.check.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check version against latest release
id: check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# 获取当前 package.json 中的版本号
CURRENT_VERSION=$(jq -r '.version' package.json)
echo "Current version in package.json: $CURRENT_VERSION"
# 获取 GitHub Releases 中最新发布的版本号
LATEST_RELEASE=$(gh release list --limit 1 --json tagName --jq '.[0].tagName // "v0.0.0"' 2>/dev/null || echo "v0.0.0")
# 移除版本号前的 'v' 前缀
LATEST_VERSION=${LATEST_RELEASE#v}
echo "Latest released version: $LATEST_VERSION"
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
# 比较版本号,判断是否需要发布
if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
echo "Version changed, should release"
echo "should_release=true" >> $GITHUB_OUTPUT
else
echo "Version unchanged, skip release"
echo "should_release=false" >> $GITHUB_OUTPUT
fi
# ============================================
# 第二步:构建应用(macOS 和 Windows)
# ============================================
build:
needs: check-version
# 只有版本号高于已发布版本或手动触发时才构建
if: needs.check-version.outputs.should_release == 'true' || github.event_name == 'workflow_dispatch'
strategy:
fail-fast: false # 一个平台失败不影响其他平台
matrix:
include:
# macOS ARM64 (Apple Silicon)
- platform: macos-latest
args: --target aarch64-apple-darwin
name: macOS-arm64
# Windows x64
- platform: windows-latest
args: ''
name: Windows
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout
uses: actions/checkout@v4
# 安装 Bun 包管理器
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
# 安装 Rust 工具链
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
# Rust 依赖缓存,加速构建
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
# macOS 需要添加 ARM64 目标
- name: Add macOS arm64 target
if: matrix.platform == 'macos-latest'
run: rustup target add aarch64-apple-darwin
# 安装前端依赖
- name: Install dependencies
run: bun install
# 同步版本号到 tauri.conf.json
- name: Sync version to tauri.conf.json
shell: bash
run: |
VERSION=$(jq -r '.version' package.json)
jq --arg v "$VERSION" '.version = $v' src-tauri/tauri.conf.json > tmp.json && mv tmp.json src-tauri/tauri.conf.json
# 构建 Tauri 应用
- name: Build Tauri App
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: ${{ matrix.args }}
# 上传构建产物
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: youran-toolbox-${{ matrix.name }}
path: |
src-tauri/target/*/release/bundle/dmg/*.dmg
src-tauri/target/release/bundle/nsis/*.exe
# ============================================
# 第三步:创建 GitHub Release
# ============================================
release:
needs: [check-version, build]
runs-on: ubuntu-latest
steps:
# 下载所有构建产物
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
# 列出所有产物(调试用)
- name: List artifacts
run: find artifacts -type f
# 创建 Release 并上传安装包
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.check-version.outputs.version }}
name: v${{ needs.check-version.outputs.version }}
files: artifacts/**/*
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}