Strip debug symbols from release artifacts#51
Conversation
The Windows release ships ~180 MB of PDBs (SkiaSharp, HarfBuzzSharp,
Conclave.App) bundled into the user-facing zip — bloating it from ~15 MB
to ~60 MB. Linux's .dbg and macOS's dSYM cause the same problem, just
less visibly thanks to better compression in tar.gz / UDZO.
Move debug symbols into a separate Conclave-{ver}-{rid}-symbols.{ext}
asset on each platform so users get a slim download but symbols remain
archived per-version on the Release for future symbolication.
Greptile SummaryThis PR strips debug symbols out of user-facing release artifacts across all three platforms — Windows PDBs, macOS dSYM, and Linux The previously flagged Windows PDB guard issue is fully resolved: Confidence Score: 5/5Safe to merge — logic is correct across all platforms and the only remaining finding is a P2 style concern about macOS dSYM path structure in the symbols zip. All three platforms correctly guard symbol extraction, update globs, and remove symbols from the user artifact before packaging. The prior P1 (Windows missing guard) is addressed. The sole remaining finding is a P2: the macOS symbols zip nests the dSYM under the full bundle path due to No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[dotnet publish NativeAOT] --> B{Platform}
B -->|Windows zip| C[Get publish/*.pdb]
C -->|PDBs found| D[Move PDBs → _symbols/]
D --> E[Compress _symbols/ → *-symbols.zip]
E --> F[Compress publish/* → *.zip]
C -->|No PDBs| F
B -->|macOS dmg| G[build-mac-app.sh]
G --> H{dSYM exists?}
H -->|yes| I[ditto dSYM → *-symbols.zip]
I --> J[rm dSYM from .app bundle]
J --> K[hdiutil create *.dmg]
H -->|no| K
B -->|Linux| L{Conclave.App.dbg exists?}
L -->|yes| M[tar Conclave.App.dbg → *-symbols.tar.gz]
M --> N[rm .dbg from publish/]
N --> O[tar publish/ → *.tar.gz]
L -->|no| O
O --> P[appimagetool → *.AppImage]
F --> Q[upload-artifact glob: *-rid*.zip]
K --> R[upload-artifact glob: *-rid*]
P --> S[upload-artifact glob: *-rid*]
Q & R & S --> T[release job: attach all to GitHub Release]
Reviews (2): Last reviewed commit: "Guard Windows PDB strip against missing ..." | Re-trigger Greptile |
Summary
The Windows release zip in v0.0.4 was ~60 MB versus ~33 MB for the other platforms. Investigation showed it ships ~180 MB of PDB debug symbols (SkiaSharp 84 MB, Conclave.App 77 MB, HarfBuzzSharp 21 MB) bundled into the user-facing artifact. PDBs aren't consulted at runtime — they're only used by debuggers / crash symbolicators — so they shouldn't be in the main download.
Linux's
Conclave.App.dbg(54 MB) and macOS'sConclave.App.dSYM(56 MB) had the same problem, masked by better compression intar.gz/ UDZO thanCompress-Archivegives PDBs.Changes
release.ymlnow splits debug symbols into a separate Release asset per platform:Conclave-{ver}-win-x64-symbols.zip(all*.pdb)Conclave-{ver}-osx-{arch}-symbols.zip(thedSYM, pulled out of the.appper Apple convention)Conclave-{ver}-linux-x64-symbols.tar.gz(theConclave.App.dbg)Symbols stay archived per-version on the Release so we can still symbolicate crashes after the fact (e.g. if/when we wire up Sentry); they just don't bloat the user download.
Expected impact
Verified against the actual v0.0.4 artifacts to confirm what each archive contains; the strip points are the only large-debug-info files in each publish output.