name: Build APK on: push: branches: ["**"] pull_request: permissions: contents: read env: JAVA_VERSION: 17 jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ env.JAVA_VERSION }} cache: gradle - name: Setup Android SDK uses: android-actions/setup-android@v2 - name: Make Gradle executable run: chmod +x ./gradlew - name: Optional Keystore (if provided) env: KEYSTORE: ${{ secrets.KEYSTORE }} run: | if [ -n "$KEYSTORE" ]; then echo "$KEYSTORE" | base64 -d > signing-key.jks ls -l signing-key.jks else echo "No keystore provided, skipping..." fi - name: Assemble Debug and Release env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} GRADLE_OPTS: -Dorg.gradle.daemon=false run: | if [ -f signing-key.jks ]; then ./gradlew assembleDebug assembleRelease \ -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/signing-key.jks \ -Pandroid.injected.signing.store.password="$KEYSTORE_PASSWORD" \ -Pandroid.injected.signing.key.alias="$KEY_ALIAS" \ -Pandroid.injected.signing.key.password="$KEY_PASSWORD" else ./gradlew assembleDebug assembleRelease fi - name: Collect APKs run: | mkdir -p dist cp app/build/outputs/apk/debug/*.apk dist/ || true # Prefer signed release if produced if ls app/build/outputs/apk/release/*-signed.apk >/dev/null 2>&1; then cp app/build/outputs/apk/release/*-signed.apk dist/ else cp app/build/outputs/apk/release/*.apk dist/ fi ls -1 dist - name: Upload All APKs uses: actions/upload-artifact@v4 with: name: apks path: dist/*.apk if-no-files-found: error