#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/appchanged, 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_CONCURRENCYoverrides). Each slot gets its ownCFBundleIdentifierso 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 nestingwithUpdatableApp(), which built start apps nothing launched. SquirrelMacEnableDirectContentsWriteis 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
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