Skip to content

Commit b2290ec

Browse files
committed
feat(ci):支持多架构编译
Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
1 parent 55c336d commit b2290ec

1 file changed

Lines changed: 140 additions & 33 deletions

File tree

.github/workflows/prerelease.yml

Lines changed: 140 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ jobs:
200200
needs: prepare
201201
if: success()
202202
runs-on: windows-latest
203+
strategy:
204+
fail-fast: false
205+
matrix:
206+
architecture: [AnyCPU, x86]
203207
outputs:
204208
archive_name: ${{ steps.create_archive.outputs.archive_name }}
205209
zip_size: ${{ steps.calculate_size.outputs.zip_size }}
@@ -227,12 +231,12 @@ jobs:
227231
env:
228232
DLASS_SENTRY_DSN: ${{ secrets.DLASS_SENTRY_DSN }}
229233
run: |
230-
msbuild /p:platform="AnyCPU" /p:configuration="Release" /p:GitFlow="Github Action" "Ink Canvas/InkCanvasForClass.csproj" /m /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true /verbosity:minimal -maxcpucount /p:RunAnalyzers=false
234+
msbuild /p:platform="${{ matrix.architecture }}" /p:configuration="Release" /p:GitFlow="Github Action" "Ink Canvas/InkCanvasForClass.csproj" /m /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true /verbosity:minimal -maxcpucount /p:RunAnalyzers=false
231235
232236
- name: Check if exe file is generated
233237
id: check-exe
234238
run: |
235-
$exePath = "Ink Canvas/bin/Release/net472/InkCanvasForClass.exe"
239+
$exePath = "Ink Canvas\bin\Release\${{ matrix.architecture }}\net472\InkCanvasForClass.exe"
236240
237241
if (Test-Path $exePath) {
238242
echo "build_success=true" >> $env:GITHUB_OUTPUT
@@ -265,13 +269,22 @@ jobs:
265269
if: steps.check-exe.outputs.build_success == 'true'
266270
run: |
267271
$version = "${{ needs.prepare.outputs.version }}"
268-
$archiveName = "InkCanvasForClass.CE.$version.zip"
272+
$architecture = "${{ matrix.architecture }}"
273+
274+
# 根据架构生成文件名后缀
275+
if ($architecture -eq "AnyCPU") {
276+
$suffix = "-x64"
277+
} else {
278+
$suffix = ""
279+
}
280+
281+
$archiveName = "InkCanvasForClass.CE.$version$suffix.zip"
269282
270283
# 创建发布目录
271284
New-Item -ItemType Directory -Path "release" -Force
272285
273-
# 复制发布文件
274-
Copy-Item "Ink Canvas/bin/Release/net472/*" "release/" -Recurse -Force
286+
# 复制发布文件(使用架构特定的路径)
287+
Copy-Item "Ink Canvas\bin\Release\$architecture\net472\*" "release/" -Recurse -Force
275288
276289
# 创建压缩包
277290
Compress-Archive -Path "release/*" -DestinationPath $archiveName -Force
@@ -282,6 +295,7 @@ jobs:
282295
if: steps.check-exe.outputs.build_success == 'true'
283296
run: |
284297
$version = "${{ needs.prepare.outputs.version }}"
298+
$architecture = "${{ matrix.architecture }}"
285299
286300
# 更新 ISS 文件中的版本信息
287301
$issPath = "build/InkCanvasForClass CE.iss"
@@ -317,8 +331,17 @@ jobs:
317331
if: steps.check-exe.outputs.build_success == 'true'
318332
run: |
319333
$version = "${{ needs.prepare.outputs.version }}"
334+
$architecture = "${{ matrix.architecture }}"
335+
336+
# 根据架构生成文件名后缀
337+
if ($architecture -eq "AnyCPU") {
338+
$suffix = "-x64"
339+
} else {
340+
$suffix = ""
341+
}
342+
320343
$setupFile = "InkCanvasForClass CE Setup.exe"
321-
$newSetupName = "InkCanvasForClass.CE.$version.Setup.exe"
344+
$newSetupName = "InkCanvasForClass.CE.$version$suffix.Setup.exe"
322345
323346
if (Test-Path $setupFile) {
324347
Rename-Item -Path $setupFile -NewName $newSetupName
@@ -331,7 +354,16 @@ jobs:
331354
if: steps.check-exe.outputs.build_success == 'true'
332355
run: |
333356
$version = "${{ needs.prepare.outputs.version }}"
334-
$archiveName = "InkCanvasForClass.CE.$version.zip"
357+
$architecture = "${{ matrix.architecture }}"
358+
359+
# 根据架构生成文件名后缀
360+
if ($architecture -eq "AnyCPU") {
361+
$suffix = "-x64"
362+
} else {
363+
$suffix = ""
364+
}
365+
366+
$archiveName = "InkCanvasForClass.CE.$version$suffix.zip"
335367
336368
# 获取文件大小(字节)
337369
$fileSize = (Get-Item $archiveName).Length
@@ -343,7 +375,16 @@ jobs:
343375
if: steps.check-exe.outputs.build_success == 'true'
344376
run: |
345377
$version = "${{ needs.prepare.outputs.version }}"
346-
$installerName = "InkCanvasForClass.CE.$version.Setup.exe"
378+
$architecture = "${{ matrix.architecture }}"
379+
380+
# 根据架构生成文件名后缀
381+
if ($architecture -eq "AnyCPU") {
382+
$suffix = "-x64"
383+
} else {
384+
$suffix = ""
385+
}
386+
387+
$installerName = "InkCanvasForClass.CE.$version$suffix.Setup.exe"
347388
348389
if (Test-Path $installerName) {
349390
# 获取文件大小(字节)
@@ -354,14 +395,34 @@ jobs:
354395
Write-Error "Installer file not found: $installerName"
355396
}
356397
398+
- name: Upload Build Artifacts
399+
if: steps.check-exe.outputs.build_success == 'true'
400+
run: |
401+
$version = "${{ needs.prepare.outputs.version }}"
402+
$architecture = "${{ matrix.architecture }}"
403+
404+
# 根据架构生成文件名后缀
405+
if ($architecture -eq "AnyCPU") {
406+
$suffix = "-x64"
407+
} else {
408+
$suffix = ""
409+
}
410+
411+
$zipFile = "InkCanvasForClass.CE.$version$suffix.zip"
412+
$setupFile = "InkCanvasForClass.CE.$version$suffix.Setup.exe"
413+
414+
echo "zip_file=$zipFile" >> $env:GITHUB_OUTPUT
415+
echo "setup_file=$setupFile" >> $env:GITHUB_OUTPUT
416+
id: get_file_names
417+
357418
- name: Upload Build Artifacts
358419
if: steps.check-exe.outputs.build_success == 'true'
359420
uses: actions/upload-artifact@v7
360421
with:
361-
name: build-files-${{ needs.prepare.outputs.version }}
422+
name: build-files-${{ needs.prepare.outputs.version }}-${{ matrix.architecture }}
362423
path: |
363-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip
364-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.Setup.exe
424+
${{ steps.get_file_names.outputs.zip_file }}
425+
${{ steps.get_file_names.outputs.setup_file }}
365426
366427
- name: Create Build Summary
367428
if: always()
@@ -376,6 +437,7 @@ jobs:
376437
echo "**Version:** ${{ needs.prepare.outputs.version }}" >> $GITHUB_STEP_SUMMARY
377438
echo "**Tag:** \`${{ needs.prepare.outputs.tag_name }}\`" >> $GITHUB_STEP_SUMMARY
378439
echo "**Release Type:** ${{ needs.prepare.outputs.is_prerelease == 'true' && 'Pre-release' || 'Release' }}" >> $GITHUB_STEP_SUMMARY
440+
echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY
379441
echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY
380442
echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY
381443
echo "" >> $GITHUB_STEP_SUMMARY
@@ -393,6 +455,7 @@ jobs:
393455
echo "" >> $GITHUB_STEP_SUMMARY
394456
echo "**Version:** ${{ needs.prepare.outputs.version }}" >> $GITHUB_STEP_SUMMARY
395457
echo "**Tag:** \`${{ needs.prepare.outputs.tag_name }}\`" >> $GITHUB_STEP_SUMMARY
458+
echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY
396459
echo "**Event:** ${{ github.event_name }} (${{ github.event.action || 'N/A' }})" >> $GITHUB_STEP_SUMMARY
397460
echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY
398461
echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY
@@ -411,7 +474,8 @@ jobs:
411474
- name: Download Build Artifacts
412475
uses: actions/download-artifact@v8
413476
with:
414-
name: build-files-${{ needs.prepare.outputs.version }}
477+
pattern: build-files-${{ needs.prepare.outputs.version }}-*
478+
merge-multiple: false
415479

416480
- name: Setup Python
417481
uses: actions/setup-python@v6
@@ -422,8 +486,10 @@ jobs:
422486
uses: sigstore/gh-action-sigstore-python@v3.2.0
423487
with:
424488
inputs: |
425-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip
426-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.Setup.exe
489+
build-files-${{ needs.prepare.outputs.version }}-AnyCPU/*.zip
490+
build-files-${{ needs.prepare.outputs.version }}-AnyCPU/*.exe
491+
build-files-${{ needs.prepare.outputs.version }}-x86/*.zip
492+
build-files-${{ needs.prepare.outputs.version }}-x86/*.exe
427493
release-signing-artifacts: true
428494
upload-signing-artifacts: true
429495
env:
@@ -434,8 +500,8 @@ jobs:
434500
with:
435501
name: signed-files-${{ needs.prepare.outputs.version }}
436502
path: |
437-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip.sigstore.json
438-
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.Setup.exe.sigstore.json
503+
build-files-${{ needs.prepare.outputs.version }}-AnyCPU/*.sigstore.json
504+
build-files-${{ needs.prepare.outputs.version }}-x86/*.sigstore.json
439505
440506
release:
441507
needs: [prepare, build, sign]
@@ -450,7 +516,8 @@ jobs:
450516
- name: Download Build Artifacts
451517
uses: actions/download-artifact@v8
452518
with:
453-
name: build-files-${{ needs.prepare.outputs.version }}
519+
pattern: build-files-${{ needs.prepare.outputs.version }}-*
520+
merge-multiple: true
454521

455522
- name: Download Signed Artifacts (if exists)
456523
uses: actions/download-artifact@v8
@@ -480,23 +547,43 @@ jobs:
480547
fileTable+=$'| 文件名 | 大小 |\n'
481548
fileTable+=$'|--------|------|\n'
482549
483-
# ZIP 文件信息
484-
fileTable+=$'| InkCanvasForClass.CE.'"$version"
485-
fileTable+=$'.zip | ${{ needs.build.outputs.zip_size }} bytes |\n'
550+
# AnyCPU (x64) 架构文件
551+
if [ -f "InkCanvasForClass.CE.$version-x64.zip" ]; then
552+
zipSize=$(stat -c%s "InkCanvasForClass.CE.$version-x64.zip")
553+
fileTable+=$'| InkCanvasForClass.CE.'"$version"'-x64.zip | '"$zipSize"' bytes |\n'
554+
fi
555+
556+
if [ -f "InkCanvasForClass.CE.$version-x64.Setup.exe" ]; then
557+
installerSize=$(stat -c%s "InkCanvasForClass.CE.$version-x64.Setup.exe")
558+
fileTable+=$'| InkCanvasForClass.CE.'"$version"'-x64.Setup.exe | '"$installerSize"' bytes |\n'
559+
fi
486560
487-
# 安装包文件信息
488-
installerSize="${{ needs.build.outputs.installer_size }}"
489-
if [ -n "$installerSize" ]; then
561+
if [ -f "InkCanvasForClass.CE.$version-x64.zip.sigstore.json" ]; then
562+
sigstoreSize=$(stat -c%s "InkCanvasForClass.CE.$version-x64.zip.sigstore.json")
563+
fileTable+=$'| InkCanvasForClass.CE.'"$version"'-x64.zip.sigstore.json | '"$sigstoreSize"' bytes |\n'
564+
fi
565+
566+
if [ -f "InkCanvasForClass.CE.$version-x64.Setup.exe.sigstore.json" ]; then
567+
sigstoreSize=$(stat -c%s "InkCanvasForClass.CE.$version-x64.Setup.exe.sigstore.json")
568+
fileTable+=$'| InkCanvasForClass.CE.'"$version"'-x64.Setup.exe.sigstore.json | '"$sigstoreSize"' bytes |\n'
569+
fi
570+
571+
# x86 架构文件
572+
if [ -f "InkCanvasForClass.CE.$version.zip" ]; then
573+
zipSize=$(stat -c%s "InkCanvasForClass.CE.$version.zip")
574+
fileTable+=$'| InkCanvasForClass.CE.'"$version"'.zip | '"$zipSize"' bytes |\n'
575+
fi
576+
577+
if [ -f "InkCanvasForClass.CE.$version.Setup.exe" ]; then
578+
installerSize=$(stat -c%s "InkCanvasForClass.CE.$version.Setup.exe")
490579
fileTable+=$'| InkCanvasForClass.CE.'"$version"'.Setup.exe | '"$installerSize"' bytes |\n'
491580
fi
492581
493-
# 检查是否有签名文件
494582
if [ -f "InkCanvasForClass.CE.$version.zip.sigstore.json" ]; then
495583
sigstoreSize=$(stat -c%s "InkCanvasForClass.CE.$version.zip.sigstore.json")
496584
fileTable+=$'| InkCanvasForClass.CE.'"$version"'.zip.sigstore.json | '"$sigstoreSize"' bytes |\n'
497585
fi
498586
499-
# 检查安装程序签名文件
500587
if [ -f "InkCanvasForClass.CE.$version.Setup.exe.sigstore.json" ]; then
501588
sigstoreSize=$(stat -c%s "InkCanvasForClass.CE.$version.Setup.exe.sigstore.json")
502589
fileTable+=$'| InkCanvasForClass.CE.'"$version"'.Setup.exe.sigstore.json | '"$sigstoreSize"' bytes |\n'
@@ -531,6 +618,10 @@ jobs:
531618
draft: ${{ github.event.inputs.draft || false }}
532619
prerelease: ${{ needs.prepare.outputs.is_prerelease == 'true' }}
533620
files: |
621+
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}-x64.zip
622+
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}-x64.Setup.exe
623+
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}-x64.zip.sigstore.json
624+
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}-x64.Setup.exe.sigstore.json
534625
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip
535626
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.Setup.exe
536627
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip.sigstore.json
@@ -541,7 +632,7 @@ jobs:
541632

542633
post_release:
543634
needs: [prepare, release]
544-
if: success()
635+
if: success() && github.event.inputs.draft != 'true'
545636
runs-on: ubuntu-slim
546637
permissions:
547638
id-token: write
@@ -550,7 +641,8 @@ jobs:
550641
- name: Download Build Artifacts
551642
uses: actions/download-artifact@v8
552643
with:
553-
name: build-files-${{ needs.prepare.outputs.version }}
644+
pattern: build-files-${{ needs.prepare.outputs.version }}-*
645+
merge-multiple: true
554646

555647
- name: Get beta token
556648
uses: octo-sts/action@main
@@ -580,18 +672,32 @@ jobs:
580672
cd $REPO_DIR
581673
IS_PRERELEASE="${{ needs.prepare.outputs.is_prerelease }}"
582674
VERSION="${{ needs.prepare.outputs.version }}"
583-
ZIP_FILE="$GITHUB_WORKSPACE/InkCanvasForClass.CE.$VERSION.zip"
675+
X64_ZIP_FILE="$GITHUB_WORKSPACE/InkCanvasForClass.CE.$VERSION-x64.zip"
676+
X86_ZIP_FILE="$GITHUB_WORKSPACE/InkCanvasForClass.CE.$VERSION.zip"
584677
585678
if [ "$IS_PRERELEASE" == "true" ]; then
586679
mkdir -p Beta
587-
cp "$ZIP_FILE" Beta/
588-
git add Beta/InkCanvasForClass.CE.$VERSION.zip
680+
if [ -f "$X64_ZIP_FILE" ]; then
681+
cp "$X64_ZIP_FILE" Beta/
682+
git add Beta/InkCanvasForClass.CE.$VERSION-x64.zip
683+
fi
684+
if [ -f "$X86_ZIP_FILE" ]; then
685+
cp "$X86_ZIP_FILE" Beta/
686+
git add Beta/InkCanvasForClass.CE.$VERSION.zip
687+
fi
589688
git commit -m "Add $VERSION PreRelease"
590689
else
591690
mkdir -p Release Beta
592-
cp "$ZIP_FILE" Release/
593-
cp "$ZIP_FILE" Beta/
594-
git add Release/InkCanvasForClass.CE.$VERSION.zip Beta/InkCanvasForClass.CE.$VERSION.zip
691+
if [ -f "$X64_ZIP_FILE" ]; then
692+
cp "$X64_ZIP_FILE" Release/
693+
cp "$X64_ZIP_FILE" Beta/
694+
git add Release/InkCanvasForClass.CE.$VERSION-x64.zip Beta/InkCanvasForClass.CE.$VERSION-x64.zip
695+
fi
696+
if [ -f "$X86_ZIP_FILE" ]; then
697+
cp "$X86_ZIP_FILE" Release/
698+
cp "$X86_ZIP_FILE" Beta/
699+
git add Release/InkCanvasForClass.CE.$VERSION.zip Beta/InkCanvasForClass.CE.$VERSION.zip
700+
fi
595701
git commit -m "Add $VERSION Release"
596702
fi
597703
git push origin main
@@ -622,6 +728,7 @@ jobs:
622728
draft: false
623729
prerelease: ${{ needs.prepare.outputs.is_prerelease == 'true' }}
624730
files: |
731+
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}-x64.zip
625732
InkCanvasForClass.CE.${{ needs.prepare.outputs.version }}.zip
626733
fail_on_unmatched_files: false
627734
repository: "InkCanvasForClass/community-beta"

0 commit comments

Comments
 (0)