name: E2E Android on: pull_request: paths: - .github/workflows/e2e-android.yml - apps/common/example/** - android/** - src/** - e2e/** - package.json # push: # branches: # - main workflow_dispatch: jobs: test: runs-on: macos-12 timeout-minutes: 60 env: WORKING_DIRECTORY: paper-example API_LEVEL: 34 SYSTEM_IMAGES: system-images;android-34;google_apis;x86_64 AVD_NAME: rn-svg-avd concurrency: group: android-e2e-example-${{ github.ref }} cancel-in-progress: true steps: - name: checkout uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-node@v3 with: node-version: 18 cache: 'yarn' - name: Set up JDK 17 uses: actions/setup-java@v2 with: java-version: '17' distribution: 'zulu' cache: 'gradle' - name: Install NDK uses: nttld/setup-ndk@v1 id: setup-ndk with: ndk-version: r26d local-cache: true - name: Set ANDROID_NDK run: echo "ANDROID_NDK=$ANDROID_HOME/ndk-bundle" >> $GITHUB_ENV - name: Cache SDK image id: cache-sdk-img uses: actions/cache@v3 with: path: $ANDROID_HOME/system-images/ key: ${{ runner.os }}-build-system-images-${{ env.SYSTEM_IMAGES }} - name: SKDs - download required images if: ${{ steps.cache-sdd-img.outputs.cache-hit != 'true' }} run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "system-images;android-34;google_apis;x86_64" - name: Cache AVD id: cache-avd uses: actions/cache@v3 with: path: ~/.android/avd/${{ env.AVD_NAME }}.avd key: ${{ runner.os }}-avd-images-${{ env.SYSTEM_IMAGES }}-${{ env.AVD_NAME }} - name: Emulator - Create if: ${{ steps.cache-avd.outputs.cache-hit != 'true' }} run: $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n ${{ env.AVD_NAME }} --device 28 --package "${{ env.SYSTEM_IMAGES }}" --sdcard 512M - name: Emulator - Set screen settings if: ${{ steps.cache-avd.outputs.cache-hit != 'true' }} run: | echo "AVD config path: $HOME/.android/avd/${{ env.AVD_NAME }}.avd/config.ini" sed -i '' 's/.*hw\.lcd\.density.*/hw\.lcd\.density = 480/g' $HOME/.android/avd/${{ env.AVD_NAME }}.avd/config.ini sed -i '' 's/.*hw\.lcd\.width.*/hw\.lcd\.width = 1344/g' $HOME/.android/avd/${{ env.AVD_NAME }}.avd/config.ini sed -i '' 's/.*hw\.lcd\.height.*/hw\.lcd\.height = 2992/g' $HOME/.android/avd/${{ env.AVD_NAME }}.avd/config.ini - name: Emulator - Boot run: $ANDROID_HOME/emulator/emulator -memory 4096 -avd ${{ env.AVD_NAME }} -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim & - name: ADB Wait For Device run: adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;' timeout-minutes: 10 - name: Reverse TCP working-directory: apps/${{ env.WORKING_DIRECTORY }} run: adb devices | grep '\t' | awk '{print $1}' | sed 's/\\s//g' | xargs -I {} adb -s {} reverse tcp:8081 tcp:8081 - name: Install root node dependencies run: yarn - name: Install example app node dependencies run: yarn working-directory: apps/${{ env.WORKING_DIRECTORY }} - name: Build Android app working-directory: apps/${{ env.WORKING_DIRECTORY }}/android run: ./gradlew assembleDebug - name: Start Metro server working-directory: apps/${{ env.WORKING_DIRECTORY }} run: E2E=true yarn start &> output.log & - name: Install APK run: adb install -r apps/${{ env.WORKING_DIRECTORY }}/android/app/build/outputs/apk/debug/app-debug.apk - name: Launch APK run: 'while ! (adb shell monkey -p com.example 1 | grep -q "Events injected: 1"); do sleep 1; echo "Retrying due to errors in previous run..."; done' - name: Run e2e Tests run: E2E=true yarn e2e - name: Upload test report uses: actions/upload-artifact@v4 with: name: report path: | report.html jest-html-reporters-attach/ - name: Kill emulator (so it can be cached safely) run: adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done