Skip to content

Commit 8dfbdce

Browse files
committed
ci(desktop): produce macOS .dmg and Windows NSIS installer
Splits the matrix into per-OS jobs so each can do native packaging: - macOS: builds the .app, then wraps it in a drag-to-Applications .dmg via hdiutil. Also keeps a plain .zip for users who prefer it. - Windows: installs NSIS via choco, runs 'wails build -nsis' which generates both the standalone .exe and a Windows installer .exe. Release artifacts now include all four: - csvops-desktop-macos-universal.dmg - csvops-desktop-macos-universal.zip - csvops-desktop-windows-amd64.zip - csvops-desktop-windows-amd64-installer.exe
1 parent 01ef5cf commit 8dfbdce

1 file changed

Lines changed: 71 additions & 34 deletions

File tree

.github/workflows/desktop-release.yml

Lines changed: 71 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,16 @@ concurrency:
1111
cancel-in-progress: false
1212

1313
jobs:
14-
build:
15-
strategy:
16-
fail-fast: false
17-
matrix:
18-
include:
19-
- os: macos-latest
20-
platform: darwin/universal
21-
artifact_name: csvops-desktop-macos-universal
22-
artifact_glob: 'desktop/build/bin/*.app'
23-
archive_cmd: 'cd desktop/build/bin && zip -r ../../../csvops-desktop-macos-universal.zip *.app'
24-
archive_path: csvops-desktop-macos-universal.zip
25-
- os: windows-latest
26-
platform: windows/amd64
27-
artifact_name: csvops-desktop-windows-amd64
28-
artifact_glob: 'desktop/build/bin/*.exe'
29-
archive_cmd: 'powershell Compress-Archive -Path desktop/build/bin/*.exe -DestinationPath csvops-desktop-windows-amd64.zip'
30-
archive_path: csvops-desktop-windows-amd64.zip
31-
runs-on: ${{ matrix.os }}
32-
14+
build-macos:
15+
runs-on: macos-latest
3316
steps:
3417
- uses: actions/checkout@v4
3518
with:
3619
fetch-depth: 0
3720

3821
- uses: actions/setup-go@v5
3922
with:
40-
# The desktop module pins go 1.23 in its go.mod but Wails needs the
41-
# Darwin LC_UUID fix from Go 1.24+; pin explicitly here.
23+
# Wails needs the Darwin LC_UUID fix from Go 1.24+.
4224
go-version: '1.24'
4325

4426
- uses: actions/setup-node@v4
@@ -47,35 +29,90 @@ jobs:
4729

4830
- name: Install Wails
4931
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
50-
shell: bash
5132

52-
- name: Add GOPATH/bin to PATH (unix)
53-
if: runner.os != 'Windows'
33+
- name: Add GOPATH/bin to PATH
5434
run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
35+
36+
- name: Build .app
37+
working-directory: desktop
38+
run: wails build -platform darwin/universal -clean
39+
40+
- name: Build .dmg
41+
run: |
42+
mkdir -p dmg-staging
43+
cp -R desktop/build/bin/csvops-desktop.app dmg-staging/
44+
ln -s /Applications dmg-staging/Applications
45+
hdiutil create \
46+
-volname "csvops" \
47+
-srcfolder dmg-staging \
48+
-ov -format UDZO \
49+
csvops-desktop-macos-universal.dmg
50+
51+
- name: Also produce a plain zip
52+
run: |
53+
cd desktop/build/bin && zip -r ../../../csvops-desktop-macos-universal.zip csvops-desktop.app
54+
55+
- name: Upload artifacts
56+
uses: actions/upload-artifact@v4
57+
with:
58+
name: macos
59+
path: |
60+
csvops-desktop-macos-universal.dmg
61+
csvops-desktop-macos-universal.zip
62+
63+
build-windows:
64+
runs-on: windows-latest
65+
steps:
66+
- uses: actions/checkout@v4
67+
with:
68+
fetch-depth: 0
69+
70+
- uses: actions/setup-go@v5
71+
with:
72+
go-version: '1.24'
73+
74+
- uses: actions/setup-node@v4
75+
with:
76+
node-version: '20'
77+
78+
- name: Install Wails
79+
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
5580
shell: bash
5681

57-
- name: Add GOPATH/bin to PATH (windows)
58-
if: runner.os == 'Windows'
82+
- name: Add GOPATH/bin to PATH
5983
run: echo "$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
6084
shell: pwsh
6185

62-
- name: Build
86+
- name: Install NSIS
87+
run: choco install -y nsis
88+
shell: pwsh
89+
90+
- name: Build .exe + NSIS installer
6391
working-directory: desktop
64-
run: wails build -platform ${{ matrix.platform }} -clean
92+
run: wails build -platform windows/amd64 -clean -nsis
6593
shell: bash
6694

67-
- name: Archive
68-
run: ${{ matrix.archive_cmd }}
95+
- name: Stage Windows artifacts
6996
shell: bash
97+
run: |
98+
# The plain exe (portable)
99+
powershell Compress-Archive -Path desktop/build/bin/*.exe -DestinationPath csvops-desktop-windows-amd64.zip
100+
# The NSIS installer (created under build/bin/)
101+
if ls desktop/build/bin/*-installer.exe 1> /dev/null 2>&1; then
102+
cp desktop/build/bin/*-installer.exe csvops-desktop-windows-amd64-installer.exe
103+
fi
70104
71-
- name: Upload artifact
105+
- name: Upload artifacts
72106
uses: actions/upload-artifact@v4
73107
with:
74-
name: ${{ matrix.artifact_name }}
75-
path: ${{ matrix.archive_path }}
108+
name: windows
109+
path: |
110+
csvops-desktop-windows-amd64.zip
111+
csvops-desktop-windows-amd64-installer.exe
112+
if-no-files-found: warn
76113

77114
release:
78-
needs: build
115+
needs: [build-macos, build-windows]
79116
runs-on: ubuntu-latest
80117
permissions:
81118
contents: write

0 commit comments

Comments
 (0)