MarshallOfSound

#53437: test: run the Squirrel.Mac updater specs concurrently off a signed template

Merged
Created: Sep 2, 2026, 11:53:30 PM
Merged: Sep 3, 2026, 2:16:03 AM
7 comments
Target: main

Description of Change

api-autoupdater-darwin-spec.ts is the long pole of CI: ~29 min of the slowest macOS x64 test shard (~10 min on arm64), because every test copies and deep-signs the whole app bundle a couple of times and then runs one Squirrel install cycle at a time.

  • Build one stripped, deep-signed template app per run. Every fixture app and update payload is an APFS clone of it with only Info.plist / Resources/app changed, so it only needs a shallow re-sign.
  • Run the "with update server" tests concurrently in a small slot pool (4 on 8+ core runners, else 2; ELECTRON_SPEC_UPDATER_CONCURRENCY overrides). Each slot gets its own CFBundleIdentifier so ShipIt's launchd job / XPC name / cache dir don't collide, and each task gets its own update server. The mocha test for each task just awaits it, so per-test reporting and retries are unchanged.
  • Stacked-update tests fetch extra payloads via getUpdateZip() instead of nesting withUpdatableApp(), which built start apps nothing launched.
  • SquirrelMacEnableDirectContentsWrite is set in the fixture app's own defaults domain now that it no longer shares the runner's bundle id.

First CI run on this branch (33716702873) vs recent main:

main this PR
autoUpdater suite, x64 (macos-15-large) 29.2 min 8.2 min
autoUpdater suite, arm64 (macos-15) 10.1 min 3.6 min
x64 test (darwin, 1) shard 44–56 min 34.2 min
arm64 test (darwin, 2) shard 22.5 min (median) 20.5 min
macos-x64 lane end 90 min (median) 68 min
whole build.yml run 91 min (median) 68 min

All mac shards passed first try, so the shallow re-sign holds up under Squirrel's strict validation on both arches.

Checklist

  • PR description included

Release Notes

Notes: none

Backports

43-x-y
In-flight
PR Number
#53454
Waiting to be merged
44-x-y
In-flight
PR Number
#53453
Waiting to be merged
45-x-y
In-flight
PR Number
#53452
Waiting to be merged

Semver Impact

Major
Breaking changes
Minor
New features
Patch
Bug fixes
None
Docs, tests, etc.

Semantic Versioning helps users understand the impact of updates:

  • Major (X.y.z): Breaking changes that may require code modifications
  • Minor (x.Y.z): New features that maintain backward compatibility
  • Patch (x.y.Z): Bug fixes that don't change the API
  • None: Changes that don't affect using facing parts of Electron