1- name : Release
1+ name : Build
22
33on :
44 push :
5+ branches :
6+ - " **"
57 tags :
68 - " v*"
79 pull_request :
810 workflow_dispatch :
911 inputs :
1012 version :
11- description : " Release version (default: VERSION file) "
13+ description : " 发布版本(默认: VERSION 文件) "
1214 required : false
1315 default : " "
1416 create_release :
15- description : " Create GitHub Release ( true/false, default: false) "
17+ description : " 创建 GitHub Release( true/false,默认: false) "
1618 required : false
1719 default : " false"
1820
1921permissions :
2022 contents : write
2123
2224jobs :
25+ check-trigger :
26+ name : 检查触发条件
27+ runs-on : ubuntu-latest
28+ outputs :
29+ should_build : ${{ steps.check.outputs.should_build }}
30+ steps :
31+ - name : 检查
32+ id : check
33+ shell : bash
34+ run : |
35+ set -euo pipefail
36+ should_build="false"
37+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
38+ should_build="true"
39+ elif [ "${{ github.event_name }}" = "pull_request" ]; then
40+ should_build="true"
41+ elif [ "${{ github.event_name }}" = "push" ]; then
42+ if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
43+ should_build="true"
44+ elif [ -n "${{ github.event.head_commit.message }}" ]; then
45+ if echo "${{ github.event.head_commit.message }}" | grep -q "开始构建"; then
46+ should_build="true"
47+ fi
48+ fi
49+ fi
50+ echo "should_build=${should_build}" >> "$GITHUB_OUTPUT"
51+
52+ ci :
53+ name : 持续集成(${{ matrix.os }})
54+ needs : [check-trigger]
55+ if : needs.check-trigger.outputs.should_build == 'true'
56+ runs-on : ${{ matrix.os }}
57+ concurrency :
58+ group : ci-${{ github.ref }}-${{ matrix.os }}
59+ cancel-in-progress : true
60+ strategy :
61+ fail-fast : false
62+ matrix :
63+ os : [windows-latest, ubuntu-latest, macos-latest]
64+ steps :
65+ - name : 检出代码
66+ uses : actions/checkout@v4
67+
68+ - name : 安装 .NET SDK
69+ uses : actions/setup-dotnet@v4
70+ with :
71+ dotnet-version : 10.0.x
72+ dotnet-quality : preview
73+
74+ - name : 还原依赖
75+ run : dotnet restore SecRandom.slnx
76+
77+ - name : 构建
78+ run : dotnet build SecRandom.slnx -c Release --no-restore
79+
80+ - name : 检测测试项目
81+ shell : bash
82+ run : |
83+ set -euo pipefail
84+ if find . -type f \( -name '*Test*.csproj' -o -name '*Tests*.csproj' \) | grep -q .; then
85+ echo "HAS_TESTS=true" >> "$GITHUB_ENV"
86+ else
87+ echo "HAS_TESTS=false" >> "$GITHUB_ENV"
88+ fi
89+
90+ - name : 运行测试
91+ if : env.HAS_TESTS == 'true'
92+ run : dotnet test SecRandom.slnx -c Release --no-build
93+
2394 version :
24- name : Resolve version
95+ name : 解析版本
96+ if : ${{ github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') }}
2597 runs-on : ubuntu-latest
2698 outputs :
2799 version : ${{ steps.v.outputs.version }}
28100 version_no_v : ${{ steps.v.outputs.version_no_v }}
29101 changelog : ${{ steps.v.outputs.changelog }}
30102 create_release : ${{ steps.v.outputs.create_release }}
31103 steps :
32- - name : Checkout
104+ - name : 检出代码
33105 uses : actions/checkout@v4
34106
35- - name : Resolve
107+ - name : 解析
36108 id : v
37109 shell : bash
38110 run : |
68140 echo "create_release=${create_release}" >> "$GITHUB_OUTPUT"
69141
70142 publish :
71- name : Publish ( ${{ matrix.rid }})
143+ name : 发布构建( ${{ matrix.rid }})
72144 needs : [version]
73145 runs-on : ${{ matrix.os }}
74146 strategy :
@@ -77,24 +149,30 @@ jobs:
77149 include :
78150 - os : windows-latest
79151 rid : win-x64
152+ - os : windows-latest
153+ rid : win-x86
154+ - os : windows-latest
155+ rid : win-arm64
80156 - os : ubuntu-latest
81157 rid : linux-x64
158+ - os : ubuntu-latest
159+ rid : linux-arm64
82160 - os : macos-latest
83161 rid : osx-x64
84162 - os : macos-latest
85163 rid : osx-arm64
86164
87165 steps :
88- - name : Checkout
166+ - name : 检出代码
89167 uses : actions/checkout@v4
90168
91- - name : Setup .NET SDK
169+ - name : 安装 .NET SDK
92170 uses : actions/setup-dotnet@v4
93171 with :
94172 dotnet-version : 10.0.x
95173 dotnet-quality : preview
96174
97- - name : Publish
175+ - name : 发布
98176 run : >
99177 dotnet publish src/SecRandom.Avalonia/SecRandom.Avalonia.csproj
100178 -c Release
@@ -104,7 +182,7 @@ jobs:
104182 /p:PublishSingleFile=true
105183 /p:IncludeNativeLibrariesForSelfExtract=true
106184
107- - name : Package ( Windows zip)
185+ - name : 打包( Windows zip)
108186 if : runner.os == 'Windows'
109187 shell : pwsh
110188 run : |
@@ -113,7 +191,7 @@ jobs:
113191 $outFile = "dist/SecRandom-${versionNoV}-${{ matrix.rid }}.zip"
114192 Compress-Archive -Path "artifacts/SecRandom-${{ matrix.rid }}/*" -DestinationPath $outFile -Force
115193
116- - name : Package ( Linux deb)
194+ - name : 打包( Linux deb)
117195 if : runner.os == 'Linux'
118196 shell : bash
119197 run : |
@@ -122,6 +200,12 @@ jobs:
122200 version_no_v="${{ needs.version.outputs.version_no_v }}"
123201 mkdir -p dist
124202
203+ deb_arch="amd64"
204+ case "${{ matrix.rid }}" in
205+ linux-x64) deb_arch="amd64" ;;
206+ linux-arm64) deb_arch="arm64" ;;
207+ esac
208+
125209 pkgroot="$(pwd)/pkgroot"
126210 rm -rf "$pkgroot"
127211 mkdir -p "$pkgroot/DEBIAN"
@@ -158,14 +242,14 @@ jobs:
158242 Version: ${version_no_v}
159243 Section: utils
160244 Priority: optional
161- Architecture: amd64
245+ Architecture: ${deb_arch}
162246 Maintainer: SECTL
163247 Description: SecRandom
164248 EOF
165249
166250 dpkg-deb --build "$pkgroot" "dist/SecRandom-${version_no_v}-${{ matrix.rid }}.deb"
167251
168- - name : Package ( macOS pkg)
252+ - name : 打包( macOS pkg)
169253 if : runner.os == 'macOS'
170254 shell : bash
171255 run : |
@@ -225,34 +309,34 @@ jobs:
225309 --install-location "/" \
226310 "dist/SecRandom-${version_no_v}-${{ matrix.rid }}.pkg"
227311
228- - name : Upload artifact
312+ - name : 上传构建产物
229313 uses : actions/upload-artifact@v4
230314 with :
231315 name : SecRandom-${{ matrix.rid }}
232316 path : dist/*
233317
234318 notes :
235- name : Generate notes
319+ name : 生成发布说明
236320 needs : [version, publish]
237321 runs-on : ubuntu-latest
238322 steps :
239- - name : Checkout
323+ - name : 检出代码
240324 uses : actions/checkout@v4
241325
242- - name : Download artifacts
326+ - name : 下载产物
243327 uses : actions/download-artifact@v4
244328 with :
245329 path : dist
246330
247- - name : Collect files
331+ - name : 收集文件
248332 shell : bash
249333 run : |
250334 set -euo pipefail
251335 mkdir -p release
252336 find dist -type f \( -name '*.zip' -o -name '*.deb' -o -name '*.pkg' \) -print -exec cp -f {} release/ \;
253337 ls -la release
254338
255- - name : Generate release notes with SHA512
339+ - name : 生成说明与 SHA512
256340 shell : bash
257341 run : |
258342 set -euo pipefail
@@ -301,7 +385,7 @@ jobs:
301385 done
302386 fi
303387
304- - name : Upload notes artifact
388+ - name : 上传说明产物
305389 uses : actions/upload-artifact@v4
306390 with :
307391 name : release-notes
@@ -310,31 +394,31 @@ jobs:
310394 release/SHA512SUMS.txt
311395
312396 release :
313- name : Create GitHub Release
397+ name : 创建 GitHub Release
314398 if : needs.version.outputs.create_release == 'true'
315399 needs : [version, publish, notes]
316400 runs-on : ubuntu-latest
317401 steps :
318- - name : Download artifacts
402+ - name : 下载产物
319403 uses : actions/download-artifact@v4
320404 with :
321405 path : dist
322406
323- - name : Collect files
407+ - name : 收集文件
324408 shell : bash
325409 run : |
326410 set -euo pipefail
327411 mkdir -p release
328412 find dist -type f \( -name '*.zip' -o -name '*.deb' -o -name '*.pkg' -o -name 'SHA512SUMS.txt' \) -print -exec cp -f {} release/ \;
329413 ls -la release
330414
331- - name : Download release notes
415+ - name : 下载发布说明
332416 uses : actions/download-artifact@v4
333417 with :
334418 name : release-notes
335419 path : notes
336420
337- - name : Publish release
421+ - name : 发布 Release
338422 uses : softprops/action-gh-release@v2
339423 with :
340424 tag_name : ${{ needs.version.outputs.version }}
0 commit comments