Skip to content

Build macOS DMG

Build macOS DMG #6

Workflow file for this run

name: Build macOS DMG
on:
workflow_dispatch:
inputs:
architecture:
description: 'Target architecture (ARM64=Apple Silicon M1/M2/M3, x64=Intel Macs)'
required: true
default: 'both'
type: choice
options:
- both
- x64
- arm64
jobs:
build-x64:
runs-on: macos-14
if: github.event.inputs.architecture == 'both' || github.event.inputs.architecture == 'x64'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Display build info
run: |
echo "🚀 Building EncodeForge for macOS"
echo "Target Architecture: x64 (Intel Macs)"
echo "JavaFX Architecture: x64"
echo ""
echo "Architecture Info:"
echo "- x64: Intel-based Macs (all Intel Macs)"
echo "- ARM64: Apple Silicon Macs (M1, M2, M3, M4)"
echo ""
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
architecture: x64
- name: Cache Maven dependencies
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Download JavaFX SDK
run: |
echo "Downloading JavaFX SDK 17.0.17 for macOS (x64)..."
mkdir -p javafx-sdk
curl -L -o javafx-sdk.zip "https://download2.gluonhq.com/openjfx/17.0.17/openjfx-17.0.17_osx-x64_bin-sdk.zip"
# Verify download succeeded
if [ ! -f javafx-sdk.zip ] || [ ! -s javafx-sdk.zip ]; then
echo "❌ Failed to download JavaFX SDK"
exit 1
fi
# Check if it's a valid zip file
if ! unzip -t javafx-sdk.zip > /dev/null 2>&1; then
echo "❌ Downloaded file is not a valid zip file"
echo "File size: $(ls -lh javafx-sdk.zip | awk '{print $5}')"
head -20 javafx-sdk.zip
exit 1
fi
echo "✓ Download successful, extracting..."
unzip -q javafx-sdk.zip -d javafx-sdk
rm javafx-sdk.zip
JAVAFX_HOME=$(find javafx-sdk -type d -name "javafx-sdk-*" | head -n 1)
echo "JAVAFX_HOME=${JAVAFX_HOME}" >> $GITHUB_ENV
echo "JavaFX SDK installed at: ${JAVAFX_HOME}"
- name: Verify JavaFX installation
run: |
echo "JavaFX SDK location: $JAVAFX_HOME"
ls -la "$JAVAFX_HOME/lib"
echo "Modules available:"
ls "$JAVAFX_HOME/lib"/*.jar | grep -o 'javafx-[^/]*' | sort
- name: Configure Maven JavaFX property
run: |
# Update pom.xml to use the correct JavaFX home path
# The pom.xml has a hardcoded Windows path, we need to override it
echo "Setting JavaFX home to: $JAVAFX_HOME"
- name: Build JAR
working-directory: EncodeForge
run: |
echo "Building EncodeForge JAR..."
echo "JavaFX Home: $JAVAFX_HOME"
mvn clean package -DskipTests \
-Djavafx.home="$JAVAFX_HOME" \
-Dmaven.javadoc.skip=true
- name: Verify JAR build
run: |
if [ -f "EncodeForge/target/encodeforge-0.4.0.jar" ]; then
echo "✓ JAR build successful"
ls -lh EncodeForge/target/encodeforge-0.4.0.jar
else
echo "✗ JAR build failed"
exit 1
fi
- name: Build macOS DMG
working-directory: EncodeForge
run: |
echo "Building macOS DMG installer for x64..."
echo "JavaFX Home: $JAVAFX_HOME"
mvn package -P mac-dmg-x64 \
-Djavafx.home="$JAVAFX_HOME" \
-Dmaven.javadoc.skip=true
- name: Verify DMG build
run: |
DMG_FILE=$(find EncodeForge/target/dist/mac -name "*.dmg" 2>/dev/null || true)
if [ -n "$DMG_FILE" ]; then
echo "✓ DMG build successful"
ls -lh "$DMG_FILE"
echo "DMG_FILE=$DMG_FILE" >> $GITHUB_ENV
else
echo "✗ DMG build failed"
ls -la EncodeForge/target/dist/mac/ || true
exit 1
fi
- name: Get DMG info
run: |
if [ -n "$DMG_FILE" ]; then
echo "DMG Details:"
hdiutil info "$DMG_FILE" || true
file "$DMG_FILE"
fi
- name: Upload DMG artifact
uses: actions/upload-artifact@v4
with:
name: encodeforge-macos-x64-${{ github.run_number }}
path: |
EncodeForge/target/dist/mac/*.dmg
EncodeForge/target/encodeforge-0.4.0.jar
retention-days: 7
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
with:
name: encodeforge-jar-x64
path: EncodeForge/target/encodeforge-0.4.0.jar
retention-days: 30
- name: Build summary
run: |
echo "## Build Summary - x64 (Intel Macs)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JDK 17 installed" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JavaFX SDK 17.0.17 installed" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JAR built successfully" >> $GITHUB_STEP_SUMMARY
echo "- ✓ DMG installer created" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ -n "$DMG_FILE" ]; then
DMG_SIZE=$(ls -lh "$DMG_FILE" | awk '{print $5}')
echo "**DMG Size:** $DMG_SIZE" >> $GITHUB_STEP_SUMMARY
fi
build-arm64:
runs-on: macos-14
if: github.event.inputs.architecture == 'both' || github.event.inputs.architecture == 'arm64'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Display build info
run: |
echo "🚀 Building EncodeForge for macOS"
echo "Target Architecture: ARM64 (Apple Silicon)"
echo "JavaFX Architecture: aarch64"
echo ""
echo "Architecture Info:"
echo "- x64: Intel-based Macs (all Intel Macs)"
echo "- ARM64: Apple Silicon Macs (M1, M2, M3, M4)"
echo ""
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
architecture: arm64
- name: Cache Maven dependencies
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Download JavaFX SDK
run: |
echo "Downloading JavaFX SDK 17.0.17 for macOS (aarch64)..."
mkdir -p javafx-sdk
curl -L -o javafx-sdk.zip "https://download2.gluonhq.com/openjfx/17.0.17/openjfx-17.0.17_osx-aarch64_bin-sdk.zip"
# Verify download succeeded
if [ ! -f javafx-sdk.zip ] || [ ! -s javafx-sdk.zip ]; then
echo "❌ Failed to download JavaFX SDK"
exit 1
fi
# Check if it's a valid zip file
if ! unzip -t javafx-sdk.zip > /dev/null 2>&1; then
echo "❌ Downloaded file is not a valid zip file"
echo "File size: $(ls -lh javafx-sdk.zip | awk '{print $5}')"
head -20 javafx-sdk.zip
exit 1
fi
echo "✓ Download successful, extracting..."
unzip -q javafx-sdk.zip -d javafx-sdk
rm javafx-sdk.zip
JAVAFX_HOME=$(find javafx-sdk -type d -name "javafx-sdk-*" | head -n 1)
echo "JAVAFX_HOME=${JAVAFX_HOME}" >> $GITHUB_ENV
echo "JavaFX SDK installed at: ${JAVAFX_HOME}"
- name: Verify JavaFX installation
run: |
echo "JavaFX SDK location: $JAVAFX_HOME"
ls -la "$JAVAFX_HOME/lib"
echo "Modules available:"
ls "$JAVAFX_HOME/lib"/*.jar | grep -o 'javafx-[^/]*' | sort
- name: Configure Maven JavaFX property
run: |
# Update pom.xml to use the correct JavaFX home path
# The pom.xml has a hardcoded Windows path, we need to override it
echo "Setting JavaFX home to: $JAVAFX_HOME"
- name: Build JAR
working-directory: EncodeForge
run: |
echo "Building EncodeForge JAR..."
echo "JavaFX Home: $JAVAFX_HOME"
mvn clean package -DskipTests \
-Djavafx.home="$JAVAFX_HOME" \
-Dmaven.javadoc.skip=true
- name: Verify JAR build
run: |
if [ -f "EncodeForge/target/encodeforge-0.4.0.jar" ]; then
echo "✓ JAR build successful"
ls -lh EncodeForge/target/encodeforge-0.4.0.jar
else
echo "✗ JAR build failed"
exit 1
fi
- name: Build macOS DMG
working-directory: EncodeForge
run: |
echo "Building macOS DMG installer for ARM64..."
echo "JavaFX Home: $JAVAFX_HOME"
mvn package -P mac-dmg-arm64 \
-Djavafx.home="$JAVAFX_HOME" \
-Dmaven.javadoc.skip=true
- name: Verify DMG build
run: |
DMG_FILE=$(find EncodeForge/target/dist/mac -name "*.dmg" 2>/dev/null || true)
if [ -n "$DMG_FILE" ]; then
echo "✓ DMG build successful"
ls -lh "$DMG_FILE"
echo "DMG_FILE=$DMG_FILE" >> $GITHUB_ENV
else
echo "✗ DMG build failed"
ls -la EncodeForge/target/dist/mac/ || true
exit 1
fi
- name: Get DMG info
run: |
if [ -n "$DMG_FILE" ]; then
echo "DMG Details:"
hdiutil info "$DMG_FILE" || true
file "$DMG_FILE"
fi
- name: Upload DMG artifact
uses: actions/upload-artifact@v4
with:
name: encodeforge-macos-arm64-${{ github.run_number }}
path: |
EncodeForge/target/dist/mac/*.dmg
EncodeForge/target/encodeforge-0.4.0.jar
retention-days: 30
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
with:
name: encodeforge-jar-arm64
path: EncodeForge/target/encodeforge-0.4.0.jar
retention-days: 30
- name: Build summary
run: |
echo "## Build Summary - ARM64 (Apple Silicon)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JDK 17 installed" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JavaFX SDK 17.0.17 installed" >> $GITHUB_STEP_SUMMARY
echo "- ✓ JAR built successfully" >> $GITHUB_STEP_SUMMARY
echo "- ✓ DMG installer created" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ -n "$DMG_FILE" ]; then
DMG_SIZE=$(ls -lh "$DMG_FILE" | awk '{print $5}')
echo "**DMG Size:** $DMG_SIZE" >> $GITHUB_STEP_SUMMARY
fi