MarshallOfSound

#52745: build: faster symbol archives, skip test artifacts on publish

Merged
Created: Aug 10, 2026, 2:56:39 AM
Merged: Aug 10, 2026, 6:41:21 PM
5 comments
Target: main

Description of Change

Publish jobs spend a large chunk of their wall clock outside the build itself; this trims the two biggest non-build items without changing any released file formats.

  • dsym.tar.xz is now written with multi-threaded xz (bsdtar --options xz:threads=0; XZ_OPT=-T0 under GNU tar). "Zip Symbols" was 25–47 min on every macOS publish job because xz was single-threaded over ~7 GB of dSYMs. Output is still a plain .xz stream.
  • Symbol zips (pdb.zip, dsym-snapshot.zip, debug.zip, symbols.zip) use deflate level 6 instead of 9. #48766 added -9 for the 2 GB asset limit; measured below, it only buys ~0.4% (~8 MB on the 1.93 GB win-x64 pdb.zip) for ~1.7x the time — "Zip Symbols" was 8–16 min on Windows.
  • "Zip Symbols" now only runs when the build was asked for symbols. Every testing and PGO build passes generate-symbols: false (the input was declared but never read), and symbols.zip/pdb.zip/dSYM archives are only consumed by the release uploader (move-artifacts.sh already tolerates their absence), yet each Windows PR build spent 8–13 min zipping PDBs — it's the largest remaining step on a fully cached build.
  • Publish and release-build jobs pass generate-test-artifacts: false: nothing consumes src_artifacts (12.5 min of msys cp -r + tar per Windows publish job, 8 × 143–787 MB uploads per release) or the linux arm64 cross-arch snapshot (5.7 min) outside test jobs. The mksnapshot_args fixup was behind the same flag but is also read by @electron/mksnapshot from the released zip, so it now also runs for is-release builds.

Measured on a 512 MiB slice of an unstripped electron binary (Linux, one core unless noted):

time size
python zipfile level 9 → 6 29.5 s → 17.2 s +0.4%
zip -9zip (6) 31.3 s → 18.1 s +0.4%
tar -cJfxz:threads=5 164 s → 38.6 s +1.0%

Reference timings are from the v45.0.0-nightly.20260808 / v44.0.0-beta.2 publish runs.

Checklist

  • I have built and tested this change
  • I have filled out the PR description
  • I have reviewed and verified the changes

Verified make_zip / make_tar_xz locally against both GNU tar and bsdtar (archives list and xz -t cleanly), lint --py passes, and copy-pipeline-segment-publish.js --check is still in sync. The macOS/Windows "Zip Symbols" step time on this PR's own CI is the real check for the xz change; the publish-flag change is only exercised by a publish run.

Release Notes

Notes: none

Backports

41-x-y
Pending
Waiting for a manual backport
42-x-y
Pending
Waiting for a manual backport
43-x-y
Pending
Waiting for a manual backport
44-x-y
Merged
PR Number
#52758
Merged At
Aug 10, 2026, 7:05:23 PM
Released In
Not yet
Release Date
Not yet

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