Skip to content

Commit 463cd2f

Browse files
intel352claude
andcommitted
perf: parallelize binary builds in release workflow
Split the monolithic binary build step into a matrix job with 3 parallel runners (server, wfctl, lsp-server). Each builds its platform variants concurrently, uploads artifacts, and the release job collects them all. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent eb72514 commit 463cd2f

File tree

1 file changed

+55
-23
lines changed

1 file changed

+55
-23
lines changed

.github/workflows/release.yml

Lines changed: 55 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)