@@ -134,16 +134,31 @@ jobs:
134134 build-args : |
135135 NPM_TOKEN=${{ secrets.GITHUB_TOKEN }}
136136
137- release :
138- name : Create GitHub Release
137+ build-binaries :
138+ name : Build ${{ matrix.name }} binaries
139139 runs-on : ubuntu-latest
140- needs : [test, build-ui]
140+ needs : test
141+ strategy :
142+ fail-fast : false
143+ matrix :
144+ include :
145+ - name : server
146+ cmd : ./cmd/server
147+ prefix : workflow
148+ platforms : linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64
149+ - name : wfctl
150+ cmd : ./cmd/wfctl
151+ prefix : wfctl
152+ platforms : linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64
153+ - name : lsp-server
154+ cmd : ./cmd/workflow-lsp-server
155+ prefix : workflow-lsp-server
156+ # Windows LSP build skipped: tliron/kutil v0.3.11 has a termenv API mismatch on Windows.
157+ platforms : linux/amd64 linux/arm64 darwin/amd64 darwin/arm64
141158
142159 steps :
143160 - name : Check out code
144161 uses : actions/checkout@v4
145- with :
146- fetch-depth : 0
147162
148163 - name : Set up Go
149164 uses : actions/setup-go@v5
@@ -172,24 +187,41 @@ jobs:
172187 VERSION=${GITHUB_REF#refs/tags/}
173188 LDFLAGS="-s -w -X main.version=${VERSION}"
174189
175- GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/workflow-linux-amd64 ./cmd/server
176- GOOS=linux GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/workflow-linux-arm64 ./cmd/server
177- GOOS=darwin GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/workflow-darwin-amd64 ./cmd/server
178- GOOS=darwin GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/workflow-darwin-arm64 ./cmd/server
179- GOOS=windows GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/workflow-windows-amd64.exe ./cmd/server
180-
181- GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/wfctl-linux-amd64 ./cmd/wfctl
182- GOOS=linux GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/wfctl-linux-arm64 ./cmd/wfctl
183- GOOS=darwin GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/wfctl-darwin-amd64 ./cmd/wfctl
184- GOOS=darwin GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/wfctl-darwin-arm64 ./cmd/wfctl
185- GOOS=windows GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/wfctl-windows-amd64.exe ./cmd/wfctl
186-
187- GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/workflow-lsp-server-linux-amd64 ./cmd/workflow-lsp-server
188- GOOS=linux GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/workflow-lsp-server-linux-arm64 ./cmd/workflow-lsp-server
189- GOOS=darwin GOARCH=amd64 go build -ldflags="${LDFLAGS}" -o dist/workflow-lsp-server-darwin-amd64 ./cmd/workflow-lsp-server
190- GOOS=darwin GOARCH=arm64 go build -ldflags="${LDFLAGS}" -o dist/workflow-lsp-server-darwin-arm64 ./cmd/workflow-lsp-server
191- # Windows LSP build skipped: tliron/kutil v0.3.11 has a termenv API mismatch on Windows.
192- # Tracked upstream. Server/wfctl Windows builds are unaffected.
190+ for platform in ${{ matrix.platforms }}; do
191+ GOOS="${platform%/*}"
192+ GOARCH="${platform#*/}"
193+ output="dist/${{ matrix.prefix }}-${GOOS}-${GOARCH}"
194+ if [ "${GOOS}" = "windows" ]; then
195+ output="${output}.exe"
196+ fi
197+ echo "Building ${output}..."
198+ GOOS="${GOOS}" GOARCH="${GOARCH}" go build -ldflags="${LDFLAGS}" -o "${output}" ${{ matrix.cmd }}
199+ done
200+
201+ - name : Upload binaries
202+ uses : actions/upload-artifact@v4
203+ with :
204+ name : binaries-${{ matrix.name }}
205+ path : dist/*
206+ retention-days : 1
207+
208+ release :
209+ name : Create GitHub Release
210+ runs-on : ubuntu-latest
211+ needs : [build-binaries, build-ui]
212+
213+ steps :
214+ - name : Check out code
215+ uses : actions/checkout@v4
216+ with :
217+ fetch-depth : 0
218+
219+ - name : Download all binary artifacts
220+ uses : actions/download-artifact@v4
221+ with :
222+ pattern : binaries-*
223+ path : dist
224+ merge-multiple : true
193225
194226 - name : Download admin UI artifact
195227 uses : actions/download-artifact@v4
0 commit comments