Skip to content

Commit 16e78a0

Browse files
author
Brendan Gray
committed
feat: add CUDA CI builds and download page variant toggle
1 parent 3dc1459 commit 16e78a0

2 files changed

Lines changed: 162 additions & 29 deletions

File tree

.github/workflows/build.yml

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ jobs:
7070
- name: Convert icon for Linux
7171
run: convert icon.ico[0] build/icon.png || (mkdir -p build && cp icon.ico build/icon.png)
7272

73-
- name: Build Linux AppImage
73+
- name: Build Linux AppImage (Standard)
7474
run: npx electron-builder --linux --x64 --config electron-builder.nosign.json
7575
env:
7676
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -82,6 +82,74 @@ jobs:
8282
path: dist-electron/guIDE-*.AppImage
8383
retention-days: 30
8484

85+
build-linux-cuda:
86+
runs-on: ubuntu-latest
87+
steps:
88+
- uses: actions/checkout@v4
89+
90+
- uses: actions/setup-node@v4
91+
with:
92+
node-version: '20'
93+
94+
- uses: actions/setup-python@v5
95+
with:
96+
python-version: '3.11'
97+
98+
- name: Install dependencies
99+
run: npm ci
100+
101+
- name: Build renderer
102+
run: npm run build:renderer
103+
104+
- name: Convert icon for Linux
105+
run: convert icon.ico[0] build/icon.png || (mkdir -p build && cp icon.ico build/icon.png)
106+
107+
- name: Build Linux AppImage (CUDA)
108+
run: npx electron-builder --linux --x64 --config electron-builder.nosign.cuda.json
109+
env:
110+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
111+
112+
- name: Upload Linux CUDA artifact
113+
uses: actions/upload-artifact@v4
114+
with:
115+
name: linux-appimage-cuda
116+
path: dist-electron/guIDE-CUDA-*.AppImage
117+
retention-days: 30
118+
119+
build-windows-cuda:
120+
runs-on: windows-latest
121+
steps:
122+
- uses: actions/checkout@v4
123+
124+
- uses: actions/setup-node@v4
125+
with:
126+
node-version: '20'
127+
128+
- uses: actions/setup-python@v5
129+
with:
130+
python-version: '3.11'
131+
132+
- name: Install dependencies
133+
run: npm ci
134+
135+
- name: Build renderer
136+
run: npm run build:renderer
137+
138+
- name: Build Windows installer (CUDA)
139+
run: npx electron-builder --win --x64 --config electron-builder.nosign.cuda.json
140+
env:
141+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
142+
CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
143+
CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
144+
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
145+
146+
- name: Upload Windows CUDA artifact
147+
uses: actions/upload-artifact@v4
148+
with:
149+
name: windows-installer-cuda
150+
path: dist-electron/guIDE-CUDA-Setup-*.exe
151+
retention-days: 30
152+
85153
build-mac:
86154
runs-on: macos-latest
87155
steps:
@@ -121,7 +189,7 @@ jobs:
121189
retention-days: 30
122190

123191
release:
124-
needs: [build-windows, build-linux, build-mac]
192+
needs: [build-windows, build-windows-cuda, build-linux, build-linux-cuda, build-mac]
125193
runs-on: ubuntu-latest
126194
if: startsWith(github.ref, 'refs/tags/v')
127195
steps:
@@ -138,7 +206,9 @@ jobs:
138206
with:
139207
files: |
140208
artifacts/windows-installer/*
209+
artifacts/windows-installer-cuda/*
141210
artifacts/linux-appimage/*
211+
artifacts/linux-appimage-cuda/*
142212
artifacts/mac-dmg/*
143213
draft: false
144214
prerelease: false

website/src/app/download/page.tsx

Lines changed: 90 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,78 @@
22

33
// Single source of truth for the displayed release version.
44
// Updated automatically by: npm run release:deploy (from IDE root)
5-
const CURRENT_VERSION = '1.6.3';
5+
const CURRENT_VERSION = '1.6.4';
66

77
import Link from 'next/link';
88
import { useState } from 'react';
99
import FadeIn from '@/components/FadeIn';
1010
import DonateProgress from '@/components/DonateProgress';
11-
import { Download, Monitor, HardDrive, Cpu, Shield, AlertTriangle, Apple, Terminal } from 'lucide-react';
11+
import { Download, Monitor, HardDrive, Cpu, Shield, AlertTriangle, Apple, Terminal, Zap } from 'lucide-react';
1212

1313
type Platform = 'windows' | 'linux' | 'mac';
14+
type Variant = 'standard' | 'cuda';
1415

1516
const platforms: { id: Platform; label: string; icon: React.ReactNode }[] = [
1617
{ id: 'windows', label: 'Windows', icon: <Monitor size={16} /> },
1718
{ id: 'linux', label: 'Linux', icon: <Terminal size={16} /> },
1819
{ id: 'mac', label: 'macOS', icon: <Apple size={16} /> },
1920
];
2021

21-
const downloads: Record<Platform, { name: string; file: string; size: string; format: string; available: boolean; note?: string }> = {
22-
windows: { name: 'guIDE for Windows', file: 'https://github.com/FileShot/guIDE/releases/download/v2.4.3/guIDE-Setup.exe', size: '~180 MB', format: 'NSIS Installer (.exe)', available: true },
23-
linux: { name: 'guIDE for Linux', file: 'https://github.com/FileShot/guIDE/releases/download/v2.4.3/guIDE-Linux-x64.tar.gz', size: '~149 MB', format: 'Portable Archive (.tar.gz)', available: true, note: 'Extract and run ./guIDE' },
24-
mac: { name: 'guIDE for macOS', file: '#', size: 'TBD', format: 'DMG (Intel + Apple Silicon)', available: false, note: 'macOS builds coming soon via CI/CD' },
22+
const BASE = `https://github.com/FileShot/guIDE/releases/download/v${CURRENT_VERSION}`;
23+
24+
const downloads: Record<Platform, Record<Variant, { name: string; file: string; size: string; format: string; available: boolean; note?: string }>> = {
25+
windows: {
26+
standard: { name: 'guIDE for Windows', file: `${BASE}/guIDE-Setup-${CURRENT_VERSION}.exe`, size: '~180 MB', format: 'NSIS Installer (.exe)', available: true },
27+
cuda: { name: 'guIDE for Windows · CUDA Edition', file: `${BASE}/guIDE-CUDA-Setup-${CURRENT_VERSION}.exe`, size: '~450 MB', format: 'NSIS Installer (.exe)', available: true, note: 'Includes NVIDIA CUDA binaries — larger download, best GPU performance' },
28+
},
29+
linux: {
30+
standard: { name: 'guIDE for Linux', file: `${BASE}/guIDE-${CURRENT_VERSION}-x86_64.AppImage`, size: '~150 MB', format: 'AppImage', available: true },
31+
cuda: { name: 'guIDE for Linux · CUDA Edition', file: `${BASE}/guIDE-CUDA-${CURRENT_VERSION}-x86_64.AppImage`, size: '~420 MB', format: 'AppImage', available: true, note: 'Includes NVIDIA CUDA binaries — requires CUDA 12+ and drivers 525+' },
32+
},
33+
mac: {
34+
standard: { name: 'guIDE for macOS', file: `${BASE}/guIDE-${CURRENT_VERSION}-x64.dmg`, size: '~180 MB', format: 'DMG (Intel + Apple Silicon)', available: true },
35+
cuda: { name: 'guIDE for macOS', file: `${BASE}/guIDE-${CURRENT_VERSION}-x64.dmg`, size: '~180 MB', format: 'DMG (Intel + Apple Silicon)', available: true },
36+
},
2537
};
2638

2739
const requirementsByPlatform: Record<Platform, { icon: React.ReactNode; label: string; value: string }[]> = {
2840
windows: [
2941
{ icon: <Monitor size={18} />, label: 'OS', value: 'Windows 10 or later (64-bit)' },
3042
{ icon: <Cpu size={18} />, label: 'CPU', value: 'x86-64 processor' },
31-
{ icon: <HardDrive size={18} />, label: 'Storage', value: '500 MB for the application' },
43+
{ icon: <HardDrive size={18} />, label: 'Storage', value: '500 MB (Standard) · 1.2 GB (CUDA)' },
3244
{ icon: <HardDrive size={18} />, label: 'RAM', value: '8 GB minimum, 16 GB recommended' },
33-
{ icon: <Cpu size={18} />, label: 'GPU (Optional)', value: 'NVIDIA GPU with 4+ GB VRAM for local AI' },
45+
{ icon: <Cpu size={18} />, label: 'GPU', value: 'NVIDIA GPU with 4+ GB VRAM — use CUDA build for hardware acceleration' },
3446
],
3547
linux: [
3648
{ icon: <Terminal size={18} />, label: 'OS', value: 'Ubuntu 20.04+, Fedora 36+, or equivalent (64-bit)' },
3749
{ icon: <Cpu size={18} />, label: 'CPU', value: 'x86-64 processor' },
38-
{ icon: <HardDrive size={18} />, label: 'Storage', value: '500 MB for the application' },
50+
{ icon: <HardDrive size={18} />, label: 'Storage', value: '500 MB (Standard) · 1.1 GB (CUDA)' },
3951
{ icon: <HardDrive size={18} />, label: 'RAM', value: '8 GB minimum, 16 GB recommended' },
40-
{ icon: <Cpu size={18} />, label: 'GPU (Optional)', value: 'NVIDIA GPU with 4+ GB VRAM for local AI (CUDA required)' },
52+
{ icon: <Cpu size={18} />, label: 'GPU', value: 'NVIDIA GPU with 4+ GB VRAM · CUDA 12+ required for CUDA build' },
4153
],
4254
mac: [
4355
{ icon: <Apple size={18} />, label: 'OS', value: 'macOS 12 Monterey or later' },
4456
{ icon: <Cpu size={18} />, label: 'CPU', value: 'Intel x64 or Apple Silicon (M1/M2/M3/M4)' },
4557
{ icon: <HardDrive size={18} />, label: 'Storage', value: '500 MB for the application' },
4658
{ icon: <HardDrive size={18} />, label: 'RAM', value: '8 GB minimum, 16 GB recommended' },
47-
{ icon: <Cpu size={18} />, label: 'GPU', value: 'Metal-compatible GPU for local AI (Apple Silicon recommended)' },
59+
{ icon: <Cpu size={18} />, label: 'GPU', value: 'Metal-compatible GPU · Apple Silicon recommended for best performance' },
4860
],
4961
};
5062

5163
export default function DownloadPage() {
5264
const [platform, setPlatform] = useState<Platform>('windows');
53-
const dl = downloads[platform];
65+
const [variant, setVariant] = useState<Variant>('standard');
66+
67+
const hasCuda = platform === 'windows' || platform === 'linux';
68+
const activeVariant: Variant = hasCuda ? variant : 'standard';
69+
const dl = downloads[platform][activeVariant];
5470
const reqs = requirementsByPlatform[platform];
5571

72+
const handlePlatformChange = (p: Platform) => {
73+
setPlatform(p);
74+
if (p === 'mac') setVariant('standard');
75+
};
76+
5677
const trackDownload = (dlPlatform: Platform) => {
5778
fetch('/api/analytics/track', {
5879
method: 'POST',
@@ -98,11 +119,11 @@ export default function DownloadPage() {
98119

99120
{/* Platform Tabs */}
100121
<FadeIn delay={0.05}>
101-
<div className="flex gap-1 p-1 rounded-xl bg-white/[0.03] border border-white/[0.06] mb-8">
122+
<div className="flex gap-1 p-1 rounded-xl bg-white/[0.03] border border-white/[0.06] mb-4">
102123
{platforms.map((p) => (
103124
<button
104125
key={p.id}
105-
onClick={() => setPlatform(p.id)}
126+
onClick={() => handlePlatformChange(p.id)}
106127
className={`flex-1 flex items-center justify-center gap-2 py-2.5 px-4 rounded-lg text-sm font-medium transition-all duration-200 ${
107128
platform === p.id
108129
? 'bg-accent text-white shadow-lg shadow-accent/20'
@@ -116,6 +137,42 @@ export default function DownloadPage() {
116137
</div>
117138
</FadeIn>
118139

140+
{/* Variant Toggle — Windows + Linux only */}
141+
{hasCuda ? (
142+
<FadeIn delay={0.07}>
143+
<div className="flex items-center gap-2 mb-8">
144+
<button
145+
onClick={() => setVariant('standard')}
146+
className={`flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all border ${
147+
activeVariant === 'standard'
148+
? 'border-white/20 bg-white/[0.05] text-white'
149+
: 'border-white/[0.06] text-neutral-500 hover:text-neutral-300 hover:border-white/10'
150+
}`}
151+
>
152+
Standard
153+
</button>
154+
<button
155+
onClick={() => setVariant('cuda')}
156+
className={`flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all border ${
157+
activeVariant === 'cuda'
158+
? 'border-green-500/40 bg-green-500/[0.07] text-green-400'
159+
: 'border-white/[0.06] text-neutral-500 hover:text-neutral-300 hover:border-white/10'
160+
}`}
161+
>
162+
<Zap size={13} />
163+
NVIDIA CUDA
164+
</button>
165+
<span className="ml-1 text-xs text-neutral-600">
166+
{activeVariant === 'cuda'
167+
? 'Requires NVIDIA GPU · CUDA 12+'
168+
: 'Works on any hardware · smaller download'}
169+
</span>
170+
</div>
171+
</FadeIn>
172+
) : (
173+
<div className="mb-8" />
174+
)}
175+
119176
{/* Download Card */}
120177
<FadeIn delay={0.1}>
121178
<div className="rounded-2xl border border-white/[0.06] bg-white/[0.02] p-8 mb-10">
@@ -170,20 +227,20 @@ export default function DownloadPage() {
170227
</div>
171228
</FadeIn>
172229

173-
{/* SmartScreen Warning (Windows only) */}
230+
{/* Windows SmartScreen note */}
174231
{platform === 'windows' && (
175232
<FadeIn delay={0.2}>
176233
<div className="rounded-xl border border-yellow-500/20 bg-yellow-500/[0.03] p-6 mb-10">
177234
<div className="flex items-start gap-3">
178235
<AlertTriangle size={18} className="text-yellow-400 mt-0.5 flex-shrink-0" />
179236
<div>
180237
<h4 className="text-sm font-semibold text-white mb-1">
181-
Windows SmartScreen Warning
238+
Windows SmartScreen
182239
</h4>
183240
<p className="text-sm text-neutral-400 leading-relaxed">
184-
guIDE is not yet code-signed. Windows may display a SmartScreen warning
185-
when you run the installer. This is normal for independent software.
186-
Click <strong className="text-neutral-300">&ldquo;More info&rdquo;</strong> &rarr;{' '}
241+
Windows may show a SmartScreen prompt the first time you run the installer
242+
while our certificate builds trust reputation. Click{' '}
243+
<strong className="text-neutral-300">&ldquo;More info&rdquo;</strong> &rarr;{' '}
187244
<strong className="text-neutral-300">&ldquo;Run anyway&rdquo;</strong> to proceed.
188245
</p>
189246
</div>
@@ -198,15 +255,21 @@ export default function DownloadPage() {
198255
<div className="rounded-xl border border-white/[0.06] bg-white/[0.02] p-6 mb-10">
199256
<h4 className="text-sm font-semibold text-white mb-3">Installation</h4>
200257
<div className="bg-[#0d0d0d] rounded-lg p-4 font-mono text-sm text-neutral-300 space-y-1">
201-
<p className="text-neutral-500"># Extract the archive</p>
202-
<p>tar -xzf guIDE-Linux-x64.tar.gz</p>
203-
<p className="text-neutral-500 mt-3"># Run guIDE</p>
204-
<p>cd guIDE-{CURRENT_VERSION}-x64</p>
205-
<p>./guide-ide</p>
258+
<p className="text-neutral-500"># Make executable and run</p>
259+
<p>chmod +x {activeVariant === 'cuda'
260+
? `guIDE-CUDA-${CURRENT_VERSION}-x86_64.AppImage`
261+
: `guIDE-${CURRENT_VERSION}-x86_64.AppImage`}
262+
</p>
263+
<p>./{activeVariant === 'cuda'
264+
? `guIDE-CUDA-${CURRENT_VERSION}-x86_64.AppImage`
265+
: `guIDE-${CURRENT_VERSION}-x86_64.AppImage`}
266+
</p>
206267
</div>
207-
<p className="text-xs text-neutral-500 mt-3">
208-
For NVIDIA GPU acceleration, ensure you have CUDA 12+ and the latest drivers installed.
209-
</p>
268+
{activeVariant === 'cuda' && (
269+
<p className="text-xs text-neutral-500 mt-3">
270+
CUDA build requires NVIDIA drivers 525+ and CUDA Toolkit 12.0+.
271+
</p>
272+
)}
210273
</div>
211274
</FadeIn>
212275
)}

0 commit comments

Comments
 (0)