@@ -21,11 +21,12 @@ permissions:
2121jobs :
2222 build :
2323 runs-on : ${{ matrix.os }}
24+ timeout-minutes : 120
2425
2526 strategy :
2627 matrix :
2728 include :
28- - os : [self-hosted, macOS, ARM64]
29+ - os : macos-latest
2930 arch : arm64
3031 artifact_name : macos-arm64
3132 - os : windows-latest
@@ -58,13 +59,16 @@ jobs:
5859 if : " !contains(matrix.os, 'self-hosted')"
5960 uses : actions/setup-python@v6
6061 with :
61- python-version : " 3.11"
62+ python-version : ' 3.11'
6263
6364 - name : Install Python Dependencies
6465 run : |
6566 python3 -m pip install --upgrade pip
6667 pip3 install uv
6768
69+ - name : Install bun
70+ run : npm install -g bun
71+
6872 - name : Install Dependencies
6973 run : npm install
7074
9296 # Step for macOS builds with signing
9397 - name : Build Release Files (macOS with signing)
9498 if : runner.os == 'macOS'
99+ timeout-minutes : 90
95100 run : |
96101 # Increase file descriptor limit to prevent EMFILE errors during signing
102+ # This is needed because electron-builder signs all files recursively,
103+ # and Python venvs contain thousands of files
97104 ulimit -n 65536 || ulimit -n 10240
98105 echo "File descriptor limit set to: $(ulimit -n)"
99106 npm run build -- --arch ${{ matrix.arch }}
@@ -108,28 +115,33 @@ jobs:
108115 VITE_STACK_PROJECT_ID : ${{ secrets.VITE_STACK_PROJECT_ID }}
109116 VITE_STACK_PUBLISHABLE_CLIENT_KEY : ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
110117 VITE_STACK_SECRET_SERVER_KEY : ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
118+ USE_NPM_INSTALL_BUN : ' true'
111119
112120 # Step for Windows builds without signing
113121 - name : Build Release Files (Windows without signing)
114122 if : runner.os == 'Windows'
123+ timeout-minutes : 90
115124 run : npm run build -- --arch ${{ matrix.arch }}
116125 env :
117126 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
118127 VITE_BASE_URL : ${{ secrets.VITE_BASE_URL }}
119128 VITE_STACK_PROJECT_ID : ${{ secrets.VITE_STACK_PROJECT_ID }}
120129 VITE_STACK_PUBLISHABLE_CLIENT_KEY : ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
121130 VITE_STACK_SECRET_SERVER_KEY : ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
131+ USE_NPM_INSTALL_BUN : ' true'
122132
123133 # Step for Linux builds
124134 - name : Build Release Files (Linux)
125135 if : runner.os == 'Linux'
136+ timeout-minutes : 90
126137 run : npm run build:linux
127138 env :
128139 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
129140 VITE_BASE_URL : ${{ secrets.VITE_BASE_URL }}
130141 VITE_STACK_PROJECT_ID : ${{ secrets.VITE_STACK_PROJECT_ID }}
131142 VITE_STACK_PUBLISHABLE_CLIENT_KEY : ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
132143 VITE_STACK_SECRET_SERVER_KEY : ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
144+ USE_NPM_INSTALL_BUN : ' true'
133145
134146 # Verify built app contains Electron Framework
135147 - name : Verify Built App (macOS)
@@ -154,14 +166,31 @@ jobs:
154166 ls -la release/
155167 fi
156168
157- - name : Upload Artifact
169+ - name : Upload Artifact (macOS - dmg only)
170+ if : runner.os == 'macOS'
171+ uses : actions/upload-artifact@v6
172+ with :
173+ name : release-${{ matrix.artifact_name }}-${{ matrix.arch }}
174+ path : |
175+ release/*.dmg
176+ retention-days : 5
177+
178+ - name : Upload Artifact (Windows - exe only)
179+ if : runner.os == 'Windows'
180+ uses : actions/upload-artifact@v6
181+ with :
182+ name : release-${{ matrix.artifact_name }}-${{ matrix.arch }}
183+ path : |
184+ release/*.exe
185+ retention-days : 5
186+
187+ - name : Upload Artifact (Linux - AppImage only)
188+ if : runner.os == 'Linux'
158189 uses : actions/upload-artifact@v6
159190 with :
160191 name : release-${{ matrix.artifact_name }}-${{ matrix.arch }}
161192 path : |
162- release/*
163- !release/builder-debug.yml
164- !release/builder-effective-config.yaml
193+ release/*.AppImage
165194 retention-days : 5
166195 merge-release :
167196 needs : build
@@ -189,29 +218,29 @@ jobs:
189218 name : release-ubuntu-latest-x64
190219 path : temp-linux-x64
191220
192- # Move files to final release directory, removing any nested release/ directory
221+ # Move only dmg files for macOS, exe files for Windows, and AppImage for Linux
193222 - name : Move files to clean folders
194223 shell : bash
195224 run : |
196- # mac-arm64
225+ # mac-arm64 - only move dmg files
197226 if [ -d "temp-mac-arm64/release" ]; then
198- mv temp-mac-arm64/release/* release/mac-arm64/ || true
227+ find temp-mac-arm64/release -name "*.dmg" -exec mv {} release/mac-arm64/ \; || true
199228 else
200- mv temp-mac-arm64/* release/mac-arm64/ || true
229+ find temp-mac-arm64 -name "*.dmg" -exec mv {} release/mac-arm64/ \; || true
201230 fi
202231
203- # win-x64
232+ # win-x64 - only move exe files
204233 if [ -d "temp-win-x64/release" ]; then
205- mv temp-win-x64/release/* release/win-x64/ || true
234+ find temp-win-x64/release -name "*.exe" -exec mv {} release/win-x64/ \; || true
206235 else
207- mv temp-win-x64/* release/win-x64/ || true
236+ find temp-win-x64 -name "*.exe" -exec mv {} release/win-x64/ \; || true
208237 fi
209238
210- # linux-x64
239+ # linux-x64 - only move AppImage files
211240 if [ -d "temp-linux-x64/release" ]; then
212- mv temp-linux-x64/release/* release/linux-x64/ || true
241+ find temp-linux-x64/release -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
213242 else
214- mv temp-linux-x64/* release/linux-x64/ || true
243+ find temp-linux-x64 -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
215244 fi
216245
217246 # Create GitHub Release
0 commit comments