diff --git a/README.md b/README.md index 1a5db9c8..f6d04b6b 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ CodeBurn Desktop
Download for macOS (Apple Silicon) Download for macOS (Intel) - Download for Windows + Get CodeBurn from the Microsoft Store Download for Linux (.deb) Download for Linux (.rpm) Download for Linux (AppImage) diff --git a/app/renderer/hooks/useUpdateStatus.test.ts b/app/renderer/hooks/useUpdateStatus.test.ts index c20d4261..f48b75f2 100644 --- a/app/renderer/hooks/useUpdateStatus.test.ts +++ b/app/renderer/hooks/useUpdateStatus.test.ts @@ -4,7 +4,7 @@ vi.mock('../lib/ipc', () => ({ codeburn: { platform: 'linux', arch: 'x64' }, })) -import { directDownloadUrl, releasePageUrl, updateDownloadUrl } from './useUpdateStatus' +import { directDownloadUrl, MICROSOFT_STORE_URL, releasePageUrl, updateDownloadUrl } from './useUpdateStatus' const TAG = 'desktop-v0.9.19' const BASE = 'https://github.com/getagentseal/codeburn/releases/download/desktop-v0.9.19' @@ -18,9 +18,9 @@ describe('directDownloadUrl', () => { expect(directDownloadUrl(TAG, 'darwin', 'x64')).toBe(`${BASE}/CodeBurn-0.9.19.dmg`) }) - it('maps Windows to the Setup exe regardless of arch', () => { - expect(directDownloadUrl(TAG, 'win32', 'x64')).toBe(`${BASE}/CodeBurn-Setup-0.9.19.exe`) - expect(directDownloadUrl(TAG, 'win32', undefined)).toBe(`${BASE}/CodeBurn-Setup-0.9.19.exe`) + it('maps Windows to the official Microsoft Store regardless of arch', () => { + expect(directDownloadUrl(TAG, 'win32', 'x64')).toBe(MICROSOFT_STORE_URL) + expect(directDownloadUrl(TAG, 'win32', undefined)).toBe(MICROSOFT_STORE_URL) }) it('returns null for Linux (three formats, the user picks on the page)', () => { diff --git a/app/renderer/hooks/useUpdateStatus.ts b/app/renderer/hooks/useUpdateStatus.ts index dd90c9d9..f72ac8b4 100644 --- a/app/renderer/hooks/useUpdateStatus.ts +++ b/app/renderer/hooks/useUpdateStatus.ts @@ -30,12 +30,16 @@ export function releasePageUrl(tag: string): string { return `https://github.com/getagentseal/codeburn/releases/tag/${tag}` } +/** Official signed Windows distribution. The Store handles installation and + * updates, avoiding the unsigned GitHub installer and SmartScreen warning. */ +export const MICROSOFT_STORE_URL = 'https://apps.microsoft.com/detail/9P0R4ZL5XMB8' + /** - * Direct asset download for the running platform, so Download saves the file - * instead of landing on a GitHub page. Filenames mirror the electron-builder - * output (app/DISTRIBUTION.md) and are version-derived from the tag. Returns - * null (callers fall back to the release page) for Linux — three formats, the - * user picks — and for unknown platforms or a preload without `arch`. + * Preferred install target for the running platform. macOS downloads the + * matching release asset; Windows opens the signed Microsoft Store listing. + * Returns null (callers fall back to the release page) for Linux — three + * formats, the user picks — and for unknown platforms or a preload without + * `arch`. */ export function directDownloadUrl(tag: string, platform: string | undefined, arch: string | undefined): string | null { const version = tag.startsWith('desktop-v') ? tag.slice('desktop-v'.length) : null @@ -45,7 +49,7 @@ export function directDownloadUrl(tag: string, platform: string | undefined, arc if (!arch) return null file = arch === 'arm64' ? `CodeBurn-${version}-arm64.dmg` : `CodeBurn-${version}.dmg` } else if (platform === 'win32') { - file = `CodeBurn-Setup-${version}.exe` + return MICROSOFT_STORE_URL } if (!file) return null return `https://github.com/getagentseal/codeburn/releases/download/${tag}/${file}`