| name: Run instrumentation tests |
| |
| on: |
| push: |
| branches: |
| - android* |
| pull_request: |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
| cancel-in-progress: true |
| |
| jobs: |
| instrumentation_tests: |
| runs-on: macos-11 |
| strategy: |
| fail-fast: false |
| matrix: |
| android_target: [33, 34] |
| emulator_type: [default, google_apis] |
| exclude: |
| - android_target: 34 |
| emulator_type: default |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v3 |
| |
| - uses: actions/setup-java@v3 |
| with: |
| distribution: 'adopt' |
| java-version: '17' |
| cache: 'gradle' |
| |
| - name: AVD cache |
| uses: actions/cache@v3 |
| id: avd-cache |
| with: |
| path: | |
| ~/.android/avd/* |
| ~/.android/adb* |
| key: aosp-${{ matrix.emulator_type }}-${{ matrix.android_target }}-${{ runner.os }} |
| |
| - name: Build Release APK |
| run: ./gradlew :app:assembleRelease |
| |
| - name: Create AVD snapshot |
| if: steps.avd-cache.outputs.cache-hit != 'true' |
| uses: reactivecircus/android-emulator-runner@v2 |
| with: |
| api-level: ${{ matrix.android_target }} |
| target: ${{ matrix.emulator_type }} |
| arch: x86_64 |
| force-avd-creation: false |
| emulator-options: -writable-system -no-snapshot-load -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none |
| disable-animations: true |
| script: | |
| ./app/development/scripts/provision_emulator.sh "test" "system-images;android-${{ matrix.android_target }};${{ matrix.emulator_type }};x86_64" |
| echo "Generated AVD snapshot for caching." |
| |
| - name: Assemble tests |
| run: ./gradlew :app:assembleAndroidTest |
| |
| - name: Run tests |
| uses: reactivecircus/android-emulator-runner@v2 |
| with: |
| api-level: ${{ matrix.android_target }} |
| target: ${{ matrix.emulator_type }} |
| arch: x86_64 |
| force-avd-creation: false |
| emulator-options: -writable-system -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none |
| profile: pixel_6a |
| heap-size: '512M' |
| ram-size: '4096M' |
| disk-size: '14G' |
| sdcard-path-or-size: '4096M' |
| cores: 3 |
| disable-animations: false |
| script: | |
| adb root |
| sleep 5 |
| adb remount |
| |
| echo "Installing Seedvault app..." |
| adb shell mkdir -p /system/priv-app/Seedvault |
| adb push app/build/outputs/apk/release/app-release.apk /system/priv-app/Seedvault/Seedvault.apk |
| |
| echo "Installing Seedvault permissions..." |
| adb push permissions_com.stevesoltys.seedvault.xml /system/etc/permissions/privapp-permissions-seedvault.xml |
| adb push allowlist_com.stevesoltys.seedvault.xml /system/etc/sysconfig/allowlist-seedvault.xml |
| |
| echo "Setting Seedvault transport..." |
| sleep 10 |
| adb shell bmgr transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport |
| |
| wget --quiet https://github.com/seedvault-app/seedvault-test-data/releases/download/1/backup.tar.gz |
| adb shell mkdir -p /sdcard/seedvault_baseline |
| adb push backup.tar.gz /sdcard/seedvault_baseline |
| adb wait-for-device |
| adb shell tar xzf /sdcard/seedvault_baseline/backup.tar.gz --directory=/sdcard/seedvault_baseline |
| adb shell rm /sdcard/seedvault_baseline/backup.tar.gz |
| |
| large_test_exit_code=0 |
| ./gradlew --stacktrace -Pinstrumented_test_size=large :app:connectedAndroidTest || large_test_exit_code=$? |
| |
| medium_test_exit_code=0 |
| ./gradlew --stacktrace -Pinstrumented_test_size=medium :app:connectedAndroidTest || medium_test_exit_code=$? |
| |
| adb pull /sdcard/seedvault_test_videos |
| |
| if [ $large_test_exit_code -ne 0 ]; then echo 'Gradle test failed.'; exit 0; fi |
| if [ $medium_test_exit_code -ne 0 ]; then echo 'Gradle test failed.'; exit 0; fi |
| |
| - name: Upload screenshots and videos |
| if: always() |
| uses: actions/upload-artifact@v3 |
| with: |
| name: seedvault_test_videos |
| path: seedvault_test_videos/**/*.mp4 |