From b6bc04e797afc7e05362583914034fdb9eff1a83 Mon Sep 17 00:00:00 2001 From: a5768549 <44581221+a5768549@users.noreply.github.com> Date: Thu, 22 Oct 2026 06:20:19 +0800 Subject: [PATCH 1/2] fix: disable downloads of Electron 44+ on 32-bit Windows and ARM Linux Electron no longer publishes win32-ia32 or linux-armv7l binaries starting with v44 (the last prerelease with them is 44.0.0-alpha.3). Fiddle still offered those versions on ia32 and armv7l installs and tried to download artifacts that don't exist. Disable the download for 44.0.0-alpha.4 and above on those architectures, the same way older versions are disabled on Apple Silicon and Windows arm64. Fixes #2023 Co-Authored-By: Claude --- src/renderer/utils/disable-download.ts | 10 ++++++++- tests/renderer/utils/disable-download.spec.ts | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/renderer/utils/disable-download.ts b/src/renderer/utils/disable-download.ts index 238a817b60..c3d9f7dff1 100644 --- a/src/renderer/utils/disable-download.ts +++ b/src/renderer/utils/disable-download.ts @@ -4,7 +4,10 @@ import semver from 'semver'; * disables download button for versions: * - below 11.0.0 on Apple Silicon. * - below 6.0.8 and 7.0.0 on Windows arm64 + * - 44.0.0-alpha.4 and above on Windows ia32 and Linux arm (armv7l), which + * are no longer published * Reference: {@link https://www.electronjs.org/blog/apple-silicon} + * Reference: {@link https://github.com/electron/electron/blob/main/docs/breaking-changes.md#removed-windows-32-bit-ia32-and-linux-32-bit-arm-armv7l-support} * * @param version - electron version */ @@ -15,6 +18,11 @@ export function disableDownload(version: string): boolean { semver.lt(version, '11.0.0')) || (window.ElectronFiddle.platform === 'win32' && window.ElectronFiddle.arch === 'arm64' && - !semver.satisfies(version, '>=6.0.8 || >=7.0.0')) + !semver.satisfies(version, '>=6.0.8 || >=7.0.0')) || + (((window.ElectronFiddle.platform === 'win32' && + window.ElectronFiddle.arch === 'ia32') || + (window.ElectronFiddle.platform === 'linux' && + window.ElectronFiddle.arch === 'arm')) && + semver.gte(version, '44.0.0-alpha.4')) ); } diff --git a/tests/renderer/utils/disable-download.spec.ts b/tests/renderer/utils/disable-download.spec.ts index f52431081d..065e2c39b7 100644 --- a/tests/renderer/utils/disable-download.spec.ts +++ b/tests/renderer/utils/disable-download.spec.ts @@ -34,6 +34,28 @@ describe('disableDownload', () => { expect(disableDownload('8.0.0')).toBe(false); }); + it('returns true for Electron 44 and higher on 32-bit Windows', () => { + overrideRendererPlatform('win32'); + overrideRendererArch('ia32'); + + expect(disableDownload('43.0.0')).toBe(false); + expect(disableDownload('44.0.0-alpha.3')).toBe(false); + expect(disableDownload('44.0.0-alpha.4')).toBe(true); + expect(disableDownload('44.0.0')).toBe(true); + expect(disableDownload('44.5.1')).toBe(true); + expect(disableDownload('46.0.0-nightly.20261021')).toBe(true); + }); + + it('returns true for Electron 44 and higher on 32-bit ARM Linux', () => { + overrideRendererPlatform('linux'); + overrideRendererArch('arm'); + + expect(disableDownload('43.0.0')).toBe(false); + expect(disableDownload('44.0.0-alpha.3')).toBe(false); + expect(disableDownload('44.0.0-alpha.4')).toBe(true); + expect(disableDownload('44.5.1')).toBe(true); + }); + it('always return false when the system is linux', () => { overrideRendererPlatform('linux'); From 05b06805bbe6be06eb360bdf8d1eb9b0b0f4a0f9 Mon Sep 17 00:00:00 2001 From: a5768549 <44581221+a5768549@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:43:01 +0800 Subject: [PATCH 2/2] refactor: describe unavailable downloads as a table of rules Replace the chained platform/arch conditions in disableDownload with a lookup from `${platform}-${arch}` to the rule for that combination, as suggested in review. Behaviour is unchanged. Co-Authored-By: Claude --- src/renderer/utils/disable-download.ts | 45 ++++++++++++++------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/renderer/utils/disable-download.ts b/src/renderer/utils/disable-download.ts index c3d9f7dff1..4db0299471 100644 --- a/src/renderer/utils/disable-download.ts +++ b/src/renderer/utils/disable-download.ts @@ -1,28 +1,33 @@ import semver from 'semver'; +const lastIa32AndArmv7lVersion = '44.0.0-alpha.3'; + +/** + * Rules for Electron versions that have no build for a platform and + * architecture. Combinations without a rule can download any version. + */ +const unavailableVersions: Partial< + Record boolean> +> = { + // Apple Silicon builds start with 11.0.0. + // Reference: {@link https://www.electronjs.org/blog/apple-silicon} + 'darwin-arm64': (version) => semver.lt(version, '11.0.0'), + // Windows arm64 builds start with 6.0.8. + 'win32-arm64': (version) => !semver.satisfies(version, '>=6.0.8 || >=7.0.0'), + // Windows ia32 and Linux armv7l builds are no longer published after + // 44.0.0-alpha.3. + // Reference: {@link https://github.com/electron/electron/blob/main/docs/breaking-changes.md#removed-windows-32-bit-ia32-and-linux-32-bit-arm-armv7l-support} + 'win32-ia32': (version) => semver.gt(version, lastIa32AndArmv7lVersion), + 'linux-arm': (version) => semver.gt(version, lastIa32AndArmv7lVersion), +}; + /** - * disables download button for versions: - * - below 11.0.0 on Apple Silicon. - * - below 6.0.8 and 7.0.0 on Windows arm64 - * - 44.0.0-alpha.4 and above on Windows ia32 and Linux arm (armv7l), which - * are no longer published - * Reference: {@link https://www.electronjs.org/blog/apple-silicon} - * Reference: {@link https://github.com/electron/electron/blob/main/docs/breaking-changes.md#removed-windows-32-bit-ia32-and-linux-32-bit-arm-armv7l-support} + * Whether the download button is disabled for an Electron version, because + * no build of it exists for the current platform and architecture. * * @param version - electron version */ export function disableDownload(version: string): boolean { - return ( - (window.ElectronFiddle.platform === 'darwin' && - window.ElectronFiddle.arch === 'arm64' && - semver.lt(version, '11.0.0')) || - (window.ElectronFiddle.platform === 'win32' && - window.ElectronFiddle.arch === 'arm64' && - !semver.satisfies(version, '>=6.0.8 || >=7.0.0')) || - (((window.ElectronFiddle.platform === 'win32' && - window.ElectronFiddle.arch === 'ia32') || - (window.ElectronFiddle.platform === 'linux' && - window.ElectronFiddle.arch === 'arm')) && - semver.gte(version, '44.0.0-alpha.4')) - ); + const { platform, arch } = window.ElectronFiddle; + return unavailableVersions[`${platform}-${arch}`]?.(version) ?? false; }