Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(react-native-example): upgrade example app & fix detox tests #231

Merged
merged 9 commits into from
Dec 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
298 changes: 134 additions & 164 deletions .github/workflows/ci-detox-android.yml
Original file line number Diff line number Diff line change
@@ -1,164 +1,134 @@
# name: ci-detox-android

# on:
# pull_request:
# branches:
# - master

# jobs:
# java-wrapper:
# name: Build Java Wrapper
# runs-on: ubuntu-latest
# defaults:
# run:
# working-directory: ./wrappers/react-native
# steps:
# - name: Checkout
# uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # [email protected]

# - name: Setup rust toolchain
# uses: actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # [email protected]
# with:
# profile: minimal
# toolchain: stable
# override: true

# - name: Set up JDK 11
# uses: actions/setup-java@v2
# with:
# java-version: "11"
# distribution: "adopt"

# - name: Cache Gradle packages
# uses: actions/cache@v2
# with:
# path: |
# ~/.gradle/caches
# ~/.gradle/wrapper
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
# restore-keys: |
# ${{ runner.os }}-gradle-

# - name: Build Libraries for Android
# run: yarn build:android

# - name: Cleanup Gradle Cache
# # Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# # Restoring these files from a GitHub Actions cache might cause problems for future builds.
# run: |
# rm -f ~/.gradle/caches/modules-2/modules-2.lock
# rm -f ~/.gradle/caches/modules-2/gc.properties

# - name: Archive build artifacts
# if: success()
# uses: actions/upload-artifact@v3
# with:
# name: ci-detox-android-artifacts-libs-${{ github.sha }}
# path: wrappers/react-native/android/lib
# retention-days: 1

# android:
# name: Detox Android E2E Testing
# needs: [java-wrapper]
# runs-on: macos-latest
# # strategy:
# # matrix:
# # runners: [[self-hosted, macos, general, ARM64]]
# # concurrency:
# # group: ci-detox-android-${{ matrix.runners }}-${{ github.head_ref || github.run_id}}
# # cancel-in-progress: true
# # timeout-minutes: 60

# env:
# NODE_OPTIONS: "--max-old-space-size=5120"

# defaults:
# run:
# working-directory: wrappers/react-native
# shell: zsh -il {0} # load ~/.zshrc

# steps:
# - name: Checkout
# uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # [email protected]

# - name: Setup Node
# uses: actions/setup-node@v3
# with:
# node-version: 18.x
# registry-url: https://registry.npmjs.org

# - name: Download Android Libraries
# uses: actions/download-artifact@v3
# with:
# name: ci-detox-android-artifacts-libs-${{ github.sha }}
# path: wrappers/react-native/android/lib

# - name: Inspect Android Libraries
# run: ls -R android/lib

# - name: Install Dependencies
# run: yarn install --frozen-lockfile

# - name: Example App Install Dependencies
# working-directory: wrappers/react-native/example
# run: yarn install --frozen-lockfile



# - name: Use specific Java version for sdkmanager to work
# uses: joschi/setup-jdk@v1
# with:
# java-version: 'openjdk8'
# architecture: 'x64'

# - name: Download Android Emulator Image
# run: |
# echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-29;google_apis;x86"
# echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd --force --name emu --device "Nexus 5X" -k 'system-images;android-29;google_apis;x86'
# $ANDROID_HOME/emulator/emulator -list-avds


# # - name: Config self hosted env
# # run: |
# # echo "ANDROID_HOME=/Users/runner/Library/Android/sdk" >> $GITHUB_ENV
# # echo "ANDROID_SDK_ROOT=/Users/runner/Library/Android/sdk" >> $GITHUB_ENV

# # - name: Download Android Build Tools
# # timeout-minutes: 5
# # run: |
# # echo "y" | $ANDROID_SDK_ROOT/tools/bin/sdkmanager --install "build-tools;31.0.0"
# # cd $ANDROID_SDK_ROOT/build-tools/31.0.0/
# # ln -sf d8 dx
# # cd lib
# # ln -sf d8.jar dx.jar

# # - name: Download Android Emulator Image
# # run: |
# # echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-29;google_apis;x86"
# # echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd --force --name Nexus_5X_API_29 --device "Nexus 5X" -k 'system-images;android-29;google_apis;x86'
# # $ANDROID_HOME/emulator/emulator -list-avds

# # - name: Setup Java
# # uses: actions/setup-java@v2
# # with:
# # java-version: "11"
# # distribution: "adopt"

# - name: Detox Build Android Configuration
# working-directory: wrappers/react-native
# run: yarn detox:build:android

# - name: Inspect Linked Libraries
# run: ls -R android/src/main/jniLibs

# - name: Detox E2E Test
# working-directory: wrappers/react-native
# run: yarn detox:android:ci

# - name: Archive detox failed test results
# if: failure()
# uses: actions/upload-artifact@v3
# with:
# name: detox-artifacts-${{ github.sha }}
# path: wrappers/react-native/example/detox-artifacts
# retention-days: 1
name: ci-detox-android

on:
pull_request:
branches:
- master

jobs:
java-wrapper:
name: Build Java Wrapper
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./wrappers/react-native
steps:
- name: Checkout
uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # [email protected]

- name: Setup rust toolchain
uses: actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # [email protected]
with:
profile: minimal
toolchain: stable
override: true

- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: "11"
distribution: "adopt"

- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Build Libraries for Android
run: yarn build:android

- name: Cleanup Gradle Cache
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties

- name: Archive build artifacts
if: success()
uses: actions/upload-artifact@v3
with:
name: ci-detox-android-artifacts-libs-${{ github.sha }}
path: wrappers/react-native/android/lib
retention-days: 1

android:
name: Detox Android E2E Testing
needs: [java-wrapper]
runs-on: ubuntu-latest

thomas-pearson-mattr marked this conversation as resolved.
Show resolved Hide resolved
env:
NODE_OPTIONS: "--max-old-space-size=5120"

defaults:
run:
working-directory: wrappers/react-native

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18.x
registry-url: https://registry.npmjs.org
thomas-pearson-mattr marked this conversation as resolved.
Show resolved Hide resolved

- name: Download Android Libraries
uses: actions/download-artifact@v3
with:
name: ci-detox-android-artifacts-libs-${{ github.sha }}
path: wrappers/react-native/android/lib

- name: Inspect Android Libraries
run: ls -R android/lib

- name: Install Dependencies
run: yarn install --frozen-lockfile

- name: Example App Install Dependencies
working-directory: wrappers/react-native/example
run: yarn install --frozen-lockfile

- name: Enable Hardware accelerated Android virtualization
# Recommended by ReactiveCircus to speed up running emulators
# https://github.com/ReactiveCircus/android-emulator-runner/blob/main/README.md#running-hardware-accelerated-emulators-on-linux-runners
# https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
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: Build Android Detox Example
working-directory: wrappers/react-native
run: yarn detox:build:android

- name: Start Android Emulator
uses: reactivecircus/android-emulator-runner@v2
with:
working-directory: wrappers/react-native
target: google_apis
api-level: 29
ram-size: 4096M
channel: stable
arch: x86_64
emulator-port: 5556
avd-name: Nexus_5X_API_29
force-avd-creation: true # https://github.com/ReactiveCircus/android-emulator-runner/issues/385#issuecomment-2339191348
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-boot-timeout: 12000
disable-animations: true
script: yarn detox:android:ci

- name: Archive detox failed test results
if: failure()
uses: actions/upload-artifact@v3
with:
name: detox-artifacts-${{ github.sha }}
path: wrappers/react-native/example/detox-artifacts
retention-days: 1
Loading
Loading