Skip to content

POC: try to run on the min supported version (api 21) #30

POC: try to run on the min supported version (api 21)

POC: try to run on the min supported version (api 21) #30

Workflow file for this run

# https://github.com/natario1/CameraView/blob/master/.github/workflows/build.yml
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions
# https://dev.to/edvinasbartkus/running-react-native-detox-tests-for-ios-and-android-on-github-actions-2ekn
# https://github.com/wix/Detox/issues/2617
name: Test
on: [push]
jobs:
IOS_SIMULATOR_TESTS:
# https://github.community/t/how-to-stop-github-actions-workflow-to-trigger-when-the-pull-request-is-from-dependabot-preview/116486
if: github.actor != 'dependabot[bot]'
name: iOS Simulator Tests
runs-on: macOS-14
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
- name: Configure Sentry
run: |
sed 's/%token%/${{ secrets.SENTRY_API_TOKEN }}/' ios/sentry.properties.dist > ios/sentry.properties
- name: Install dependencies to compile node-canvas
run: brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman imagemagick
- name: Install dependencies
run: yarn install --no-progress --network-timeout 100000 --network-concurrency 1
- name: Install applesimutils
run: |
brew tap wix/brew
brew install applesimutils
- name: Configure Firebase
run: |
brew install xmlstarlet
cp GoogleService-Info.plist.dist ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="CLIENT_ID"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_CLIENT_ID }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="REVERSED_CLIENT_ID"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_REVERSED_CLIENT_ID }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="API_KEY"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_API_KEY }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="GCM_SENDER_ID"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_GCM_SENDER_ID }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="PROJECT_ID"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_PROJECT_ID }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="STORAGE_BUCKET"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_STORAGE_BUCKET }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="GOOGLE_APP_ID"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_GOOGLE_APP_ID }}' ios/GoogleService-Info.plist
xmlstarlet ed --inplace --ps --update '//key[text()="DATABASE_URL"]/following-sibling::string[1]' -v '${{ secrets.FIREBASE_DATABASE_URL }}' ios/GoogleService-Info.plist
- name: Install CocoaPods plugins
run: gem install cocoapods-user-defined-build-types
- name: Cache Pods
uses: actions/cache@v2
id: cache-pods
with:
path: ios/Pods
key: pods-${{ hashFiles('**/Podfile.lock') }}
- name: Install Pods
working-directory: ios/
run: USE_FRAMEWORKS=static NO_FLIPPER=1 bundle exec pod install
- run: |
cp .env.dist .env
sed -i '' -e 's/GOOGLE_MAPS_BROWSER_KEY=/GOOGLE_MAPS_BROWSER_KEY=${{ secrets.GOOGLE_MAPS_BROWSER_KEY }}/' .env
sed -i '' -e 's/GOOGLE_MAPS_ANDROID_KEY=/GOOGLE_MAPS_ANDROID_KEY=${{ secrets.GOOGLE_MAPS_ANDROID_KEY }}/' .env
# https://vojtastavik.com/2018/09/02/what-is-inside-derived-data-xcode/
# https://discuss.circleci.com/t/sharing-xcode-derived-data-folder-across-jobs-workflows/31363/5
# https://medium.com/@bitrise/60-faster-builds-force-xcode-to-use-caching-on-bitrise-af8979ca39a6
- name: Cache XCode derived data
uses: actions/cache@v2
id: cache-xcode-derived-data
with:
path: ios/build
key: xcode-derived-data-${{ hashFiles('**/Podfile.lock') }}
- name: Build app for Detox
run: node node_modules/.bin/detox build -c ios-latest.sim.release
- name: Run Detox tests
run: node node_modules/.bin/detox test -c ios-latest.sim.release --loglevel="trace"
# Run 'applesimutils --list' to list your supported devices.
# It is advised only to specify a device type, e.g., "iPhone Xʀ" and avoid explicit search by OS version.
# - name: List supported devices
# run: applesimutils --list
# See screenshot specifications
# https://help.apple.com/app-store-connect/#/devd274dd925
# - name: Take screenshots
# if: github.ref == 'refs/heads/master'
# run: |
# node node_modules/.bin/detox test -c ios.sim.release -o e2e/screenshots.config.json --take-screenshots manual --cleanup --device-name="iPhone 11" --artifacts-location ./artifacts/6.5-inch
# node node_modules/.bin/detox test -c ios.sim.release -o e2e/screenshots.config.json --take-screenshots manual --cleanup --device-name="iPhone 8 Plus" --artifacts-location ./artifacts/5.5-inch
# node node_modules/.bin/detox test -c ios.sim.release -o e2e/screenshots.config.json --take-screenshots manual --cleanup --device-name="iPad Pro (12.9-inch) (4th generation)" --artifacts-location ./artifacts/12.9-inch
# - name: Upload screenshots artifacts
# if: github.ref == 'refs/heads/master'
# uses: actions/upload-artifact@v1
# with:
# name: detox-screenshots-ios
# path: artifacts
ANDROID_EMULATOR_TESTS:
# https://github.community/t/how-to-stop-github-actions-workflow-to-trigger-when-the-pull-request-is-from-dependabot-preview/116486
if: github.actor != 'dependabot[bot]'
name: Android Emulator Tests
runs-on: ubuntu-latest
strategy:
matrix:
EMULATOR_API_LEVEL: [34]
steps:
- uses: actions/checkout@v3
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: false
# large-packages: true
# swap-storage: true
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
- name: Decode sentry.properties file
uses: timheuer/[email protected]
with:
fileDir: "./android/"
fileName: "sentry.properties"
encodedString: ${{ secrets.SENTRY_PROPERTIES_BASE64 }}
- name: Install dependencies (yarn)
run: yarn install --no-progress --network-timeout 100000 --network-concurrency 1
- run: cp google-services.json.dist android/app/google-services.json
- name: Enable clear text traffic in release builds
run: |
sudo apt install xmlstarlet
xmlstarlet ed --inplace --ps --insert "/manifest/application" --type attr -n "android:usesCleartextTraffic" -v "true" android/app/src/main/AndroidManifest.xml
- run: cp .env.dist .env
- name: Build app for Detox
run: node node_modules/.bin/detox build -c android-latest.emu.release
env:
googleMapsApiKey: ${{ secrets.googleMapsApiKey }}
- name: Enable KVM (reactivecircus)
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: Gradle cache
uses: gradle/actions/setup-gradle@v3
- name: AVD cache
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.EMULATOR_API_LEVEL }}
- name: create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.EMULATOR_API_LEVEL }}
target: playstore
arch: x86_64
profile: pixel_6
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."
- name: List supported devices
run: avdmanager list device
- name: List emulators
run: avdmanager list avd
- name: Run Detox tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.EMULATOR_API_LEVEL }}
target: playstore
arch: x86_64
profile: pixel_6
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: |
node node_modules/.bin/detox test -c android-min.emu.release --device-name="test" --loglevel trace
# - name: Run Detox tests
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: ${{ matrix.EMULATOR_API_LEVEL }}
# target: playstore
# arch: x86_64
# profile: pixel_6
# # https://github.com/wix/Detox/blob/master/docs/Introduction.AndroidEmulatorsBestPractices.md#booting-an-emulator-via-command-line
# emulator-options: -verbose -no-window -no-snapshot -noaudio -no-boot-anim -gpu swiftshader_indirect -camera-back emulated -camera-front emulated
# disable-animations: true
# script: |
# bash -c "echo 'hw.lcd.height=2560' >> /Users/runner/.android/avd/test.avd/config.ini"
# bash -c "echo 'hw.lcd.width=1440' >> /Users/runner/.android/avd/test.avd/config.ini"
# node node_modules/.bin/detox test -c android-latest.emu.release --device-name="test" --loglevel trace
# node node_modules/.bin/detox test -c android.att.release --device-name="test" --take-screenshots all --loglevel trace
# node node_modules/.bin/detox test -c android.att.release --device-name="test" --take-screenshots manual -o e2e/screenshots.config.json --loglevel trace
# - name: Upload screenshots artifacts
# if: github.ref == 'refs/heads/master'
# uses: actions/upload-artifact@v1
# with:
# name: detox-screenshots-android
# path: artifacts