1+ name : Build and Release
2+
3+ on :
4+ workflow_dispatch :
5+ push :
6+ branches : [ "master" ]
7+ tags : [ "v*" ]
8+
9+ jobs :
10+ build :
11+ runs-on : windows-latest
12+
13+ permissions :
14+ contents : write
15+
16+ steps :
17+ - name : Checkout code
18+ uses : actions/checkout@v4
19+
20+ - name : Setup .NET
21+ uses : actions/setup-dotnet@v4
22+ with :
23+ dotnet-version : ' 8.0.x'
24+
25+ - name : Restore dependencies
26+ run : dotnet restore PCL_CE_Patcher.csproj
27+
28+ # =========================================================
29+ # 步骤 1:根据触发类型设置变量 (控制 PDB)
30+ # =========================================================
31+ - name : Set Build Options
32+ id : options
33+ shell : pwsh
34+ run : |
35+ if ("${{ github.ref }}".StartsWith("refs/tags/")) {
36+ echo "IS_RELEASE=true" >> $env:GITHUB_ENV
37+ # Release: 无调试符号,极致瘦身
38+ echo "BUILD_ARGS=-p:DebugType=None -p:DebugSymbols=false" >> $env:GITHUB_ENV
39+ } else {
40+ echo "IS_RELEASE=false" >> $env:GITHUB_ENV
41+ # CI: 保留调试符号,方便查错
42+ echo "BUILD_ARGS=-p:DebugType=portable -p:DebugSymbols=true" >> $env:GITHUB_ENV
43+ }
44+
45+ # =========================================================
46+ # 步骤 2:编译 (全靠参数控制)
47+ # =========================================================
48+ - name : Publish Patcher
49+ run : |
50+ dotnet publish PCL_CE_Patcher.csproj -c Release -r win-x64 `
51+ --no-self-contained `
52+ -p:PublishSingleFile=true `
53+ -p:IncludeNativeLibrariesForSelfExtract=true `
54+ ${{ env.BUILD_ARGS }} `
55+ -o ./output
56+
57+ # =========================================================
58+ # 步骤 3:准备文件
59+ # =========================================================
60+ - name : Prepare Assets
61+ run : |
62+ copy LICENSE ./output/
63+ copy ThirdPartyNotices.txt ./output/
64+
65+ # =========================================================
66+ # 步骤 4:打包与上传
67+ # =========================================================
68+
69+ # 场景 A: 正式发布 (Tag) -> 手动打 Zip
70+ - name : Zip for Release
71+ if : env.IS_RELEASE == 'true'
72+ run : |
73+ powershell Compress-Archive -Path ./output/* -DestinationPath PCL_CE_Patcher.zip
74+
75+ # 场景 B: CI 测试 (Push) -> 上传文件夹 (Action会自动压成zip)
76+ - name : Upload CI Artifact
77+ if : env.IS_RELEASE == 'false'
78+ uses : actions/upload-artifact@v4
79+ with :
80+ name : PCL_CE_Patcher_CI_Build
81+ path : ./output/*
82+ retention-days : 7
83+
84+ # 场景 A: 正式发布 -> 上传 Release 附件备用
85+ - name : Upload Release Artifact
86+ if : env.IS_RELEASE == 'true'
87+ uses : actions/upload-artifact@v4
88+ with :
89+ name : PCL_CE_Patcher_Release_Pkg
90+ path : PCL_CE_Patcher.zip
91+ retention-days : 90
92+
93+ # =========================================================
94+ # 步骤 5:发布到 GitHub Releases (仅 Tag)
95+ # =========================================================
96+ - name : Upload to Release Page
97+ uses : softprops/action-gh-release@v1
98+ if : startsWith(github.ref, 'refs/tags/')
99+ with :
100+ files : PCL_CE_Patcher.zip
0 commit comments