simpliplay-desktop/.github/workflows/build-macos.yml
2025-08-07 20:51:21 -05:00

103 lines
3.6 KiB
YAML

name: Build macOS
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install dependencies
run: npm install
working-directory: simpliplay
- name: Package all app bundles without signing
run: npx electron-builder --dir --mac --x64 --arm64 --universal
working-directory: simpliplay
- name: Force ad-hoc signing on all app bundles
run: |
X64_APP_PATH="dist/mac/SimpliPlay.app"
ARM64_APP_PATH="dist/mac-arm64/SimpliPlay.app"
UNIVERSAL_APP_PATH="dist/mac-universal/SimpliPlay.app"
echo "Signing x64 app bundle..."
codesign --force --deep --sign - "$X64_APP_PATH"
echo "Signing arm64 app bundle..."
codesign --force --deep --sign - "$ARM64_APP_PATH"
echo "Signing universal app bundle..."
codesign --force --deep --sign - "$UNIVERSAL_APP_PATH"
echo "Ad-hoc signing complete for all bundles."
working-directory: simpliplay
- name: Create custom DMG installers
run: |
# --- Set up variables ---
APP_NAME="SimpliPlay"
BACKGROUND_IMAGE="dmg-background.png"
# --- Function to create a DMG from a signed app bundle ---
create_dmg() {
local app_path="$1"
local dmg_name="$2"
local temp_dmg_name="$3"
local volume_name="$4"
hdiutil create -size 300m -fs HFS+ -volname "$volume_name" "$temp_dmg_name"
MOUNT_POINT="/Volumes/$volume_name"
hdiutil attach "$temp_dmg_name" -mountpoint "$MOUNT_POINT"
mkdir "$MOUNT_POINT/.background"
cp "$BACKGROUND_IMAGE" "$MOUNT_POINT/.background/"
cp -R "$app_path" "$MOUNT_POINT/"
ln -s /Applications "$MOUNT_POINT/Applications"
printf 'tell application "Finder"
tell disk "%s"
open
set position of item "%s.app" to {150, 150}
set position of item "Applications" to {450, 150}
set background picture of container window to file ".background:%s"
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 bounds of container window to {400, 100, 700, 700}
update without registering applications
delay 5
close
end tell
end tell' "$volume_name" "$APP_NAME" "$BACKGROUND_IMAGE" | osascript
hdiutil detach "$MOUNT_POINT"
hdiutil convert "$temp_dmg_name" -format UDRW -ov -o "$dmg_name"
}
# --- Create DMG for each architecture ---
create_dmg "dist/mac/SimpliPlay.app" "dist/SimpliPlay-x64-darwin.dmg" "temp-x64.dmg" "SimpliPlay x64"
create_dmg "dist/mac-arm64/SimpliPlay.app" "dist/SimpliPlay-arm64-darwin.dmg" "temp-arm64.dmg" "SimpliPlay arm64"
create_dmg "dist/mac-universal/SimpliPlay.app" "dist/SimpliPlay-universal-darwin.dmg" "temp-universal.dmg" "SimpliPlay Universal"
working-directory: simpliplay
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: builds
path: simpliplay/dist/*.dmg