Skip to content

Build APKs (Preview) #218

Build APKs (Preview)

Build APKs (Preview) #218

Workflow file for this run

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