225 lines
6.3 KiB
YAML
225 lines
6.3 KiB
YAML
name: Mobile Builds
|
|
|
|
# Auto-trigger disabled; workflow preserved for manual use via workflow_dispatch.
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build-web:
|
|
name: Build web bundle
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Install pnpm
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: "24"
|
|
cache: pnpm
|
|
|
|
- name: Cache pnpm store
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.pnpm-store
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
- name: Build dashboard client
|
|
run: pnpm --filter @fusion/dashboard build
|
|
|
|
- name: Upload dashboard dist artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: dashboard-dist-client
|
|
path: packages/dashboard/dist/client
|
|
retention-days: 30
|
|
|
|
build-ios:
|
|
name: Build iOS artifact
|
|
runs-on: macos-latest
|
|
needs: build-web
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Install pnpm
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: "24"
|
|
cache: pnpm
|
|
|
|
- name: Cache pnpm store
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.pnpm-store
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
|
|
- name: Cache iOS DerivedData
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/Library/Developer/Xcode/DerivedData
|
|
key: ${{ runner.os }}-derived-data-${{ hashFiles('packages/mobile/**', 'pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-derived-data-
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
- name: Download dashboard artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: dashboard-dist-client
|
|
path: packages/dashboard/dist/client
|
|
|
|
- name: Check iOS platform directory
|
|
id: ios-check
|
|
run: |
|
|
if [ -d packages/mobile/ios ]; then
|
|
echo "exists=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "::notice::Platform directory not found, skipping native build"
|
|
echo "exists=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Sync Capacitor iOS project
|
|
if: steps.ios-check.outputs.exists == 'true'
|
|
run: pnpm --filter @fusion/mobile cap sync ios
|
|
|
|
- name: Build unsigned IPA
|
|
if: steps.ios-check.outputs.exists == 'true'
|
|
run: |
|
|
xcodebuild \
|
|
-workspace packages/mobile/ios/App/App.xcworkspace \
|
|
-scheme App \
|
|
-configuration Debug \
|
|
-sdk iphoneos \
|
|
-derivedDataPath "$RUNNER_TEMP/DerivedData" \
|
|
CODE_SIGNING_ALLOWED=NO \
|
|
build
|
|
|
|
APP_PATH="$(find "$RUNNER_TEMP/DerivedData" -name App.app -type d | head -n 1)"
|
|
if [ -z "$APP_PATH" ]; then
|
|
echo "::error::Unable to locate built App.app"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$RUNNER_TEMP/ios-artifacts/Payload"
|
|
cp -R "$APP_PATH" "$RUNNER_TEMP/ios-artifacts/Payload/App.app"
|
|
(
|
|
cd "$RUNNER_TEMP/ios-artifacts"
|
|
zip -r fusion-ios.ipa Payload
|
|
)
|
|
|
|
- name: Upload iOS artifact
|
|
if: steps.ios-check.outputs.exists == 'true'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: fusion-ios-ipa
|
|
path: ${{ runner.temp }}/ios-artifacts/fusion-ios.ipa
|
|
retention-days: 30
|
|
|
|
build-android:
|
|
name: Build Android artifact
|
|
runs-on: ubuntu-latest
|
|
needs: build-web
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Install pnpm
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: "24"
|
|
cache: pnpm
|
|
|
|
- name: Setup Java 17
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: "17"
|
|
|
|
- name: Cache pnpm store
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.pnpm-store
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
|
|
- name: Cache Android Gradle caches
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.gradle/caches
|
|
key: ${{ runner.os }}-gradle-${{ hashFiles('packages/mobile/android/**/*.gradle*', 'packages/mobile/android/**/gradle-wrapper.properties') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gradle-
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
- name: Download dashboard artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: dashboard-dist-client
|
|
path: packages/dashboard/dist/client
|
|
|
|
- name: Check Android platform directory
|
|
id: android-check
|
|
run: |
|
|
if [ -d packages/mobile/android ]; then
|
|
echo "exists=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "::notice::Platform directory not found, skipping native build"
|
|
echo "exists=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Sync Capacitor Android project
|
|
if: steps.android-check.outputs.exists == 'true'
|
|
run: pnpm --filter @fusion/mobile cap sync android
|
|
|
|
- name: Build APK
|
|
if: steps.android-check.outputs.exists == 'true'
|
|
run: |
|
|
cd packages/mobile/android
|
|
chmod +x gradlew
|
|
./gradlew assembleDebug
|
|
|
|
- name: Upload Android artifact
|
|
if: steps.android-check.outputs.exists == 'true'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: fusion-android-apk
|
|
path: packages/mobile/android/app/build/outputs/apk/debug/*.apk
|
|
retention-days: 30
|