From 7cc9cbaee60ded4796dbc1f68a029dc70659488a Mon Sep 17 00:00:00 2001 From: neominik Date: Wed, 14 Oct 2026 08:57:14 +0200 Subject: [PATCH] fix(desktop): local desktop builds no longer crash when a GitHub token is in the shell Co-Authored-By: Claude Opus 5.5 --- scripts/build-desktop-artifact.test.ts | 20 ++++++++++++++++++-- scripts/build-desktop-artifact.ts | 4 ++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/scripts/build-desktop-artifact.test.ts b/scripts/build-desktop-artifact.test.ts index 1edd8f0551be..8a0dbc4faa8b 100644 --- a/scripts/build-desktop-artifact.test.ts +++ b/scripts/build-desktop-artifact.test.ts @@ -363,8 +363,8 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { undefined, ); - assert.notProperty(preview, "publish"); - assert.notProperty(previewChannel, "publish"); + assert.isNull(preview.publish); + assert.isNull(previewChannel.publish); assert.deepStrictEqual(release.publish, [ { provider: "github", @@ -382,6 +382,22 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { ), ); + it.effect("disables electron-builder publish detection for local builds", () => + Effect.gen(function* () { + const local = yield* createBuildConfig( + "mac", + "dmg", + "0.0.33", + false, + false, + undefined, + undefined, + ); + + assert.isNull(local.publish); + }).pipe(Effect.provide(ConfigProvider.layer(ConfigProvider.fromEnv({ env: {} })))), + ); + it("stages only the desktop main-process externals", () => { assert.deepStrictEqual( resolveDesktopRuntimeDependencies( diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index 1c4d80f88822..e58e15aeb3ee 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -2722,6 +2722,10 @@ export const createBuildConfig = Effect.fn("createBuildConfig")(function* ( ], }; const updateChannel = resolveDesktopUpdateChannel(version); + // A missing `publish` makes electron-builder infer a GitHub feed from + // GH_TOKEN/GITHUB_TOKEN. The staged app has no repository to resolve it + // against, so writing update manifests then crashes on a null config. + buildConfig.publish = null; if (!isDesktopPreviewVersion(version)) { const publishConfig = yield* resolveGitHubPublishConfig(updateChannel); if (publishConfig) {