Build and Release Android APK #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: Build and Release Android APK | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version tag (e.g., v1.0.0)' | |
| required: false | |
| default: '' | |
| jobs: | |
| build-arm64: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.get_version.outputs.version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Setup Expo | |
| uses: expo/expo-github-action@v8 | |
| with: | |
| expo-version: latest | |
| eas-version: latest | |
| token: ${{ secrets.EXPO_TOKEN }} | |
| - name: Get version from app.config.ts | |
| id: get_version | |
| run: | | |
| VERSION=$(grep -oP "version:\s*'\\K[^']+" app.config.ts) | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "App version: $VERSION" | |
| - name: Create google-services.json from secret | |
| run: echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > google-services.json | |
| - name: Prebuild Android | |
| run: npx expo prebuild --platform android --clean | |
| - name: Build APK (arm64-v8a) | |
| run: | | |
| cd android | |
| ./gradlew assembleRelease \ | |
| -PreactNativeArchitectures=arm64-v8a \ | |
| --no-daemon | |
| env: | |
| GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g" | |
| - name: Rename and Upload arm64-v8a APK | |
| run: | | |
| mv android/app/build/outputs/apk/release/app-release.apk \ | |
| huawei-manager-arm64-v8a.apk | |
| - name: Upload arm64-v8a APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: apk-arm64-v8a | |
| path: huawei-manager-*.apk | |
| retention-days: 7 | |
| build-armv7: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Setup Expo | |
| uses: expo/expo-github-action@v8 | |
| with: | |
| expo-version: latest | |
| eas-version: latest | |
| token: ${{ secrets.EXPO_TOKEN }} | |
| - name: Get version from app.config.ts | |
| id: get_version | |
| run: | | |
| VERSION=$(grep -oP "version:\s*'\\K[^']+" app.config.ts) | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "App version: $VERSION" | |
| - name: Create google-services.json from secret | |
| run: echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > google-services.json | |
| - name: Prebuild Android | |
| run: npx expo prebuild --platform android --clean | |
| - name: Build APK (armeabi-v7a) | |
| run: | | |
| cd android | |
| ./gradlew assembleRelease \ | |
| -PreactNativeArchitectures=armeabi-v7a \ | |
| --no-daemon | |
| env: | |
| GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g" | |
| - name: Rename and Upload armeabi-v7a APK | |
| run: | | |
| mv android/app/build/outputs/apk/release/app-release.apk \ | |
| huawei-manager-armeabi-v7a.apk | |
| - name: Upload armeabi-v7a APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: apk-armeabi-v7a | |
| path: huawei-manager-*.apk | |
| retention-days: 7 | |
| build-universal: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Setup Expo | |
| uses: expo/expo-github-action@v8 | |
| with: | |
| expo-version: latest | |
| eas-version: latest | |
| token: ${{ secrets.EXPO_TOKEN }} | |
| - name: Get version from app.config.ts | |
| id: get_version | |
| run: | | |
| VERSION=$(grep -oP "version:\s*'\\K[^']+" app.config.ts) | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "App version: $VERSION" | |
| - name: Create google-services.json from secret | |
| run: echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > google-services.json | |
| - name: Prebuild Android | |
| run: npx expo prebuild --platform android --clean | |
| - name: Build Universal APK | |
| run: | | |
| cd android | |
| ./gradlew assembleRelease --no-daemon | |
| env: | |
| GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g" | |
| - name: Rename and Upload Universal APK | |
| run: | | |
| mv android/app/build/outputs/apk/release/app-release.apk \ | |
| huawei-manager-universal.apk | |
| - name: Upload Universal APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: apk-universal | |
| path: huawei-manager-*.apk | |
| retention-days: 7 | |
| release: | |
| runs-on: ubuntu-latest | |
| needs: [build-arm64, build-armv7, build-universal] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get previous tag | |
| id: prev_tag | |
| run: | | |
| PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") | |
| echo "prev_tag=$PREV_TAG" >> $GITHUB_OUTPUT | |
| echo "Previous tag: $PREV_TAG" | |
| - name: Generate Release Notes from PRs | |
| id: release_notes | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| PREV_TAG="${{ steps.prev_tag.outputs.prev_tag }}" | |
| REPO="${{ github.repository }}" | |
| # Get commits since last tag (or all if no previous tag) | |
| if [ -n "$PREV_TAG" ]; then | |
| COMMITS=$(git log ${PREV_TAG}..HEAD --pretty=format:"%H" 2>/dev/null || echo "") | |
| else | |
| COMMITS=$(git log --pretty=format:"%H" 2>/dev/null || echo "") | |
| fi | |
| # Find merged PRs from commits | |
| echo "## What's Changed" > release_notes.md | |
| echo "" >> release_notes.md | |
| PR_FOUND=false | |
| for COMMIT in $COMMITS; do | |
| # Get PR number from commit (if merged via PR) | |
| PR_DATA=$(gh api "repos/${REPO}/commits/${COMMIT}/pulls" --jq '.[0] | {number, title, user: .user.login, html_url}' 2>/dev/null || echo "") | |
| if [ -n "$PR_DATA" ] && [ "$PR_DATA" != "null" ]; then | |
| PR_NUM=$(echo "$PR_DATA" | jq -r '.number') | |
| PR_TITLE=$(echo "$PR_DATA" | jq -r '.title') | |
| PR_USER=$(echo "$PR_DATA" | jq -r '.user') | |
| PR_URL=$(echo "$PR_DATA" | jq -r '.html_url') | |
| # Skip if PR number is null or empty (commit not from a PR) | |
| if [ -z "$PR_NUM" ] || [ "$PR_NUM" = "null" ]; then | |
| continue | |
| fi | |
| # Check if already added (avoid duplicates) | |
| if ! grep -q "#${PR_NUM}" release_notes.md 2>/dev/null; then | |
| echo "* ${PR_TITLE} by @${PR_USER} in [#${PR_NUM}](${PR_URL})" >> release_notes.md | |
| PR_FOUND=true | |
| fi | |
| fi | |
| done | |
| if [ "$PR_FOUND" = false ]; then | |
| echo "* Various improvements and bug fixes" >> release_notes.md | |
| fi | |
| echo "" >> release_notes.md | |
| # Add full changelog link | |
| if [ -n "$PREV_TAG" ]; then | |
| echo "**Full Changelog**: https://github.com/${REPO}/compare/${PREV_TAG}...v${{ needs.build-arm64.outputs.version }}" >> release_notes.md | |
| fi | |
| # Output for use in release body | |
| { | |
| echo 'notes<<EOF' | |
| cat release_notes.md | |
| echo 'EOF' | |
| } >> $GITHUB_OUTPUT | |
| - name: Download all APKs | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: apks | |
| merge-multiple: true | |
| - name: List APKs | |
| run: ls -la apks/ | |
| - name: Create GitHub Release | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| name: Huawei Manager v${{ needs.build-arm64.outputs.version }} | |
| body: | | |
| > [!WARNING] | |
| > **🇬🇧 EN** | |
| > **Files are available in the `Assets` section below 👇** | |
| > | |
| > **🇮🇩 ID** | |
| > **File download berada di bagian `Assets` di bawah 👇** | |
| ## Huawei Manager v${{ needs.build-arm64.outputs.version }} | |
| ## 📥 Quick Download | |
| > **arm64-v8a**: Untuk Android 64-bit (Rekomendasi) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-arm64-v8a.apk) | |
| > | |
| > **armeabi-v7a**: Untuk Android 32-bit (Ukuran lebih kecil) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-armeabi-v7a.apk) | |
| > | |
| >**universal**: Untuk semua perangkat (Ukuran lebih besar) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-universal.apk) | |
| ${{ steps.release_notes.outputs.notes }} | |
| --- | |
| ### 📄 File Descriptions / Deskripsi File | |
| #### 🇺🇸 EN (English) | |
| * **huawei-manager-arm64-v8a.apk** | |
| * Target: Modern & High-end devices (64-bit) | |
| * Recommended for most Android phones released after 2016 | |
| * ✅ Better performance | |
| * **huawei-manager-armeabi-v7a.apk** | |
| * Target: Older & Low-end devices (32-bit) | |
| * Use this if arm64 version fails to install | |
| * ✅ Smaller file size | |
| * **huawei-manager-universal.apk** | |
| * Target: All devices | |
| * Contains libraries for all architectures | |
| * ⚠️ Larger file size, use only if you are unsure which one to pick | |
| #### 🇮🇩 ID (Bahasa Indonesia) | |
| * **huawei-manager-arm64-v8a.apk** | |
| * Target: Perangkat Modern & High-end (64-bit) | |
| * Direkomendasikan untuk sebagian besar HP Android keluaran di atas 2016 | |
| * ✅ Performa lebih baik | |
| * **huawei-manager-armeabi-v7a.apk** | |
| * Target: Perangkat Lama & Low-end (32-bit) | |
| * Gunakan ini jika versi arm64 gagal diinstall | |
| * ✅ Ukuran file lebih kecil | |
| * **huawei-manager-universal.apk** | |
| * Target: Semua perangkat | |
| * Berisi library untuk semua arsitektur | |
| * ⚠️ Ukuran file lebih besar, gunakan hanya jika Anda ragu memilih versi | |
| ### 🔧 Installation / Instalasi | |
| #### 🇺🇸 English | |
| 1. Download the APK suitable for your device (arm64 recommended). | |
| 2. Enable "Install from unknown sources" in your Android Settings. | |
| 3. Open the downloaded file to install. | |
| #### 🇮🇩 Bahasa Indonesia | |
| 1. Download APK yang sesuai dengan perangkat Anda (arm64 direkomendasikan). | |
| 2. Aktifkan "Install from unknown sources" (Instal dari sumber tidak dikenal) di Pengaturan. | |
| 3. Buka file APK untuk menginstall. | |
| ### 💡 Notes / Catatan | |
| > **EN** | |
| > We appreciate your understanding and feedback to help improve Huawei Manager. | |
| > | |
| > **ID** | |
| > Terima kasih atas pengertian dan masukan Anda untuk membantu pengembangan Huawei Manager. | |
| files: apks/*.apk | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create Release (Manual Trigger) | |
| if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != '' | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ github.event.inputs.version }} | |
| name: Huawei Manager ${{ github.event.inputs.version }} | |
| body: | | |
| > [!WARNING] | |
| > **🇬🇧 EN** | |
| > **Files are available in the `Assets` section below 👇** | |
| > | |
| > **🇮🇩 ID** | |
| > **File download berada di bagian `Assets` di bawah 👇** | |
| ## Huawei Manager ${{ github.event.inputs.version }} | |
| ## 📥 Quick Download | |
| > **arm64-v8a**: Untuk Android 64-bit (Rekomendasi) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-arm64-v8a.apk) | |
| > | |
| > **armeabi-v7a**: Untuk Android 32-bit (Ukuran lebih kecil) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-armeabi-v7a.apk) | |
| > | |
| >**universal**: Untuk semua perangkat (Ukuran lebih besar) → [Link Download](https://github.com/alrescha79-cmd/huawei-manager-mobile/releases/latest/download/huawei-manager-universal.apk) | |
| ${{ steps.release_notes.outputs.notes }} | |
| --- | |
| ### 📄 File Descriptions / Deskripsi File | |
| #### 🇺🇸 EN (English) | |
| * **huawei-manager-arm64-v8a.apk** | |
| * Target: Modern & High-end devices (64-bit) | |
| * Recommended for most Android phones released after 2016 | |
| * ✅ Better performance | |
| * **huawei-manager-armeabi-v7a.apk** | |
| * Target: Older & Low-end devices (32-bit) | |
| * Use this if arm64 version fails to install | |
| * ✅ Smaller file size | |
| * **huawei-manager-universal.apk** | |
| * Target: All devices | |
| * Contains libraries for all architectures | |
| * ⚠️ Larger file size, use only if you are unsure which one to pick | |
| #### 🇮🇩 ID (Bahasa Indonesia) | |
| * **huawei-manager-arm64-v8a.apk** | |
| * Target: Perangkat Modern & High-end (64-bit) | |
| * Direkomendasikan untuk sebagian besar HP Android keluaran di atas 2016 | |
| * ✅ Performa lebih baik | |
| * **huawei-manager-armeabi-v7a.apk** | |
| * Target: Perangkat Lama & Low-end (32-bit) | |
| * Gunakan ini jika versi arm64 gagal diinstall | |
| * ✅ Ukuran file lebih kecil | |
| * **huawei-manager-universal.apk** | |
| * Target: Semua perangkat | |
| * Berisi library untuk semua arsitektur | |
| * ⚠️ Ukuran file lebih besar, gunakan hanya jika Anda ragu memilih versi | |
| ### 🔧 Installation / Instalasi | |
| #### 🇺🇸 English | |
| 1. Download the APK suitable for your device (arm64 recommended). | |
| 2. Enable "Install from unknown sources" in your Android Settings. | |
| 3. Open the downloaded file to install. | |
| #### 🇮🇩 Bahasa Indonesia | |
| 1. Download APK yang sesuai dengan perangkat Anda (arm64 direkomendasikan). | |
| 2. Aktifkan "Install from unknown sources" (Instal dari sumber tidak dikenal) di Pengaturan. | |
| 3. Buka file APK untuk menginstall. | |
| ### 💡 Notes / Catatan | |
| > **EN** | |
| > We appreciate your understanding and feedback to help improve Huawei Manager. | |
| > | |
| > **ID** | |
| > Terima kasih atas pengertian dan masukan Anda untuk membantu pengembangan Huawei Manager. | |
| files: apks/*.apk | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |