-
Notifications
You must be signed in to change notification settings - Fork 0
190 lines (165 loc) · 6.41 KB
/
Copy pathrelease.yml
File metadata and controls
190 lines (165 loc) · 6.41 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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
jobs:
# ==================== Changelog ====================
prepare-release:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
changelog: ${{ steps.changelog.outputs.changelog }}
steps:
- uses: actions/checkout@v4
- name: Get version from tag or config
id: version
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
else
VERSION=$(node -p "require('./bedcode-desktop/src-tauri/tauri.conf.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
fi
- name: Extract changelog for current version
id: changelog
run: |
VERSION="${{ steps.version.outputs.version }}"
# 提取当前版本的 changelog 内容(从 ## [version] 到下一个 ## 之间的内容)
CHANGELOG=$(awk "/^## \\[${VERSION}\\]/,/^## \\[|^## \\[Unreleased/" CHANGELOG.md | head -n -1 | tail -n +2)
# 如果没找到对应版本,使用完整 CHANGELOG
if [ -z "$CHANGELOG" ]; then
CHANGELOG=$(cat CHANGELOG.md)
fi
# 写入文件避免多行字符串在 GITHUB_OUTPUT 中的问题
echo "$CHANGELOG" > /tmp/changelog.txt
{
echo "changelog<<EOF"
cat /tmp/changelog.txt
echo ""
echo "EOF"
} >> $GITHUB_OUTPUT
# ==================== Windows Build ====================
build-windows:
needs: prepare-release
runs-on: windows-latest
defaults:
run:
working-directory: bedcode-desktop
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm
cache-dependency-path: bedcode-desktop/package-lock.json
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './bedcode-desktop/src-tauri -> target'
- name: Import Windows certificate
if: env.WINDOWS_CERTIFICATE != ''
env:
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
run: |
New-Item -ItemType directory -Path certificate
Set-Content -Path certificate/tempCert.txt -Value $env:WINDOWS_CERTIFICATE
certutil -decode certificate/tempCert.txt certificate/certificate.pfx
Remove-Item certificate/tempCert.txt
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
- name: Install frontend dependencies
run: npm install
- name: Build and release
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
projectPath: bedcode-desktop
tagName: v__VERSION__
releaseName: 'BedCode v__VERSION__'
releaseBody: '${{ needs.prepare-release.outputs.changelog }}'
releaseDraft: true
prerelease: false
updaterJsonPreferNsis: true
- name: Clean up certificate
if: always()
run: |
if (Test-Path certificate) { Remove-Item -Recurse -Force certificate }
# ==================== Android Build ====================
build-android:
needs: prepare-release
runs-on: ubuntu-latest
defaults:
run:
working-directory: bedcode-mobile
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm
cache-dependency-path: bedcode-mobile/package-lock.json
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './bedcode-mobile/src-tauri -> target'
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Setup Android NDK
run: sdkmanager "ndk;27.0.12077973"
- name: Configure Android signing
run: |
cd src-tauri/gen/android
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" > key.properties
echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> key.properties
echo "storePassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> key.properties
base64 -d <<< "${{ secrets.ANDROID_KEY_BASE64 }}" > $RUNNER_TEMP/keystore.jks
echo "storeFile=$RUNNER_TEMP/keystore.jks" >> key.properties
- name: Install frontend dependencies
run: npm install
- name: Build Android APK
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: npx tauri android build --apk -t aarch64
- name: Upload APK to Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.prepare-release.outputs.version }}
files: |
bedcode-mobile/src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk
bedcode-mobile/src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk.sig
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ==================== Publish Release ====================
publish-release:
needs: [prepare-release, build-windows, build-android]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Publish release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.prepare-release.outputs.version }}
draft: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}