Skip to content

Commit 66c1194

Browse files
committed
feat (ci): 添加 release
1 parent 54271b7 commit 66c1194

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

.github/workflows/release.yml

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
name: Release
2+
3+
on:
4+
# 新发布触发
5+
release:
6+
types: [published]
7+
8+
# 手动触发
9+
workflow_dispatch:
10+
inputs:
11+
tag:
12+
description: 'Release tag (e.g., v1.0.0)'
13+
required: true
14+
type: string
15+
16+
env:
17+
CARGO_TERM_COLOR: always
18+
NODE_VERSION: '18'
19+
RUST_VERSION: '1.85.0'
20+
PNPM_VERSION: '8'
21+
22+
jobs:
23+
# 构建发布版本
24+
build-release:
25+
name: Build Release
26+
runs-on: ${{ matrix.platform }}
27+
28+
strategy:
29+
fail-fast: false
30+
matrix:
31+
platform: [macos-latest, windows-latest]
32+
include:
33+
- platform: macos-latest
34+
os: macos
35+
target: universal-apple-darwin
36+
- platform: windows-latest
37+
os: windows
38+
target: x86_64-pc-windows-msvc
39+
40+
steps:
41+
- name: Checkout repository
42+
uses: actions/checkout@v4
43+
44+
- name: Setup Node.js
45+
uses: actions/setup-node@v4
46+
with:
47+
node-version: ${{ env.NODE_VERSION }}
48+
49+
- name: Setup pnpm
50+
uses: pnpm/action-setup@v2
51+
with:
52+
version: ${{ env.PNPM_VERSION }}
53+
54+
- name: Setup Rust
55+
uses: dtolnay/rust-toolchain@stable
56+
with:
57+
toolchain: ${{ env.RUST_VERSION }}
58+
59+
- name: Add Rust targets (macOS)
60+
if: matrix.platform == 'macos-latest'
61+
run: |
62+
rustup target add aarch64-apple-darwin
63+
rustup target add x86_64-apple-darwin
64+
65+
- name: Rust Cache
66+
uses: Swatinem/rust-cache@v2
67+
with:
68+
workspaces: src-tauri
69+
70+
- name: Install frontend dependencies
71+
run: |
72+
if [ -f "pnpm-lock.yaml" ]; then
73+
pnpm install --frozen-lockfile
74+
else
75+
pnpm install
76+
fi
77+
shell: bash
78+
79+
- name: Build application
80+
run: pnpm tauri build --target ${{ matrix.target }}
81+
82+
- name: Upload build artifacts
83+
uses: actions/upload-artifact@v4
84+
with:
85+
name: release-${{ matrix.os }}
86+
path: src-tauri/target/release/bundle/
87+
retention-days: 30
88+
89+
# 创建或更新 GitHub Release
90+
create-release:
91+
name: Create Release
92+
needs: build-release
93+
runs-on: ubuntu-latest
94+
if: github.event_name == 'workflow_dispatch'
95+
96+
steps:
97+
- name: Download all artifacts
98+
uses: actions/download-artifact@v4
99+
with:
100+
path: artifacts
101+
102+
- name: Prepare release assets
103+
run: |
104+
mkdir -p release-assets
105+
find artifacts -name "*.dmg" -exec cp {} release-assets/ \;
106+
find artifacts -name "*.msi" -exec cp {} release-assets/ \;
107+
find artifacts -name "*.exe" -exec cp {} release-assets/ \;
108+
109+
- name: Create Release
110+
uses: softprops/action-gh-release@v1
111+
with:
112+
tag_name: ${{ github.event.inputs.tag }}
113+
name: Release ${{ github.event.inputs.tag }}
114+
files: release-assets/*
115+
env:
116+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
117+
118+
# 更新现有 Release
119+
update-release:
120+
name: Update Release
121+
needs: build-release
122+
runs-on: ubuntu-latest
123+
if: github.event_name == 'release'
124+
125+
steps:
126+
- name: Download all artifacts
127+
uses: actions/download-artifact@v4
128+
with:
129+
path: artifacts
130+
131+
- name: Prepare release assets
132+
run: |
133+
mkdir -p release-assets
134+
find artifacts -name "*.dmg" -exec cp {} release-assets/ \;
135+
find artifacts -name "*.msi" -exec cp {} release-assets/ \;
136+
find artifacts -name "*.exe" -exec cp {} release-assets/ \;
137+
138+
- name: Upload to existing release
139+
uses: softprops/action-gh-release@v1
140+
with:
141+
tag_name: ${{ github.event.release.tag_name }}
142+
files: release-assets/*
143+
env:
144+
GH_TOKEN: ${{ secrets.GH_TOKEN }}

0 commit comments

Comments
 (0)