mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
macOS: save dSYM files
The focus of this commit is to store the dSYM files associated with official macOS builds. dSYM files allow us to map crash reports to source. The dSYM files are primarily uploaded to our official blob storage where all releases are also stored. We also upload the dSYM files to Sentry since I'm experimenting with using that for crash reproting (note: manual crash reporting, no automatic network traffic). This commit also changes our blob URLs for releases to use the full Git SHA rather than a build number. This is much easier to trace back.
This commit is contained in:
64
.github/workflows/release-pr.yml
vendored
64
.github/workflows/release-pr.yml
vendored
@ -7,6 +7,48 @@ on:
|
|||||||
name: Release PR
|
name: Release PR
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
sentry-dsym-debug:
|
||||||
|
runs-on: namespace-profile-ghostty-sm
|
||||||
|
needs: [build-macos-debug]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install sentry-cli
|
||||||
|
run: |
|
||||||
|
curl -sL https://sentry.io/get-cli/ | bash
|
||||||
|
|
||||||
|
- name: Download dSYM
|
||||||
|
run: |
|
||||||
|
GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)
|
||||||
|
curl -L https://pr.files.ghostty.dev/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip > dsym.zip
|
||||||
|
|
||||||
|
- name: Upload dSYM to Sentry
|
||||||
|
env:
|
||||||
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
|
run: |
|
||||||
|
sentry-cli dif upload --project ghostty --wait dsym.zip
|
||||||
|
|
||||||
|
sentry-dsym:
|
||||||
|
runs-on: namespace-profile-ghostty-sm
|
||||||
|
needs: [build-macos]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install sentry-cli
|
||||||
|
run: |
|
||||||
|
curl -sL https://sentry.io/get-cli/ | bash
|
||||||
|
|
||||||
|
- name: Download dSYM
|
||||||
|
run: |
|
||||||
|
GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)
|
||||||
|
curl -L https://pr.files.ghostty.dev/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip > dsym.zip
|
||||||
|
|
||||||
|
- name: Upload dSYM to Sentry
|
||||||
|
env:
|
||||||
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
|
run: |
|
||||||
|
sentry-cli dif upload --project ghostty --wait dsym.zip
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
runs-on: namespace-profile-ghostty-macos
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
@ -42,6 +84,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
||||||
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||||
|
echo "GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)" >> $GITHUB_ENV
|
||||||
|
|
||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
@ -132,14 +175,18 @@ jobs:
|
|||||||
|
|
||||||
# Zip up the app
|
# Zip up the app
|
||||||
- name: Zip App
|
- name: Zip App
|
||||||
run: cd macos/build/Release && zip -9 -r --symlinks ../../../ghostty-macos-universal.zip Ghostty.app
|
run: |
|
||||||
|
cd macos/build/Release
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal.zip Ghostty.app
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-dsym.zip Ghostty.app.dSYM/
|
||||||
|
|
||||||
# Update Blob Storage
|
# Update Blob Storage
|
||||||
- name: Prep R2 Storage
|
- name: Prep R2 Storage
|
||||||
run: |
|
run: |
|
||||||
mkdir blob
|
mkdir blob
|
||||||
mkdir -p blob/${GHOSTTY_BUILD}
|
mkdir -p blob/${GHOSTTY_COMMIT_LONG}
|
||||||
cp ghostty-macos-universal.zip blob/${GHOSTTY_BUILD}/ghostty-macos-universal.zip
|
cp ghostty-macos-universal.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal.zip
|
||||||
|
cp ghostty-macos-universal-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@latest
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
@ -185,6 +232,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
||||||
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||||
|
echo "GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)" >> $GITHUB_ENV
|
||||||
|
|
||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
@ -275,14 +323,18 @@ jobs:
|
|||||||
|
|
||||||
# Zip up the app
|
# Zip up the app
|
||||||
- name: Zip App
|
- name: Zip App
|
||||||
run: cd macos/build/Release && zip -9 -r --symlinks ../../../ghostty-macos-universal-debug.zip Ghostty.app
|
run: |
|
||||||
|
cd macos/build/Release
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-debug.zip Ghostty.app
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-debug-dsym.zip Ghostty.app.dSYM/
|
||||||
|
|
||||||
# Update Blob Storage
|
# Update Blob Storage
|
||||||
- name: Prep R2 Storage
|
- name: Prep R2 Storage
|
||||||
run: |
|
run: |
|
||||||
mkdir blob
|
mkdir blob
|
||||||
mkdir -p blob/${GHOSTTY_BUILD}
|
mkdir -p blob/${GHOSTTY_COMMIT_LONG}
|
||||||
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_BUILD}/ghostty-macos-universal-debug.zip
|
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug.zip
|
||||||
|
cp ghostty-macos-universal-debug-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@latest
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
|
66
.github/workflows/release-tip.yml
vendored
66
.github/workflows/release-tip.yml
vendored
@ -21,6 +21,48 @@ jobs:
|
|||||||
git tag -fa tip -m "Latest Continuous Release" ${GITHUB_SHA}
|
git tag -fa tip -m "Latest Continuous Release" ${GITHUB_SHA}
|
||||||
git push --force origin tip
|
git push --force origin tip
|
||||||
|
|
||||||
|
sentry-dsym-debug:
|
||||||
|
runs-on: namespace-profile-ghostty-sm
|
||||||
|
needs: [build-macos-debug]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install sentry-cli
|
||||||
|
run: |
|
||||||
|
curl -sL https://sentry.io/get-cli/ | bash
|
||||||
|
|
||||||
|
- name: Download dSYM
|
||||||
|
run: |
|
||||||
|
GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)
|
||||||
|
curl -L https://tip.files.ghostty.dev/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip > dsym.zip
|
||||||
|
|
||||||
|
- name: Upload dSYM to Sentry
|
||||||
|
env:
|
||||||
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
|
run: |
|
||||||
|
sentry-cli dif upload --project ghostty --wait dsym.zip
|
||||||
|
|
||||||
|
sentry-dsym:
|
||||||
|
runs-on: namespace-profile-ghostty-sm
|
||||||
|
needs: [build-macos]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install sentry-cli
|
||||||
|
run: |
|
||||||
|
curl -sL https://sentry.io/get-cli/ | bash
|
||||||
|
|
||||||
|
- name: Download dSYM
|
||||||
|
run: |
|
||||||
|
GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)
|
||||||
|
curl -L https://tip.files.ghostty.dev/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip > dsym.zip
|
||||||
|
|
||||||
|
- name: Upload dSYM to Sentry
|
||||||
|
env:
|
||||||
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
|
run: |
|
||||||
|
sentry-cli dif upload --project ghostty --wait dsym.zip
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
if: |
|
if: |
|
||||||
${{
|
${{
|
||||||
@ -66,6 +108,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
||||||
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||||
|
echo "GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)" >> $GITHUB_ENV
|
||||||
|
|
||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
@ -154,9 +197,12 @@ jobs:
|
|||||||
echo "Attach staple"
|
echo "Attach staple"
|
||||||
xcrun stapler staple "macos/build/Release/Ghostty.app"
|
xcrun stapler staple "macos/build/Release/Ghostty.app"
|
||||||
|
|
||||||
# Zip up the app
|
# Zip up the app and symbols
|
||||||
- name: Zip App
|
- name: Zip App
|
||||||
run: cd macos/build/Release && zip -9 -r --symlinks ../../../ghostty-macos-universal.zip Ghostty.app
|
run: |
|
||||||
|
cd macos/build/Release
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal.zip Ghostty.app
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-dsym.zip Ghostty.app.dSYM/
|
||||||
|
|
||||||
# Update Release
|
# Update Release
|
||||||
- name: Release
|
- name: Release
|
||||||
@ -184,8 +230,9 @@ jobs:
|
|||||||
- name: Prep R2 Storage
|
- name: Prep R2 Storage
|
||||||
run: |
|
run: |
|
||||||
mkdir blob
|
mkdir blob
|
||||||
mkdir -p blob/${GHOSTTY_BUILD}
|
mkdir -p blob/${GHOSTTY_COMMIT_LONG}
|
||||||
cp ghostty-macos-universal.zip blob/${GHOSTTY_BUILD}/ghostty-macos-universal.zip
|
cp ghostty-macos-universal.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal.zip
|
||||||
|
cp ghostty-macos-universal-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip
|
||||||
cp appcast_new.xml blob/appcast.xml
|
cp appcast_new.xml blob/appcast.xml
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@latest
|
uses: ryand56/r2-upload-action@latest
|
||||||
@ -242,6 +289,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
echo "GHOSTTY_BUILD=$(git rev-list --count head)" >> $GITHUB_ENV
|
||||||
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
echo "GHOSTTY_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||||
|
echo "GHOSTTY_COMMIT_LONG=$(git rev-parse HEAD)" >> $GITHUB_ENV
|
||||||
|
|
||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
@ -332,7 +380,10 @@ jobs:
|
|||||||
|
|
||||||
# Zip up the app
|
# Zip up the app
|
||||||
- name: Zip App
|
- name: Zip App
|
||||||
run: cd macos/build/Release && zip -9 -r --symlinks ../../../ghostty-macos-universal-debug.zip Ghostty.app
|
run: |
|
||||||
|
cd macos/build/Release
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-debug.zip Ghostty.app
|
||||||
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-debug-dsym.zip Ghostty.app.dSYM/
|
||||||
|
|
||||||
# Update Release
|
# Update Release
|
||||||
- name: Release
|
- name: Release
|
||||||
@ -349,8 +400,9 @@ jobs:
|
|||||||
- name: Prep R2 Storage
|
- name: Prep R2 Storage
|
||||||
run: |
|
run: |
|
||||||
mkdir blob
|
mkdir blob
|
||||||
mkdir -p blob/${GHOSTTY_BUILD}
|
mkdir -p blob/${GHOSTTY_COMMIT_LONG}
|
||||||
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_BUILD}/ghostty-macos-universal-debug.zip
|
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug.zip
|
||||||
|
cp ghostty-macos-universal-debug-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@latest
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
|
5
dist/macos/update_appcast_tip.py
vendored
5
dist/macos/update_appcast_tip.py
vendored
@ -22,6 +22,7 @@ from datetime import datetime, timezone
|
|||||||
now = datetime.now(timezone.utc)
|
now = datetime.now(timezone.utc)
|
||||||
build = os.environ["GHOSTTY_BUILD"]
|
build = os.environ["GHOSTTY_BUILD"]
|
||||||
commit = os.environ["GHOSTTY_COMMIT"]
|
commit = os.environ["GHOSTTY_COMMIT"]
|
||||||
|
commit_long = os.environ["GHOSTTY_COMMIT_LONG"]
|
||||||
repo = "https://github.com/ghostty-org/ghostty"
|
repo = "https://github.com/ghostty-org/ghostty"
|
||||||
|
|
||||||
# Read our sign_update output
|
# Read our sign_update output
|
||||||
@ -83,7 +84,7 @@ elem.text = "12.0.0"
|
|||||||
elem = ET.SubElement(item, "description")
|
elem = ET.SubElement(item, "description")
|
||||||
elem.text = f"""
|
elem.text = f"""
|
||||||
<p>
|
<p>
|
||||||
Automated build from commit <code><a href="{repo}/commits/{commit}">{commit}</a></code>
|
Automated build from commit <code><a href="{repo}/commits/{commit_long}">{commit}</a></code>
|
||||||
on {now.strftime('%Y-%m-%d')}.
|
on {now.strftime('%Y-%m-%d')}.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@ -93,7 +94,7 @@ commit history <a href="{repo}">on GitHub</a> for all changes.
|
|||||||
</p>
|
</p>
|
||||||
"""
|
"""
|
||||||
elem = ET.SubElement(item, "enclosure")
|
elem = ET.SubElement(item, "enclosure")
|
||||||
elem.set("url", f"https://tip.files.ghostty.dev/{build}/ghostty-macos-universal.zip")
|
elem.set("url", f"https://tip.files.ghostty.dev/{commit_long}/ghostty-macos-universal.zip")
|
||||||
elem.set("type", "application/octet-stream")
|
elem.set("type", "application/octet-stream")
|
||||||
for key, value in attrs.items():
|
for key, value in attrs.items():
|
||||||
elem.set(key, value)
|
elem.set(key, value)
|
||||||
|
@ -770,6 +770,7 @@
|
|||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
|
Reference in New Issue
Block a user