Skip to content

1.5.1

1.5.1 #274

name: Android Build
on:
workflow_dispatch:
push:
branches:
- main
- master
pull_request:
release:
types:
- published
jobs:
build:
if: github.event_name != 'release'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Set up Android SDK
uses: android-actions/setup-android@v3
with:
packages: "tools platform-tools platforms;android-36 build-tools;36.0.0"
- name: Run debug unit tests
run: ./gradlew testDebugUnitTest
- name: Build debug APK
run: ./gradlew :app:assembleDebug
- name: Upload debug APK artifact
uses: actions/upload-artifact@v4
with:
name: app-debug-apk
path: app/build/outputs/apk/debug/*.apk
if-no-files-found: error
release-apk:
if: github.event_name == 'release'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Set up Android SDK
uses: android-actions/setup-android@v3
with:
packages: "tools platform-tools platforms;android-36 build-tools;36.0.0"
- name: Validate signing secrets
env:
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
missing=()
[ -n "${ANDROID_KEYSTORE_B64}" ] || missing+=("ANDROID_KEYSTORE_B64")
[ -n "${ANDROID_KEYSTORE_PASSWORD}" ] || missing+=("ANDROID_KEYSTORE_PASSWORD")
[ -n "${ANDROID_KEY_ALIAS}" ] || missing+=("ANDROID_KEY_ALIAS")
[ -n "${ANDROID_KEY_PASSWORD}" ] || missing+=("ANDROID_KEY_PASSWORD")
if [ "${#missing[@]}" -gt 0 ]; then
echo "Missing required GitHub secrets: ${missing[*]}"
exit 1
fi
- name: Decode release keystore
run: printf '%s' "${{ secrets.ANDROID_KEYSTORE_B64 }}" | base64 --decode > "${{ runner.temp }}/release.keystore"
- name: Validate keystore and alias
env:
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
run: |
keytool -list \
-keystore "${{ runner.temp }}/release.keystore" \
-storepass "${ANDROID_KEYSTORE_PASSWORD}" \
-alias "${ANDROID_KEY_ALIAS}" > /dev/null
- name: Build release APK
env:
ANDROID_KEYSTORE_PATH: ${{ runner.temp }}/release.keystore
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: ./gradlew :app:assembleRelease
- name: Resolve signed APK
run: |
ls -la app/build/outputs/apk/release
SIGNED_APK="$(find app/build/outputs/apk/release -maxdepth 1 -type f -name '*.apk' ! -name '*-unsigned.apk' | head -n 1)"
if [ -z "${SIGNED_APK}" ]; then
echo "No signed APK was produced."
exit 1
fi
echo "SIGNED_APK=${SIGNED_APK}" >> "${GITHUB_ENV}"
- name: Attach APK to GitHub release
uses: softprops/action-gh-release@v2
with:
files: ${{ env.SIGNED_APK }}