Skip to content

Data layer integration tests #68

Data layer integration tests

Data layer integration tests #68

name: Data layer integration tests
on:
workflow_dispatch:
merge_group:
push:
branches:
- 'develop'
pull_request:
concurrency:
group: 'ci-${{ github.event.merge_group.head_ref || github.head_ref }}-${{ github.workflow }}'
cancel-in-progress: true
jobs:
data-layer-integration-tests:
name: Data layer integration tests run against Firebase emulator in Docker
# Use macos because GH linux runners don't have nested virtualization
# Which is required to use gradle managed devices
runs-on: macos-latest
strategy:
matrix:
# api-level: [ 30 ]
# target: [ google_apis ]
include:
- api-level: 30
target: google_atd
steps:
# Docker can't be pre-installed on macos due to licensing issues so this is a workaround
- name: Setup docker on macos
run: |
brew install docker
colima start
docker --version # Sanity check
- name: Install coreutils
run: |
brew install coreutils
timeout --version
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Setup gradle
uses: gradle/gradle-build-action@v2
with:
cache-read-only: false
- name: AVD cache
uses: actions/cache@v3
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.api-level }}-${{ matrix.target }}
- name: create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
profile: "Galaxy Nexus"
api-level: ${{ matrix.api-level }}
target: ${{ matrix.target }}
force-avd-creation: false
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: false
script: echo "Generated AVD snapshot for caching."
## Build before running tests
- name: Build instrumented integration tests
uses: gradle/gradle-build-action@v2
with:
arguments: |
:app:packageDebug :integration-tests:firebase:packageDebug
cache-read-only: false
- name: Start Firebase emulator and wait for it to be ready
id: start-emulator
run: scripts/start-firebase-emulator-in-docker-and-wait-for-ready.sh
- name: Run instrumented integration tests
uses: reactivecircus/android-emulator-runner@v2
with:
profile: "Galaxy Nexus"
api-level: ${{ matrix.api-level }}
target: ${{ matrix.target }}
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
# Workaround for https://github.com/ReactiveCircus/android-emulator-runner/issues/319
script: adb uninstall "com.omricat.maplibrarian.integration-testing.debug"; ./gradlew :integration-tests:firebase:connectedCheck --continue --stacktrace
- name: Extract logs from firebase emulator container
if: ${{ always() }}
run: |
mkdir -p ./build/logs/firebase-emulator
docker cp "firebase-emulator:/home/firebase-emulator" ./build/logs/firebase-emulator
- name: Upload firebase emulator logs
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: firebase-debug-logs-api-${{ matrix.api-level }}-${{ matrix.target }}
path: ./build/logs/firebase-emulator/**/*.log
- name: Upload test results
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: instrumentation-test-results-api-${{ matrix.api-level }}-${{ matrix.target }}
path: ./**/build/reports/androidTests/connected/**