@@ -4,20 +4,18 @@ name: Publish Signed Builds
44
55on :
66 workflow_dispatch :
7- inputs :
8- branch :
9- description : ' Specify branch name (preview/stable/github-signpath-test)'
10- required : true
11- default : ' github-signpath-test'
127
138env :
149 BRANCH_NAME : ${{ github.head_ref || github.ref_name }}
1510 SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
1611 DOTNET_INSTALL_DIR : ' .\.dotnet'
17- DOTNET_VERSION : ' 9.x '
12+ DOTNET_VERSION : ' 9.0.3xx '
1813 DOTNET_QUALITY : ' ga'
1914 NUGET_PACKAGES : ${{ github.workspace }}/.nuget/packages
20- SIGNPATH_ARTIFACT_SLUG : ' initial' # change this to 'aot-release' when releasing with AOT
15+ SIGNPATH_ARTIFACT_SLUG : ' initial' # change this to 'aot-release' when releasing with AOT or 'initial' for normal release
16+ BUILD_PROFILE_PREVIEW : ' Publish-PreviewRelease'
17+ BUILD_PROFILE_STABLE : ' Publish-StableRelease'
18+ BUILD_PROFILE_DEBUG : ' Publish-DebugCIRelease'
2119
2220# schedule:
2321# - cron: '0 0 * * 0' # At 00:00 on Sunday
@@ -28,48 +26,44 @@ jobs:
2826 strategy :
2927 matrix :
3028 platform : [x64]
31- framework : [net9.0-windows10.0.22621 .0]
29+ framework : [net9.0-windows10.0.26100 .0]
3230
3331 env :
3432 CONFIGURATION_STRATEGY : " "
3533 PUBLISH_PROFILE : " "
3634 SIGNING_POLICY_SLUG : " "
3735 VERSION : " "
3836 Platform : ${{ matrix.platform }}
39-
37+ SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
4038
4139 steps :
4240 - name : Set Configuration and Environment Variables
4341 id : set_env
4442 run : |
45- if ($env:GITHUB_EVENT_NAME -eq "workflow_dispatch") {
46- $branch = $env:GITHUB_EVENT_INPUTS_BRANCH
47- } else {
48- $branch = $env:GITHUB_REF_NAME
49- }
43+ $branch = $env:GITHUB_REF_NAME
5044
5145 if ($branch -eq "preview") {
5246 echo "CONFIGURATION_STRATEGY=Release" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
53- echo "PUBLISH_PROFILE=Publish-PreviewRelease " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
47+ echo "PUBLISH_PROFILE=${{ env.BUILD_PROFILE_PREVIEW }} " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
5448 echo "SIGNING_POLICY_SLUG=release-signing" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
5549 } elseif ($branch -eq "stable") {
5650 echo "CONFIGURATION_STRATEGY=Publish" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
57- echo "PUBLISH_PROFILE=Publish-StableRelease " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
51+ echo "PUBLISH_PROFILE=${{ env.BUILD_PROFILE_STABLE }} " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
5852 echo "SIGNING_POLICY_SLUG=release-signing" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
5953 } elseif ($branch -eq "github-signpath-test") {
6054 echo "CONFIGURATION_STRATEGY=Debug" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
61- echo "PUBLISH_PROFILE=Publish-DebugCIRelease " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
62- echo "SIGNING_POLICY_SLUG=test-signing" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
55+ echo "PUBLISH_PROFILE=${{ env.BUILD_PROFILE_DEBUG }} " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
56+ echo "SIGNING_POLICY_SLUG=test-signing-ci " | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
6357 } else {
6458 Write-Error "Unknown branch or input: $branch"
6559 exit 1
6660 }
6761
6862 - name : Print env
6963 run : |
70- echo Configuration Strategy: $env:CONFIGURATION_STRATEGY
71- echo Publish Profile: $env:PUBLISH_PROFILE
72- echo Signing Policy: $env:SIGNING_POLICY_SLUG
64+ echo "::notice:: Configuration Strategy: $env:CONFIGURATION_STRATEGY"
65+ echo "::notice:: Publish Profile: $env:PUBLISH_PROFILE"
66+ echo "::notice:: Signing Policy: $env:SIGNING_POLICY_SLUG"
7367
7468 - name : Checkout
7569 uses : actions/checkout@v4
@@ -86,13 +80,20 @@ jobs:
8680
8781 - name : Build
8882 run : |
83+ dotnet workload update
8984 dotnet publish CollapseLauncher -c ${{ env.CONFIGURATION_STRATEGY }} -p:PublishProfile=${{ env.PUBLISH_PROFILE }} -p:PublishDir=".\build\"
9085
9186 - name : Prepare publish artifacts
9287 run : |
88+ cd CollapseLauncher
9389 .\build\CollapseLauncher.exe generatevelopackmetadata
94- $version = ((Get-Item .\build\CollapseLauncher.exe).VersionInfo.FileVersion).TrimEnd(".0")
95- echo Build version: $version
90+
91+ $version = ((Get-Item .\build\CollapseLauncher.exe).VersionInfo.FileVersion)
92+ if ($version.EndsWith(".0")) {
93+ $version = $version.Substring(0, $version.Length - 2)
94+ }
95+
96+ echo "::notice::Build version: $version"
9697 echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
9798 mkdir SignArtifact
9899 mkdir SignArtifact\BuildArtifact-$version
@@ -102,47 +103,90 @@ jobs:
102103 id : upload-unsigned-artifact
103104 uses : actions/upload-artifact@v4
104105 with :
105- name : collapse_ ${{ env.SIGNING_POLICY_SLUG }}-${{ env.CONFIGURATION_STRATEGY }}_${{ env.PUBLISH_PROFILE }}
106+ name : collapse-v${{ env.VERSION }}_ ${{ env.SIGNING_POLICY_SLUG }}-${{ env.CONFIGURATION_STRATEGY }}_${{ env.PUBLISH_PROFILE }}
106107 path : ./CollapseLauncher/SignArtifact
107108 compression-level : 9
108109
110+ - name : Notify Discord for pending build
111+ 112+ if : always()
113+ continue-on-error : true
114+ with :
115+ webhook : ${{ secrets.DISCORD_WEBHOOK_CIRELEASENOTIFIER }}
116+ title : Collapse Launcher Release CI build is PENDING!
117+ nofail : true
118+ color : 0xFF0000
119+ url : https://github.com/CollapseLauncher/Collapse/actions/runs/${{ github.run_id }}
120+ description : |
121+ Commit `${{ github.sha }}` by ${{ github.actor }} in branch `${{ github.ref_name }}`
122+ Version: ${{ env.VERSION }}
123+ [Click here to view the run](https://github.com/CollapseLauncher/Collapse/actions/runs/${{ github.run_id }})
124+ For core maintainers, go to SignPath to sign the build!
125+
109126 - name : Sign Build Artifact with SignPath
110- uses : signpath/github-action-submit-signing-request@v1.1
127+ uses : signpath/github-action-submit-signing-request@v1.3
111128 with :
112129 api-token : ' ${{ secrets.SIGNPATH_API_TOKEN }}'
113130 organization-id : ${{ secrets.SIGNPATH_ORG_ID }}
114131 project-slug : ' Collapse'
115132 signing-policy-slug : ${{ env.SIGNING_POLICY_SLUG }}
116133 github-artifact-id : ' ${{ steps.upload-unsigned-artifact.outputs.artifact-id }}'
117134 wait-for-completion : true
118- output-artifact-directory : ' /SignedArtifact/'
135+ wait-for-completion-timeout-in-seconds : 1200
136+ output-artifact-directory : ' ${{ runner.temp }}/SignedArtifact/'
137+ artifact-configuration-slug : ${{ env.SIGNPATH_ARTIFACT_SLUG}}
119138
120139 - name : Process Signed Build
121140 run : |
122- $buildDir = '\SignedArtifact\BuildArtifact-${{ env.VERSION }}'
123- echo Re-checking build version
124- echo ((Get-Item $buildDir\CollapseLauncher.exe).VersionInfo.FileVersion).TrimEnd(".0")
141+ $buildDir = '${{ runner.temp }}\SignedArtifact\BuildArtifact-${{ env.VERSION }}'
142+ echo "Re-checking build version"
143+ $versionFinal = ((Get-Item $buildDir\CollapseLauncher.exe).VersionInfo.FileVersion)
144+ if ($versionFinal.EndsWith(".0")) {
145+ $versionFinal = $versionFinal.Substring(0, $versionFinal.Length - 2)
146+ }
147+ echo "::notice::Final build version: $versionFinal"
148+ echo "VERSION=$versionFinal" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
149+
150+ - name : Verify Signed Artifacts
151+ run : |
152+ $buildDir = '${{ runner.temp }}\SignedArtifact\BuildArtifact-${{ env.VERSION }}'
153+ $files = Get-ChildItem -Path "$buildDir" -Recurse -Include "*.exe","*.dll"
154+ foreach ($file in $files) {
155+ $signature = Get-AuthenticodeSignature $file.FullName
156+ if ($signature.Status -ne "Valid") {
157+ echo "::error::Invalid signature on $($file.Name): $($signature.Status)"
158+ }
159+ echo "✓ $($file.Name): $($signature.SignerCertificate.Subject)"
160+ }
125161
126162 - name : Re-upload Signed Artifact to GitHub
127163 uses : actions/upload-artifact@v4
128164 with :
129- name : (SIGNED)collapse_ ${{ env.SIGNING_POLICY_SLUG }}-${{ env.CONFIGURATION_STRATEGY }}_${{ env.PUBLISH_PROFILE }}
130- path : /SignedArtifact
165+ name : SIGNED_collapse-v${{ env.VERSION }}_ ${{ env.SIGNING_POLICY_SLUG }}-${{ env.CONFIGURATION_STRATEGY }}_${{ env.PUBLISH_PROFILE }}
166+ path : ${{ runner.temp }} /SignedArtifact
131167 compression-level : 9
132168
133- notify-discord :
134- runs-on : ubuntu-latest
135- if : always()
136- needs : [build]
137- steps :
138- - name : Notify Discord
139- 169+ - name : Final Notify Discord
170+ 140171 if : always()
141172 continue-on-error : true
142173 with :
143- webhook : ${{ secrets.DISCORD_WEBHOOK_NIGHTLY }}
144- title : Collapse Launcher CI build is complete!
174+ webhook : ${{ secrets.DISCORD_WEBHOOK_CIRELEASENOTIFIER }}
175+ title : Collapse Launcher Release CI build is complete!
145176 status : ${{ job.status }}
177+ nofail : true
178+ url : https://github.com/CollapseLauncher/Collapse/actions/runs/${{ github.run_id }}
146179 description : |
147- Commit `${{ github.sha }}` by ${{ github.actor }}
180+ Commit `${{ github.sha }}` by ${{ github.actor }} in branch `${{ github.ref_name }}`
148181 Click [here](https://nightly.link/CollapseLauncher/Collapse/actions/runs/${{ github.run_id }}) to download!
182+
183+ - name : Install Sentry CLI
184+ uses :
MinoruSekine/[email protected] 185+ with :
186+ buckets : extras
187+ apps : sentry-cli
188+
189+ - name : Upload Debug artifact to Sentry
190+ run : |
191+ sentry-cli debug-files upload --org collapse --project collapse-launcher --include-sources '.\SignedArtifact\BuildArtifact-${{ env.VERSION }}'
192+
0 commit comments