diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67b5e3286..bf1ccf791 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,6 +73,50 @@ jobs: test -f apps/desktop/dist-electron/preload.js grep -nE "desktopBridge|getWsUrl|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.js + desktop_windows: + name: Windows Desktop Build + runs-on: windows-2022 + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version-file: package.json + + - name: Setup Node + uses: actions/setup-node@v6 + with: + node-version-file: package.json + + - name: Cache Bun, Turbo, and electron-builder + uses: actions/cache@v5 + with: + path: | + ~/.bun/install/cache + ~\AppData\Local\electron-builder\Cache + .turbo + key: ${{ runner.os }}-desktop-${{ hashFiles('bun.lock') }}-${{ hashFiles('turbo.json') }} + restore-keys: | + ${{ runner.os }}-desktop-${{ hashFiles('bun.lock') }}- + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Build Windows desktop artifact + run: bun run dist:desktop:artifact -- --platform win --target nsis --arch x64 --verbose + + - name: Upload Windows desktop artifact + uses: actions/upload-artifact@v7 + with: + name: desktop-windows-x64 + path: | + release/*.exe + release/*.exe.blockmap + release/builder-debug.yml + if-no-files-found: error + release_smoke: name: Release Smoke runs-on: ubuntu-24.04 diff --git a/apps/marketing/public/favicon.ico b/apps/marketing/public/favicon.ico index 40d72b105..7cdc5b602 100644 Binary files a/apps/marketing/public/favicon.ico and b/apps/marketing/public/favicon.ico differ diff --git a/assets/dev/okcode-dev-web-favicon.ico b/assets/dev/okcode-dev-web-favicon.ico index 40d72b105..7cdc5b602 100644 Binary files a/assets/dev/okcode-dev-web-favicon.ico and b/assets/dev/okcode-dev-web-favicon.ico differ diff --git a/assets/dev/okcode-dev-windows.ico b/assets/dev/okcode-dev-windows.ico index 40d72b105..371c4c751 100644 Binary files a/assets/dev/okcode-dev-windows.ico and b/assets/dev/okcode-dev-windows.ico differ diff --git a/assets/prod/okcode-web-favicon.ico b/assets/prod/okcode-web-favicon.ico index 40d72b105..7cdc5b602 100644 Binary files a/assets/prod/okcode-web-favicon.ico and b/assets/prod/okcode-web-favicon.ico differ diff --git a/assets/prod/okcode-windows.ico b/assets/prod/okcode-windows.ico index 40d72b105..371c4c751 100644 Binary files a/assets/prod/okcode-windows.ico and b/assets/prod/okcode-windows.ico differ diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index 75682d91e..7449676a6 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -506,6 +506,14 @@ const createBuildConfig = Effect.fn("createBuildConfig")(function* ( }; if (signed) { winConfig.azureSignOptions = yield* AzureTrustedSigningOptionsConfig; + } else { + // Production dependencies are installed into the staged app ahead of packaging. + // Skip electron-builder's extra native rebuild step so Windows builds can use + // shipped prebuilds like node-pty instead of requiring local Spectre libs. + buildConfig.npmRebuild = false; + // Unsigned local builds shouldn't need the Windows code-signing toolchain or + // rcedit metadata pass; skipping it avoids symlink-privileged cache extraction. + winConfig.signAndEditExecutable = false; } buildConfig.win = winConfig; } diff --git a/scripts/generate-brand-assets.py b/scripts/generate-brand-assets.py index 34cd3e6ed..c0a13093e 100644 --- a/scripts/generate-brand-assets.py +++ b/scripts/generate-brand-assets.py @@ -28,13 +28,11 @@ def resize(img: Image.Image, size: int) -> Image.Image: def save_ico(path: Path, source: Image.Image, sizes: tuple[int, ...]) -> None: - images = [resize(source, s) for s in sizes] path.parent.mkdir(parents=True, exist_ok=True) - images[0].save( + source.save( path, format="ICO", sizes=[(s, s) for s in sizes], - append_images=images[1:], )