Files
galaxy/package.sh
T
George BrancoviciandClaude Opus 4.6 c9492c90ea Add code signing, notarization, and DMG packaging scripts
Enables distributing Galaxy.app to end users without Gatekeeper warnings.
Uses Samsung Developer ID Application certificate with hardened runtime.

Pipeline: cargo bundle → sign.sh → notarize.sh → package.sh → Galaxy.dmg

Entitlements:
- network.client (AWS Bedrock API calls)
- automation.apple-events (osascript for CLI install)
- cs.allow-unsigned-executable-memory (Metal shader compilation)

Orchestration scripts:
- build-debug.sh: full pipeline with debug build
- build-release.sh: full pipeline with release build

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 12:47:57 -04:00

70 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
set -e
cd "$(dirname "$0")"
SIGNING_IDENTITY="Developer ID Application: SAMSUNG ELECTRONICS AMERICA, INC. (3JU72Z7Y3J)"
if [ "$1" = "--release" ]; then
APP_PATH="target/release/bundle/osx/Galaxy.app"
DMG_PATH="target/release/bundle/osx/Galaxy.dmg"
STAGING_DIR="target/release/bundle/osx/dmg-staging"
else
APP_PATH="target/debug/bundle/osx/Galaxy.app"
DMG_PATH="target/debug/bundle/osx/Galaxy.dmg"
STAGING_DIR="target/debug/bundle/osx/dmg-staging"
fi
if [ ! -d "$APP_PATH" ]; then
echo "Error: $APP_PATH not found."
exit 1
fi
echo "Verifying app is notarized..."
xcrun stapler validate "$APP_PATH" || {
echo "Error: App does not have a valid notarization ticket. Run ./sign.sh and ./notarize.sh first."
exit 1
}
echo "Preparing DMG staging directory..."
rm -rf "$STAGING_DIR"
mkdir -p "$STAGING_DIR"
cp -R "$APP_PATH" "$STAGING_DIR/"
ln -s /Applications "$STAGING_DIR/Applications"
echo "Creating DMG..."
hdiutil detach /Volumes/Galaxy -force 2>/dev/null || true
rm -f "$DMG_PATH"
hdiutil create -volname "Galaxy" \
-srcfolder "$STAGING_DIR" \
-ov -format UDZO \
"$DMG_PATH"
echo "Signing DMG..."
codesign --force --sign "$SIGNING_IDENTITY" --timestamp "$DMG_PATH"
echo "Submitting DMG to Apple notary service..."
RESULT=$(xcrun notarytool submit "$DMG_PATH" \
--keychain-profile notarytool-profile \
--wait 2>&1)
echo "$RESULT"
if ! echo "$RESULT" | grep -q "status: Accepted"; then
echo ""
echo "Error: DMG notarization was not accepted. Check output above."
exit 1
fi
echo "Stapling notarization ticket to DMG..."
xcrun stapler staple "$DMG_PATH"
echo "Cleaning up staging directory..."
rm -rf "$STAGING_DIR"
echo ""
echo "Verifying final DMG..."
xcrun stapler validate "$DMG_PATH"
echo ""
echo "Done. Galaxy.dmg is ready for distribution at:"
echo " $DMG_PATH"