Skip to content

Strip debug symbols from release artifacts#51

Merged
Cellcote merged 2 commits into
mainfrom
fix/investigate_size_of_release
May 1, 2026
Merged

Strip debug symbols from release artifacts#51
Cellcote merged 2 commits into
mainfrom
fix/investigate_size_of_release

Conversation

@Cellcote
Copy link
Copy Markdown
Owner

@Cellcote Cellcote commented May 1, 2026

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's Conclave.App.dSYM (56 MB) had the same problem, masked by better compression in tar.gz / UDZO than Compress-Archive gives PDBs.

Changes

release.yml now splits debug symbols into a separate Release asset per platform:

  • Windows: Conclave-{ver}-win-x64-symbols.zip (all *.pdb)
  • macOS: Conclave-{ver}-osx-{arch}-symbols.zip (the dSYM, pulled out of the .app per Apple convention)
  • Linux: Conclave-{ver}-linux-x64-symbols.tar.gz (the Conclave.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

  • Windows zip: ~60 MB → ~15-20 MB
  • Linux tar.gz / AppImage: ~33 MB → ~13 MB
  • macOS DMG: ~32 MB → ~25 MB

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.

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-apps
Copy link
Copy Markdown

greptile-apps Bot commented May 1, 2026

Greptile Summary

This PR strips debug symbols out of user-facing release artifacts across all three platforms — Windows PDBs, macOS dSYM, and Linux .dbg — and reattaches them as separate -symbols archives on the same GitHub Release. The ARTIFACT glob patterns are updated to pick up both the main and symbols archives in the upload steps.

The previously flagged Windows PDB guard issue is fully resolved: Get-Item … -ErrorAction SilentlyContinue + if ($pdbs) matches the Linux/macOS if-guard pattern exactly.

Confidence Score: 5/5

Safe 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 --keepParent, which would inconvenience future crash symbolication but does not break the current release workflow.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/release.yml Splits debug symbols into per-platform -symbols archives; Windows/Linux/macOS all correctly guarded; glob patterns updated to capture both main and symbols artifacts. Minor: macOS dSYM is archived with a deep nested path via --keepParent.

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]
Loading

Reviews (2): Last reviewed commit: "Guard Windows PDB strip against missing ..." | Re-trigger Greptile

Comment thread .github/workflows/release.yml Outdated
@Cellcote Cellcote merged commit e2939a7 into main May 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant