Build APKs (Preview) #218
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 APKs (Preview) | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| # Reads the version info and appends the short commit SHA so the preview APK is traceable. | |
| prepare: | |
| name: Read Version Info | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version_name: ${{ steps.version.outputs.version_name }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Extract version name with commit SHA appended | |
| id: version | |
| run: | | |
| BASE_VERSION_NAME=$(grep -oP 'versionName "\K[^"]*' music/build.gradle) | |
| COMMIT_ID=$(git rev-parse --short HEAD) | |
| VERSION_NAME="${BASE_VERSION_NAME}-${COMMIT_ID}" | |
| echo "version_name=$VERSION_NAME" >> $GITHUB_OUTPUT | |
| # Each arch is built in its own job using a Gradle init script that overrides | |
| # the foss flavor's abiFilters. This avoids android.injected.build.abi, which | |
| # would stamp the APK as testOnly and make it uninstallable on real devices. | |
| build-arm64-v8a: | |
| name: Build arm64-v8a | |
| runs-on: ubuntu-latest | |
| needs: prepare | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Java and Android SDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| - name: Decode keystore | |
| uses: timheuer/base64-to-file@v1 | |
| with: | |
| fileName: 'keystore/key.jks' | |
| encodedString: ${{ secrets.SIGN_KEY }} | |
| - name: Accept Android SDK licenses | |
| run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses | |
| - name: Build arm64-v8a release APK | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean assembleFossRelease \ | |
| --init-script .github/init-scripts/abi-arm64-v8a.gradle \ | |
| --no-build-cache --rerun-tasks | |
| env: | |
| SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} | |
| - name: Rename APK to felicity-foss-arm64-v8a.apk | |
| run: | | |
| mkdir -p ${{ runner.temp }}/apks | |
| APK=$(find music/ -name "*.apk" | head -n 1) | |
| mv "$APK" "${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk" | |
| - name: Upload arm64-v8a APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: felicity-foss-arm64-v8a-${{ needs.prepare.outputs.version_name }} | |
| path: ${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk | |
| if-no-files-found: error | |
| build-x86_64: | |
| name: Build x86_64 | |
| runs-on: ubuntu-latest | |
| needs: prepare | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Java and Android SDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| - name: Decode keystore | |
| uses: timheuer/base64-to-file@v1 | |
| with: | |
| fileName: 'keystore/key.jks' | |
| encodedString: ${{ secrets.SIGN_KEY }} | |
| - name: Accept Android SDK licenses | |
| run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses | |
| - name: Build x86_64 release APK | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean assembleFossRelease \ | |
| --init-script .github/init-scripts/abi-x86_64.gradle \ | |
| --no-build-cache --rerun-tasks | |
| env: | |
| SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} | |
| - name: Rename APK to felicity-foss-x86_64.apk | |
| run: | | |
| mkdir -p ${{ runner.temp }}/apks | |
| APK=$(find music/ -name "*.apk" | head -n 1) | |
| mv "$APK" "${{ runner.temp }}/apks/felicity-foss-x86_64.apk" | |
| - name: Upload x86_64 APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: felicity-foss-x86_64-${{ needs.prepare.outputs.version_name }} | |
| path: ${{ runner.temp }}/apks/felicity-foss-x86_64.apk | |
| if-no-files-found: error | |
| build-armeabi-v7a: | |
| name: Build armeabi-v7a | |
| runs-on: ubuntu-latest | |
| needs: prepare | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Java and Android SDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| - name: Decode keystore | |
| uses: timheuer/base64-to-file@v1 | |
| with: | |
| fileName: 'keystore/key.jks' | |
| encodedString: ${{ secrets.SIGN_KEY }} | |
| - name: Accept Android SDK licenses | |
| run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses | |
| - name: Build armeabi-v7a release APK | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean assembleFossRelease \ | |
| --init-script .github/init-scripts/abi-armeabi-v7a.gradle \ | |
| --no-build-cache --rerun-tasks | |
| env: | |
| SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} | |
| - name: Rename APK to felicity-foss-armeabi-v7a.apk | |
| run: | | |
| mkdir -p ${{ runner.temp }}/apks | |
| APK=$(find music/ -name "*.apk" | head -n 1) | |
| mv "$APK" "${{ runner.temp }}/apks/felicity-foss-armeabi-v7a.apk" | |
| - name: Upload armeabi-v7a APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: felicity-foss-armeabi-v7a-${{ needs.prepare.outputs.version_name }} | |
| path: ${{ runner.temp }}/apks/felicity-foss-armeabi-v7a.apk | |
| if-no-files-found: error | |
| build-x86: | |
| name: Build x86 | |
| runs-on: ubuntu-latest | |
| needs: prepare | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Java and Android SDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| - name: Decode keystore | |
| uses: timheuer/base64-to-file@v1 | |
| with: | |
| fileName: 'keystore/key.jks' | |
| encodedString: ${{ secrets.SIGN_KEY }} | |
| - name: Accept Android SDK licenses | |
| run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses | |
| - name: Build x86 release APK | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean assembleFossRelease \ | |
| --init-script .github/init-scripts/abi-x86.gradle \ | |
| --no-build-cache --rerun-tasks | |
| env: | |
| SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} | |
| - name: Rename APK to felicity-foss-x86.apk | |
| run: | | |
| mkdir -p ${{ runner.temp }}/apks | |
| APK=$(find music/ -name "*.apk" | head -n 1) | |
| mv "$APK" "${{ runner.temp }}/apks/felicity-foss-x86.apk" | |
| - name: Upload x86 APK | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: felicity-foss-x86-${{ needs.prepare.outputs.version_name }} | |
| path: ${{ runner.temp }}/apks/felicity-foss-x86.apk | |
| if-no-files-found: error | |