fixs #18
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Android CI | |
| on: | |
| push: | |
| tags: | |
| - 'v*.*.*' | |
| workflow_dispatch: | |
| jobs: | |
| build-android: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Setup Node | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: '24' | |
| - name: Install deps | |
| run: npm ci | |
| - name: Sync Android version | |
| run: node scripts/sync-android-version.mjs | |
| - name: Add & Sync Capacitor Android | |
| run: | | |
| npx cap sync | |
| if [ ! -d android ]; then | |
| npx cap add android | |
| fi | |
| npx cap sync android | |
| - name: Setup Java | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '17' | |
| - name: Make Gradle wrapper executable | |
| working-directory: android | |
| run: chmod +x gradlew | |
| - name: Build Debug APK | |
| working-directory: android | |
| run: ./gradlew assembleDebug | |
| - name: Upload Debug APK | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: app-debug-apk | |
| path: android/app/build/outputs/apk/debug/*.apk | |
| if-no-files-found: warn | |
| - name: Decode Keystore (PKCS#12) | |
| run: | | |
| if [ -n "${ANDROID_KEYSTORE_BASE64}" ]; then | |
| echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > android/keystore.p12 | |
| echo "Keystore decoded to android/keystore.p12" | |
| else | |
| echo "ANDROID_KEYSTORE_BASE64 not set; skipping keystore decode" | |
| fi | |
| env: | |
| ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| - name: Build Signed Release (AAB + APK) | |
| working-directory: android | |
| env: | |
| ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| KEYSTORE_PATH: keystore.p12 | |
| KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} | |
| KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} | |
| KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} | |
| run: | | |
| if [ -n "${ANDROID_KEYSTORE_BASE64}" ]; then | |
| chmod +x gradlew | |
| ./gradlew clean | |
| ./gradlew \ | |
| bundleRelease \ | |
| assembleRelease \ | |
| -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/android/$KEYSTORE_PATH \ | |
| -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \ | |
| -Pandroid.injected.signing.store.type=PKCS12 \ | |
| -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ | |
| -Pandroid.injected.signing.key.password=$KEY_PASSWORD | |
| else | |
| echo "No keystore secret; skipping signed release build" | |
| fi | |
| - name: Upload Release AAB | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: app-release-aab | |
| path: android/app/build/outputs/bundle/release/*.aab | |
| if-no-files-found: ignore | |
| - name: Upload Release APK | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: app-release-apk | |
| path: android/app/build/outputs/apk/release/*.apk | |
| if-no-files-found: ignore |