build(deps): upgrade Electron to 44.4.3 - #4410
Conversation
Bumps the root `electron` devDependency from ^42.3.3 to ^44.4.3 (latest
stable). Forge 8 already handles Electron 44: `supported-archs.ts`
carries `isArchDroppedByElectron44` for the win32/ia32 and linux/armv7l
drops in 44.0.0-alpha.4, @electron/packager is already at 20.3.0 (the
release that stopped reporting those archs), and a slow spec already
exercises electron 44.0.0. CI covers only ubuntu-x64, darwin-arm64 and
win32-x64, none of which Electron 44 dropped.
Also bumps node-abi 4.24.0 -> 4.35.0 in the lockfile. 4.24.0 only knew
Electron up to 40.0.0-alpha.2, so it could not resolve an ABI for
Electron 42 — the version already in use — let alone 44:
before: getAbi('42.11.6', 'electron') -> throws
after: 42 -> 146, 43 -> 148, 44 -> 149, 45 -> 150
That was a pre-existing gap in native-module rebuilds rather than
something this upgrade introduced. node-abi is pinned by
@electron/rebuild at ^4.2.0, so the bump needs no manifest change.
Test fixtures are intentionally left alone. The 15 api/core fixtures use
sentinel versions (99.99.99, 1000.100.10) that are resolved without
inspecting an install. The fuses fixture pins 39.2.3 because its spec
downloads and launches that binary, and the webpack native-modules
fixture pins ^33.3.1 because it rebuilds native-hello-world@2.0.0, which
was published in 2019. Templates pin no Electron version at all — `init`
installs it unversioned, so scaffolded apps already get latest.
Verified: `tsc -b packages` clean, `yarn lint:js` reports no errors, the
fast suite passes (66 files, 656 tests), and the slow packaging spec
passes including its dropped-arch cases.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
Both fixtures that pinned a real Electron version were two or more majors behind. Neither pin turned out to be load-bearing. `plugin/fuses/spec/fixture` now tracks the root Electron via a `file:` link instead of pinning 39.2.3, matching what `api/core/spec/fixture/api-tester` already does for both `electron` and `@electron/fuses`. The fixture exists to check that the fuses plugin works with the Electron this repo develops against, so tracking the root devDependency is the question it should be asking. It also removes the drift entirely: a `file:` dependency has no registry version, so Dependabot cannot open a PR against it (superseding #4409, which bumped this pin to 39.8.10). `plugin/webpack/spec/fixtures/apps/native-modules` goes from ^33.3.1 to ^44.4.3, with `package-lock.json` regenerated by `npm install --package-lock-only`. This one keeps a pinned range rather than tracking the root: its spec runs `npm ci`, which requires the manifest and lockfile to stay in sync, and the fixture's purpose is a real registry install plus a native rebuild, which a link into the Yarn-managed root `node_modules` would bypass. The 16 fixtures pinning 99.99.99, 1000.100.10 or ^1000.0.0 are left alone — those are deliberate sentinels resolved without inspecting an install, not versions that can be upgraded. Verified locally: - fuses: slow-verdaccio suite passes (1/1) both with an exact 44.4.3 pin and with the `file:` link; the Electron cache confirms 44.4.3 was the version packaged and launched, and 39.2.3 was never fetched - native-modules: AssetRelocatorPatch slow suite is unchanged from baseline at 7 passed / 2 failed, where the 2 failures are a pre-existing sandbox limitation of this container ("Running as root without --no-sandbox is not supported") reproduced identically at Electron 33 before the bump - native-hello-world@2.0.0, published in 2019, compiles cleanly against Electron 44 headers Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
|
All alerts resolved. Learn more about Socket for GitHub. This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored. |
Socket Security blocked #4410 with a "Recently published" alert: `@types/node@24.13.6`, published three days ago, reached the fixture through `electron@44.4.3`. The previous regeneration ran plain `npm install --package-lock-only`. npm does not read Yarn's `npmMinimalAgeGate`, so it resolved the newest `@types/node` rather than the newest one old enough to satisfy the policy this repository holds its installs to. Regenerated with the same age gate `tools/verdaccio/spawn-verdaccio.ts` applies to npm, so the fixture lockfile now matches the repository's supply-chain posture: npm_config_min_release_age=7 npm_config_min_release_age_exclude=@electron/*,@electron-forge/*, @electron-internal/*,create-electron-app,electron,node-abi Note npm counts this policy in days where Yarn and pnpm count minutes, as that file documents. The exclude list is why `electron` stays at 44.4.3 despite being three days old, while `@types/node` drops to 24.13.4 (12 days old). @types/node: 24.13.6 -> 24.13.4 Every other entry is unchanged. I checked the publish date of all 24 resolved packages: `electron` is now the only one under seven days old, and it is excluded by the list above and allowlisted in Socket, which did not flag it. Generated with npm 11.19.0 via npx, matching the version CI pins in the `Install npm` step, because `min-release-age` needs npm >= 11.10. Verified: the AssetRelocatorPatch slow suite is unchanged from baseline at 7 passed / 2 failed, the 2 being this container's pre-existing root/sandbox limitation, so `npm ci` and the native rebuild both still work against the regenerated lockfile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
There was a problem hiding this comment.
Looks good, straightforward Electron version-bump change. Reviewed the root and fixture devDependency bumps (electron ^42.3.3 to ^44.4.3, and 33.3.1 to ^44.4.3), the fuses fixture's switch from a pinned electron version to a file: reference into the workspace-hoisted node_modules/electron (path depth verified correct), the regenerated native-modules package-lock.json (got-era deps removed in favor of undici/@ electron-internal/extract-zip, matching Electron 44's new download stack), and the yarn.lock node-abi bump. No application source or logic files are touched.
Extended reasoning...
Pure devDependency/toolchain upgrade across package.json, a test-fixture package.json, its package-lock.json, and yarn.lock; no security-sensitive code paths (auth, crypto, permissions) are touched. Verified the file: path in the fuses fixture resolves correctly (5 levels up to repo root/node_modules/electron), and the lockfile diffs match the PR description's claims about dependency stack changes. CODEOWNERS is a blanket repo-wide team entry, not a specific sensitivity signal, and the diff is small, mechanical, and self-contained.
Summarize your changes:
Brings the root
electrondevDependency to latest and moves the two spec fixtures that pinned real Electron versions off stale pins. Nothing user-facing changes.electron42.3.3 → 44.4.3Forge 8 already handles Electron 44:
supported-archs.tscarriesisArchDroppedByElectron44for the win32/ia32 and linux/armv7l drops in44.0.0-alpha.4,@electron/packageris already at 20.3.0 (the release that stopped reporting those archs), and a slow spec already exerciseselectron: '44.0.0'. CI covers ubuntu-x64, darwin-arm64 and win32-x64 only, none of which Electron 44 dropped.node-abi4.24.0 → 4.35.0 (lockfile only)4.24.0 only knew Electron up to
40.0.0-alpha.2, so it could not resolve an ABI for Electron 42 — the version already in use — let alone 44:That was a pre-existing gap in native-module rebuilds rather than something this upgrade introduced.
node-abiis pinned by@electron/rebuildat^4.2.0, so this needed no manifest change.Spec fixtures
plugin/fuses/spec/fixturenow tracks the root Electron through afile:link instead of pinning39.2.3, matching whatapi/core/spec/fixture/api-testeralready does for bothelectronand@electron/fuses. That fixture asks whether the fuses plugin works with the Electron this repo develops against, so tracking the root devDependency is the question it should be asking. It also removes the drift permanently: afile:dependency has no registry version, so Dependabot cannot open a PR against it — which supersedes #4409.plugin/webpack/spec/fixtures/apps/native-modulesgoes^33.3.1→^44.4.3, withpackage-lock.jsonregenerated bynpm install --package-lock-onlyrather than edited by hand. This one deliberately keeps a pinned range instead of tracking the root: its spec runsnpm ci, which requires manifest and lockfile to stay in sync, and the fixture's purpose is a real registry install plus native rebuild that a link into the Yarn-managed rootnode_moduleswould bypass.That regenerated lockfile shrinks from 81 to 24 packages (59 removed, 2 added). Electron 44 swapped its download stack —
@electron/getmoved off thegotdependency tree ontoundici, and onto@electron-internal/extract-zip— so thegot-era transitive deps (cacheable-request,decompress-response,@sindresorhus/is,@types/yauzland friends) are simply gone.The 16 fixtures pinning
99.99.99,1000.100.10or^1000.0.0are left alone. Those are deliberate sentinels, resolved without inspecting an install, not versions that can be upgraded.Validation
tsc -b packagesclean;yarn lint:jsreports no errorsplugin/fusesslow-verdaccio suite passes (1/1) both with an exact44.4.3pin and with thefile:link. The Electron download cache confirms44.4.3is what was packaged and launched, and that39.2.3was never fetched.AssetRelocatorPatchslow suite is unchanged from baseline at 7 passed / 2 failednative-hello-world@2.0.0, published in 2019, compiles cleanly against Electron 44 headersThe environment caveat: those 2
AssetRelocatorPatchfailures areruns the app with the native module(Development and Production), failing withFATAL: Running as root without --no-sandbox is not supported. They are a limitation of the container I ran in, not this change — I reverted to the base commit, reinstalled at Electron 42.11.6, and reproduced the identical two failures. The binary that dies is the fixture's own Electron in a temp dir, and the spec invokes it vianpm start→npx electron .without--no-sandbox. CI does not run as root, so these pass there.🤖 Generated with Claude Code
https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
Generated by Claude Code