Files
uskey/build-dmg.sh
loveuer 6e4090b53e
Some checks failed
Build and Release / Build DMG for arm64 (push) Has been cancelled
Build and Release / Build DMG for x86_64 (push) Has been cancelled
Build and Release / Create Release (push) Has been cancelled
Add GitHub Actions for automated DMG builds
Features:
- Build DMG for both arm64 (Apple Silicon) and x86_64 (Intel)
- Automatic release creation when tags are pushed
- Multi-architecture support using matrix strategy
- Upload artifacts to GitHub releases

Workflow:
1. Triggered only on tag push (e.g., v1.0.0)
2. Build job: Compiles for arm64 and x86_64 in parallel
3. Release job: Creates GitHub release with both DMGs

Build Scripts Updates:
- Support VERSION environment variable
- Dynamic version in Info.plist
- Dynamic version in DMG filename

Release Artifacts:
- uskey-v{version}-arm64.dmg (Apple Silicon)
- uskey-v{version}-x86_64.dmg (Intel)

Files:
- .github/workflows/release.yml: CI/CD workflow
- build-app.sh: Support VERSION env var
- build-dmg.sh: Support VERSION env var

Usage:

🤖 Generated with [Qoder](https://qoder.com)
2025-12-02 22:07:13 +08:00

81 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -e
APP_NAME="uskey"
VERSION="${VERSION:-1.0.0}"
BUILD_DIR=".build/release"
APP_DIR="$BUILD_DIR/$APP_NAME.app"
DMG_DIR=".build/dmg"
DMG_NAME="$APP_NAME-v$VERSION.dmg"
DMG_TEMP="$DMG_DIR/temp.dmg"
DMG_FINAL="$BUILD_DIR/$DMG_NAME"
if [ ! -d "$APP_DIR" ]; then
echo "Error: App bundle not found. Run ./build-app.sh first."
exit 1
fi
echo "Creating DMG for $APP_NAME v$VERSION..."
echo "Step 1: Preparing DMG directory..."
rm -rf "$DMG_DIR"
mkdir -p "$DMG_DIR"
echo "Step 2: Copying app to DMG directory..."
cp -R "$APP_DIR" "$DMG_DIR/"
echo "Step 3: Creating Applications symlink..."
ln -s /Applications "$DMG_DIR/Applications"
echo "Step 4: Creating temporary DMG..."
hdiutil create -volname "$APP_NAME" \
-srcfolder "$DMG_DIR" \
-ov -format UDRW \
"$DMG_TEMP"
echo "Step 5: Mounting temporary DMG..."
MOUNT_DIR=$(hdiutil attach "$DMG_TEMP" | grep Volumes | awk '{print $3}')
echo "Step 6: Setting DMG appearance..."
echo '
tell application "Finder"
tell disk "'$APP_NAME'"
open
set current view of container window to icon view
set toolbar visible of container window to false
set statusbar visible of container window to false
set the bounds of container window to {400, 100, 900, 400}
set viewOptions to the icon view options of container window
set arrangement of viewOptions to not arranged
set icon size of viewOptions to 72
set position of item "'$APP_NAME'.app" of container window to {125, 150}
set position of item "Applications" of container window to {375, 150}
update without registering applications
delay 1
end tell
end tell
' | osascript || true
echo "Step 7: Unmounting temporary DMG..."
hdiutil detach "$MOUNT_DIR" || true
sleep 2
echo "Step 8: Converting to compressed DMG..."
rm -f "$DMG_FINAL"
hdiutil convert "$DMG_TEMP" \
-format UDZO \
-imagekey zlib-level=9 \
-o "$DMG_FINAL"
echo "Step 9: Cleaning up..."
rm -rf "$DMG_DIR"
echo ""
echo "✅ DMG created successfully!"
echo " Location: $DMG_FINAL"
echo " Size: $(du -h "$DMG_FINAL" | cut -f1)"
echo ""
echo "To install:"
echo " 1. Open $DMG_FINAL"
echo " 2. Drag $APP_NAME.app to Applications folder"
echo " 3. Run from Applications or Spotlight"