2020 arch : x64
2121 - os : windows-latest
2222 arch : x64
23+ - os : ubuntu-latest
24+ arch : x64
2325
2426 steps :
27+ - name : Free Disk Space (macOS)
28+ if : runner.os == 'macOS'
29+ run : |
30+ echo "Disk space before cleanup:"
31+ df -h
32+ # Remove Xcode completely (not needed for Electron builds) - saves ~15GB
33+ sudo rm -rf /Applications/Xcode.app || true
34+ sudo rm -rf /Applications/Xcode_*.app || true
35+ # Note: Keep /Library/Developer/CommandLineTools as codesign needs it
36+ # Remove iOS simulators
37+ sudo rm -rf ~/Library/Developer/CoreSimulator || true
38+ # Remove all Xcode Developer files
39+ sudo rm -rf ~/Library/Developer/Xcode || true
40+ sudo rm -rf /Library/Developer/Xcode || true
41+ # Remove provisioning profiles
42+ sudo rm -rf ~/Library/MobileDevice/Provisioning\ Profiles || true
43+ # Remove Android SDK if present
44+ sudo rm -rf ~/Library/Android/sdk || true
45+ sudo rm -rf /usr/local/lib/android || true
46+ # Remove .NET
47+ sudo rm -rf /usr/local/share/dotnet || true
48+ # Remove Go
49+ sudo rm -rf /usr/local/go || true
50+ sudo rm -rf ~/go || true
51+ # Remove Ruby
52+ sudo rm -rf /usr/local/lib/ruby || true
53+ sudo rm -rf ~/.gem || true
54+ # Remove Swift toolchains
55+ sudo rm -rf /Library/Developer/Toolchains || true
56+ # Remove Homebrew cache
57+ rm -rf ~/Library/Caches/Homebrew/* || true
58+ brew cleanup --prune=all 2>/dev/null || true
59+ # Remove npm cache
60+ npm cache clean --force || true
61+ # Remove pip cache
62+ pip cache purge 2>/dev/null || true
63+ # Note: Don't delete ~/Library/Caches/* as subsequent steps may need it
64+
65+ # Additional cleanup for more disk space
66+ # Remove hosted tool cache (can be several GB)
67+ sudo rm -rf /Users/runner/hostedtoolcache || true
68+ sudo rm -rf /opt/hostedtoolcache || true
69+ # Remove browsers (not needed for Electron builds)
70+ sudo rm -rf "/Applications/Google Chrome.app" || true
71+ sudo rm -rf "/Applications/Firefox.app" || true
72+ sudo rm -rf "/Applications/Safari Technology Preview.app" || true
73+ # Remove PowerShell
74+ sudo rm -rf /usr/local/microsoft/powershell || true
75+ sudo rm -rf /usr/local/share/powershell || true
76+ # Remove more from /usr/local
77+ sudo rm -rf /usr/local/aws-cli || true
78+ sudo rm -rf /usr/local/julia* || true
79+ sudo rm -rf /usr/local/miniconda || true
80+ # Remove unused large directories
81+ sudo rm -rf /usr/share/swift || true
82+ sudo rm -rf /usr/share/miniconda || true
83+ # Remove Docker images if present
84+ docker system prune -af 2>/dev/null || true
85+
86+ echo "Disk space after cleanup:"
87+ df -h
88+
2589 - name : Checkout Code
2690 uses : actions/checkout@v4
2791
@@ -46,6 +110,23 @@ jobs:
46110 - name : Install Dependencies
47111 run : npm install
48112
113+ # Install libfuse2 for Linux AppImage builds
114+ - name : Install libfuse2 (Linux)
115+ if : runner.os == 'Linux'
116+ run : |
117+ sudo apt-get update
118+ sudo apt-get install -y libfuse2
119+
120+ # Verify disk space before build
121+ - name : Check Disk Space Before Build (macOS)
122+ if : runner.os == 'macOS'
123+ run : |
124+ echo "Disk space available before build:"
125+ df -h
126+ echo ""
127+ echo "Largest directories in home:"
128+ du -sh ~/* 2>/dev/null | sort -rh | head -10 || true
129+
49130 # Step for macOS builds with signing
50131 - name : Build Release Files (macOS with signing)
51132 if : runner.os == 'macOS'
@@ -78,6 +159,19 @@ jobs:
78159 VITE_STACK_SECRET_SERVER_KEY : ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
79160 USE_NPM_INSTALL_BUN : ' true'
80161
162+ # Step for Linux builds
163+ - name : Build Release Files (Linux)
164+ if : runner.os == 'Linux'
165+ timeout-minutes : 90
166+ run : npm run build:linux
167+ env :
168+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
169+ VITE_BASE_URL : ${{ secrets.VITE_BASE_URL }}
170+ VITE_STACK_PROJECT_ID : ${{ secrets.VITE_STACK_PROJECT_ID }}
171+ VITE_STACK_PUBLISHABLE_CLIENT_KEY : ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
172+ VITE_STACK_SECRET_SERVER_KEY : ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
173+ USE_NPM_INSTALL_BUN : ' true'
174+
81175 - name : Upload Artifact (macOS - dmg only)
82176 if : runner.os == 'macOS'
83177 uses : actions/upload-artifact@v6
@@ -95,13 +189,22 @@ jobs:
95189 path : |
96190 release/*.exe
97191 retention-days : 5
192+
193+ - name : Upload Artifact (Linux - AppImage only)
194+ if : runner.os == 'Linux'
195+ uses : actions/upload-artifact@v6
196+ with :
197+ name : release-${{ matrix.os }}-${{ matrix.arch }}
198+ path : |
199+ release/*.AppImage
200+ retention-days : 5
98201 merge-release :
99202 needs : build
100203 runs-on : ubuntu-latest
101204 steps :
102205 - name : Create directories
103206 run : |
104- mkdir -p release/mac-x64 release/mac-arm64 release/win-x64
207+ mkdir -p release/mac-x64 release/mac-arm64 release/win-x64 release/linux-x64
105208
106209 # Download all artifacts with correct names
107210 - name : Download mac-x64 artifact
@@ -122,7 +225,13 @@ jobs:
122225 name : release-windows-latest-x64
123226 path : temp-win-x64
124227
125- # Move only dmg files for macOS and exe files for Windows
228+ - name : Download linux-x64 artifact
229+ uses : actions/download-artifact@v7
230+ with :
231+ name : release-ubuntu-latest-x64
232+ path : temp-linux-x64
233+
234+ # Move only dmg files for macOS, exe files for Windows, and AppImage for Linux
126235 - name : Move files to clean folders
127236 shell : bash
128237 run : |
@@ -146,3 +255,10 @@ jobs:
146255 else
147256 find temp-win-x64 -name "*.exe" -exec mv {} release/win-x64/ \; || true
148257 fi
258+
259+ # linux-x64 - only move AppImage files
260+ if [ -d "temp-linux-x64/release" ]; then
261+ find temp-linux-x64/release -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
262+ else
263+ find temp-linux-x64 -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
264+ fi
0 commit comments