Skip to content

Add comprehensive Android testing infrastructure and Fastlane F-Droid setup with root bypass strategy #5

Add comprehensive Android testing infrastructure and Fastlane F-Droid setup with root bypass strategy

Add comprehensive Android testing infrastructure and Fastlane F-Droid setup with root bypass strategy #5

Workflow file for this run

name: Android CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x android/gradlew
- name: Run unit tests
run: |
cd android
./gradlew test --stacktrace
- name: Build debug APK
run: |
cd android
./gradlew assembleDebug --stacktrace
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: android/app/build/reports/tests/
build-fdroid:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
working-directory: android
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x android/gradlew
- name: Install Fastlane
run: |
cd android
gem install fastlane
- name: Build F-Droid release
run: |
cd android
fastlane fdroid_release
- name: Upload F-Droid APK
uses: actions/upload-artifact@v4
with:
name: fdroid-apk
path: android/fastlane/outputs/*.apk
screenshots:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
working-directory: android
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Cache AVD
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-28
- name: Create AVD and generate screenshots
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 28
target: default
arch: x86_64
profile: Nexus 6
script: |
cd android
gem install fastlane
./gradlew assembleDebug assembleDebugAndroidTest
fastlane screenshots
- name: Upload screenshots
uses: actions/upload-artifact@v4
with:
name: screenshots
path: android/fastlane/metadata/android/en-US/images/