11name : Build Overlay Server
22
3+ # Builds the Rust gsm_overlay_server binaries and publishes them to a single
4+ # rolling "overlay-server" release that the app release workflows pull from,
5+ # so they don't have to set up Rust and rebuild it every run.
36on :
7+ push :
8+ branches :
9+ - main
10+ paths :
11+ - GSM_Overlay/input_server/**
412 workflow_dispatch :
513
14+ concurrency :
15+ group : build-overlay-server-${{ github.ref }}
16+ cancel-in-progress : true
17+
618jobs :
719 build-windows :
820 runs-on : windows-latest
@@ -51,13 +63,25 @@ jobs:
5163 wait-for-completion : true
5264 output-artifact-directory : signed_output
5365
54- - name : Upload signed binary
55- if : steps.sign.outcome == 'success'
66+ - name : Stage binary for release (prefer signed)
67+ shell : pwsh
68+ run : |
69+ New-Item -ItemType Directory -Force -Path staging | Out-Null
70+ $signed = Get-ChildItem -Path signed_output -Recurse -File -Filter gsm_overlay_server.exe -ErrorAction SilentlyContinue | Select-Object -First 1
71+ if ($signed) {
72+ Write-Host "Using signed binary: $($signed.FullName)"
73+ Copy-Item $signed.FullName staging/gsm_overlay_server-win32.exe -Force
74+ } else {
75+ Write-Warning "Signed binary not available; falling back to unsigned."
76+ Copy-Item GSM_Overlay/input_server/target/release/gsm_overlay_server.exe staging/gsm_overlay_server-win32.exe -Force
77+ }
78+
79+ - name : Upload windows artifact
5680 uses : actions/upload-artifact@v4
5781 with :
58- name : gsm- overlay-server-signed-windows
59- path : signed_output
60- if-no-files-found : warn
82+ name : overlay-server-win32
83+ path : staging/gsm_overlay_server-win32.exe
84+ if-no-files-found : error
6185
6286 build-linux :
6387 runs-on : ubuntu-latest
@@ -91,11 +115,16 @@ jobs:
91115 - name : Build gamepad server (Linux)
92116 run : cargo build --release --manifest-path GSM_Overlay/input_server/Cargo.toml
93117
94- - name : Upload binary
118+ - name : Stage binary for release
119+ run : |
120+ mkdir -p staging
121+ cp GSM_Overlay/input_server/target/release/gsm_overlay_server staging/gsm_overlay_server-linux
122+
123+ - name : Upload linux artifact
95124 uses : actions/upload-artifact@v4
96125 with :
97- name : gsm- overlay-server-linux
98- path : GSM_Overlay/input_server/target/release/ gsm_overlay_server
126+ name : overlay-server-linux
127+ path : staging/ gsm_overlay_server-linux
99128 if-no-files-found : error
100129
101130 build-mac-arm64 :
@@ -121,9 +150,50 @@ jobs:
121150 - name : Build gamepad server (macOS)
122151 run : cargo build --release --manifest-path GSM_Overlay/input_server/Cargo.toml
123152
124- - name : Upload binary
153+ - name : Stage binary for release
154+ run : |
155+ mkdir -p staging
156+ cp GSM_Overlay/input_server/target/release/gsm_overlay_server staging/gsm_overlay_server-darwin
157+
158+ - name : Upload mac artifact
125159 uses : actions/upload-artifact@v4
126160 with :
127- name : gsm- overlay-server-mac-arm64
128- path : GSM_Overlay/input_server/target/release/ gsm_overlay_server
161+ name : overlay-server-darwin
162+ path : staging/ gsm_overlay_server-darwin
129163 if-no-files-found : error
164+
165+ publish :
166+ runs-on : ubuntu-latest
167+ needs :
168+ - build-windows
169+ - build-linux
170+ - build-mac-arm64
171+ permissions :
172+ contents : write
173+ steps :
174+ - name : Download platform binaries
175+ uses : actions/download-artifact@v4
176+ with :
177+ pattern : overlay-server-*
178+ path : staging
179+ merge-multiple : true
180+
181+ - name : Publish to rolling overlay-server release
182+ uses : softprops/action-gh-release@v2
183+ with :
184+ tag_name : overlay-server
185+ name : Overlay Server Binaries
186+ body : |
187+ Prebuilt `gsm_overlay_server` binaries consumed by the app release
188+ workflows. Auto-updated whenever `GSM_Overlay/input_server` changes.
189+ Not a user-facing release.
190+ prerelease : true
191+ make_latest : false
192+ overwrite_files : true
193+ fail_on_unmatched_files : true
194+ files : |
195+ staging/gsm_overlay_server-win32.exe
196+ staging/gsm_overlay_server-linux
197+ staging/gsm_overlay_server-darwin
198+ env :
199+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments