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: Clean up caches run: | npm cache clean --force rm -rf ~/Library/Caches/electron-builder working-directory: simpliplay - 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 basic DMG installers run: | # --- Set up variables --- APP_NAME="SimpliPlay" # --- Function to create a DMG from a signed app bundle --- create_dmg() { local app_path="$1" local dmg_name="$2" local volume_name="$3" # Create a temporary directory to build DMG contents local temp_dir="dmg_contents" mkdir "$temp_dir" # Copy the app bundle and create the symlink cp -r "$app_path" "$temp_dir/" ln -s /Applications "$temp_dir/Applications" # Create the DMG from the temporary directory hdiutil create -volname "$volume_name" -srcfolder "$temp_dir" -fs HFS+ -ov "$dmg_name" # Clean up the temporary directory rm -r "$temp_dir" } # --- Create DMG for each architecture --- create_dmg "dist/mac/SimpliPlay.app" "dist/SimpliPlay-x64-darwin.dmg" "SimpliPlay x64" create_dmg "dist/mac-arm64/SimpliPlay.app" "dist/SimpliPlay-arm64-darwin.dmg" "SimpliPlay arm64" create_dmg "dist/mac-universal/SimpliPlay.app" "dist/SimpliPlay-universal-darwin.dmg" "SimpliPlay Universal" working-directory: simpliplay - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: builds path: simpliplay/dist/*.dmg