Skip to content

Compose Release compose-0.3.1 #16

Compose Release compose-0.3.1

Compose Release compose-0.3.1 #16

Workflow file for this run

# GitHub Actions Workflow for testing mpp-ui releases
# Builds Android APK, Desktop packages for multiple platforms, and mpp-server JAR
# Triggered by tags starting with 'compose-'
name: MPP Release
on:
release:
types: [prereleased, released]
workflow_dispatch:
inputs:
version:
description: 'Version to build'
required: true
default: '1.0.0-test'
jobs:
# Build mpp-server JAR
build-server:
name: Build Server JAR
runs-on: ubuntu-latest
# Only run for compose-* releases or manual dispatch
if: startsWith(github.ref, 'refs/tags/compose-') || github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# Remove large packages to free ~14GB
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build mpp-server fat JAR
run: ./gradlew :mpp-server:fatJar --no-daemon
- name: Upload Server JAR
uses: actions/upload-artifact@v4
with:
name: server-jar
path: mpp-server/build/libs/*-all.jar
- name: Clean build cache to save space (Linux only)
run: |
./gradlew :mpp-server:clean
rm -rf ~/.gradle/caches/modules-2/files-2.1
df -h
# Build Android APK
build-android:
name: Build Android APK
runs-on: ubuntu-latest
# Only run for compose-* releases or manual dispatch
if: startsWith(github.ref, 'refs/tags/compose-') || github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: false # Keep Android SDK as we need it
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build Android Debug APK
run: ./gradlew :mpp-ui:assembleDebug --no-daemon
- name: Build Android Release APK
run: ./gradlew :mpp-ui:assembleRelease --no-daemon
- name: Upload Android APKs
uses: actions/upload-artifact@v4
with:
name: android-apks
path: |
mpp-ui/build/outputs/apk/debug/*.apk
mpp-ui/build/outputs/apk/release/*.apk
- name: Clean build cache to save space (Linux only)
run: |
./gradlew :mpp-ui:clean
rm -rf ~/.gradle/caches/modules-2/files-2.1
rm -rf ~/.gradle/caches/transforms-*
df -h
# Build iOS App
build-ios:
name: Build iOS App
runs-on: macos-latest
continue-on-error: true
# Only run for compose-* releases or manual dispatch
if: startsWith(github.ref, 'refs/tags/compose-') || github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build Kotlin Frameworks for iOS
run: |
./gradlew :mpp-core:linkDebugFrameworkIosSimulatorArm64 --no-daemon
./gradlew :mpp-ui:linkDebugFrameworkIosSimulatorArm64 --no-daemon
- name: Install CocoaPods
run: sudo gem install cocoapods
- name: Install CocoaPods dependencies
working-directory: mpp-ios
run: pod install
- name: Build iOS App (Simulator)
working-directory: mpp-ios
run: |
xcodebuild -workspace AutoDevApp.xcworkspace \
-scheme AutoDevApp \
-configuration Release \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 15 Pro' \
-archivePath $PWD/build/AutoDevApp.xcarchive \
archive
- name: Export IPA
working-directory: mpp-ios
run: |
# Create export options plist
cat > ExportOptions.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>development</string>
<key>destination</key>
<string>export</string>
</dict>
</plist>
EOF
xcodebuild -exportArchive \
-archivePath $PWD/build/AutoDevApp.xcarchive \
-exportPath $PWD/build/ipa \
-exportOptionsPlist ExportOptions.plist
- name: Upload iOS App
uses: actions/upload-artifact@v4
with:
name: ios-app
path: mpp-ios/build/ipa/*.ipa
- name: Clean build cache
run: |
./gradlew :mpp-core:clean :mpp-ui:clean
rm -rf ~/.gradle/caches/modules-2/files-2.1
rm -rf mpp-ios/build
df -h
# Build Desktop packages for multiple platforms
build-desktop:
name: Build Desktop (${{ matrix.os }})
runs-on: ${{ matrix.os }}
# Only run for compose-* releases or manual dispatch
if: startsWith(github.ref, 'refs/tags/compose-') || github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
task: packageDeb
artifact: linux-deb
path: mpp-ui/build/compose/binaries/main/deb/*.deb
- os: windows-latest
task: packageMsi
artifact: windows-msi
path: mpp-ui/build/compose/binaries/main/msi/*.msi
- os: macos-latest
task: packageDmg
artifact: macos-dmg
path: mpp-ui/build/compose/binaries/main/dmg/*.dmg
steps:
- name: Free Disk Space (Ubuntu)
if: runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Grant execute permission for gradlew (Unix)
if: runner.os != 'Windows'
run: chmod +x gradlew
- name: Build Desktop package
run: ./gradlew :mpp-ui:${{ matrix.task }} --no-daemon
- name: Upload Desktop package
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.path }}
- name: Clean build cache to save space (Unix)
if: runner.os != 'Windows'
run: |
./gradlew :mpp-ui:clean
rm -rf ~/.gradle/caches/modules-2/files-2.1
df -h
- name: Clean build cache to save space (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
./gradlew :mpp-ui:clean
if (Test-Path "$env:USERPROFILE\.gradle\caches\modules-2\files-2.1") {
Remove-Item -Recurse -Force "$env:USERPROFILE\.gradle\caches\modules-2\files-2.1"
}
# Create release with all artifacts
create-release:
name: Create Release
needs: [build-server, build-android, build-ios, build-desktop]
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
# Only run for compose-* tags or manual dispatch
if: startsWith(github.ref, 'refs/tags/compose-') || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
continue-on-error: true
- name: Display structure of downloaded files
run: |
if [ -d "artifacts" ]; then
ls -la artifacts/
else
echo "No artifacts directory found"
mkdir -p artifacts
fi
- name: Create Release
uses: softprops/action-gh-release@v2
with:
name: "Compose Release ${{ github.ref_name }}"
body: |
## AutoDev Compose Multiplatform Release Test
This is a test release for the mpp modules containing:
### Server
- mpp-server fat JAR (ready to run with `java -jar mpp-server-*-all.jar`)
### Android
- Debug APK
- Release APK
### iOS
- iOS App (.ipa for iOS Simulator)
### Desktop
- Linux (.deb package)
- Windows (.msi installer)
- macOS (.dmg image)
**Note**: This is a test release. Please use with caution.
files: |
artifacts/**/*
draft: false
prerelease: true
fail_on_unmatched_files: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}