From 4580a34eef34f38836a3526d8dc4d0b86695e8bb Mon Sep 17 00:00:00 2001 From: Rik Schreurs Date: Fri, 1 May 2026 17:26:23 +0200 Subject: [PATCH 1/2] Strip debug symbols from release artifacts, ship as -symbols asset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .github/workflows/release.yml | 41 ++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5a7340..96690e8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,9 +69,21 @@ jobs: if: matrix.pkg == 'zip' shell: pwsh run: | - $name = "Conclave-${{ steps.ver.outputs.version }}-${{ matrix.rid }}.zip" - Compress-Archive -Path publish/* -DestinationPath $name - "ARTIFACT=$name" | Out-File -Append $env:GITHUB_ENV + $version = "${{ steps.ver.outputs.version }}" + $rid = "${{ matrix.rid }}" + + # Split PDBs into a separate -symbols.zip. Debug symbols aren't + # consulted at runtime and dominate the user download (the SkiaSharp + # and Conclave.App PDBs alone are >150 MB uncompressed). Attaching + # them as a separate Release asset keeps them archived per-version + # for future symbolication without bloating the main artifact. + $sym = "_symbols" + New-Item -ItemType Directory -Path $sym | Out-Null + Move-Item publish/*.pdb $sym/ + + Compress-Archive -Path publish/* -DestinationPath "Conclave-$version-$rid.zip" + Compress-Archive -Path "$sym/*" -DestinationPath "Conclave-$version-$rid-symbols.zip" + "ARTIFACT=Conclave-$version-$rid*.zip" | Out-File -Append $env:GITHUB_ENV # ---------- macOS ---------- # Both publish and bundle live in scripts/build-mac-app.sh so the locally @@ -84,6 +96,16 @@ jobs: run: | scripts/build-mac-app.sh ${{ matrix.rid }} + # Pull the dSYM out of the bundle and ship it separately. Apple + # convention is to keep dSYMs alongside (not inside) the .app, and + # they only matter for symbolicating crash reports. + DSYM="Conclave.app/Contents/MacOS/Conclave.App.dSYM" + if [[ -d "$DSYM" ]]; then + SYMBOLS="Conclave-${VERSION}-${{ matrix.rid }}-symbols.zip" + ditto -c -k --keepParent "$DSYM" "$SYMBOLS" + rm -rf "$DSYM" + fi + NAME="Conclave-${VERSION}-${{ matrix.rid }}.dmg" # Stage the .app + Applications symlink so the DMG offers drag-to-install. STAGE="$(mktemp -d)/dmg" @@ -91,7 +113,7 @@ jobs: cp -R Conclave.app "$STAGE/" ln -s /Applications "$STAGE/Applications" hdiutil create -volname "Conclave" -srcfolder "$STAGE" -ov -format UDZO "$NAME" - echo "ARTIFACT=$NAME" >> "$GITHUB_ENV" + echo "ARTIFACT=Conclave-${VERSION}-${{ matrix.rid }}*" >> "$GITHUB_ENV" # ---------- Linux ---------- - name: Package (Linux tar.gz + AppImage) @@ -100,6 +122,15 @@ jobs: run: | VERSION="${{ steps.ver.outputs.version }}" + # NativeAOT splits debug info into Conclave.App.dbg (~50 MB). It's + # only used by debuggers, so move it into a -symbols.tar.gz Release + # asset and ship the slim binary to users. + if [[ -f publish/Conclave.App.dbg ]]; then + SYMBOLS="Conclave-${VERSION}-${{ matrix.rid }}-symbols.tar.gz" + tar -czf "$SYMBOLS" -C publish Conclave.App.dbg + rm -f publish/Conclave.App.dbg + fi + # tar.gz: just the publish output, plus the icon and a desktop entry. STAGE="conclave-${VERSION}" mkdir -p "$STAGE" @@ -144,7 +175,7 @@ jobs: ./appimagetool --appimage-extract-and-run "$APPDIR" "$APPIMG" # Multiple artifacts on Linux — upload-artifact picks them up via glob. - echo "ARTIFACT=Conclave-${VERSION}-${{ matrix.rid }}.*" >> "$GITHUB_ENV" + echo "ARTIFACT=Conclave-${VERSION}-${{ matrix.rid }}*" >> "$GITHUB_ENV" - name: Upload artifact uses: actions/upload-artifact@v4 From 8fa247e743e6d45f51089383043b1bdea2127831 Mon Sep 17 00:00:00 2001 From: Rik Schreurs Date: Fri, 1 May 2026 17:45:20 +0200 Subject: [PATCH 2/2] Guard Windows PDB strip against missing files --- .github/workflows/release.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 96690e8..0f290ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -77,12 +77,15 @@ jobs: # and Conclave.App PDBs alone are >150 MB uncompressed). Attaching # them as a separate Release asset keeps them archived per-version # for future symbolication without bloating the main artifact. - $sym = "_symbols" - New-Item -ItemType Directory -Path $sym | Out-Null - Move-Item publish/*.pdb $sym/ + $pdbs = Get-Item publish/*.pdb -ErrorAction SilentlyContinue + if ($pdbs) { + $sym = "_symbols" + New-Item -ItemType Directory -Path $sym | Out-Null + Move-Item $pdbs $sym/ + Compress-Archive -Path "$sym/*" -DestinationPath "Conclave-$version-$rid-symbols.zip" + } Compress-Archive -Path publish/* -DestinationPath "Conclave-$version-$rid.zip" - Compress-Archive -Path "$sym/*" -DestinationPath "Conclave-$version-$rid-symbols.zip" "ARTIFACT=Conclave-$version-$rid*.zip" | Out-File -Append $env:GITHUB_ENV # ---------- macOS ----------