Skip to content

Commit a327515

Browse files
author
Krzysztof Borowy
committed
improve android e2e
1 parent f2cfcd5 commit a327515

File tree

4 files changed

+59
-77
lines changed

4 files changed

+59
-77
lines changed

.circleci/Brewfile.android

Lines changed: 0 additions & 3 deletions
This file was deleted.

.circleci/config.yml

Lines changed: 36 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,35 @@ checkout step for each job: &addWorkspace
1818
default config for js: &js_defaults
1919
<<: *defaults
2020
docker:
21-
- image: circleci/node:14
21+
- image: cimg/node:14.18.1
2222

2323
default config for macOS: &macos_defaults
2424
<<: *defaults
2525
resource_class: 'medium'
2626
macos:
27-
xcode: '13.2.1'
27+
xcode: '13.1.0'
2828

29-
config for macOS (android): &macos_defaults_android
29+
config for android e2e: &android_e2e
3030
<<: *defaults
31-
resource_class: 'medium'
32-
macos:
33-
xcode: '11.5.0'
31+
resource_class: medium+
32+
machine:
33+
image: android:2022.06.2
3434

3535
default config for android apk builds: &android_defaults
3636
<<: *defaults
3737
docker:
38-
- image: reactnativecommunity/react-native-android
39-
resource_class: 'medium'
40-
working_directory: ~/async_storage
38+
- image: cimg/android:2021.10.2-node # node 14.18.1
39+
resource_class: medium+
4140
environment:
42-
- _JAVA_OPTIONS: '-XX:+UnlockExperimentalVMOptions -Xmx2048m'
43-
- BUILD_THREADS: 2
41+
JAVA_OPTIONS: '-XX:+UnlockExperimentalVMOptions -Xmx2048m'
42+
BUILD_THREADS: 2
4443

4544
# ==============================
4645
# CACHE CONFIG
4746
# ==============================
4847

4948
cache keys:
5049
brew ios: &key_brew_ios cache-brew-ios-v5-{{ arch }}
51-
brew android: &key_brew_android cache-brew-android-v4-{{ arch }}
5250
yarn: &key_yarn cache-yarn-{{ checksum "package.json" }}-{{ arch }}
5351
gradle: &key_gradle cache-gradle-v2-{{ checksum "example/android/gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "package.json" }}-{{ arch }}
5452
pods: &key_pods cache-pods-v0.64-{{ checksum "example/ios/Podfile" }}-{{ checksum "package.json" }}-{{ arch }}
@@ -66,17 +64,6 @@ cache:
6664
keys:
6765
- *key_brew_ios
6866

69-
save brew cache for android: &cache_save_brew_android
70-
name: Saving Brew cache for android
71-
paths:
72-
- ~/Library/Caches/Homebrew
73-
key: *key_brew_android
74-
75-
restore brew cache for android: &cache_restore_brew_android
76-
name: Restoring Brew cache for android
77-
keys:
78-
- *key_brew_android
79-
8067
# yarn
8168
save yarn cache: &cache_save_yarn
8269
name: Saving Yarn cache
@@ -229,71 +216,48 @@ jobs:
229216
- example/android/app/build/outputs/apk/*
230217

231218
"Test: Android e2e":
232-
<<: *macos_defaults_android
219+
<<: *android_e2e
233220
steps:
234221
- *addWorkspace
235222
- run:
236-
name: Configure env variables
223+
name: "Install node v14.18.1 and yarn 1.22.17"
237224
command: |
238-
echo 'export ANDROID_HOME="/usr/local/share/android-sdk"' >> $BASH_ENV
239-
echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> $BASH_ENV
240-
echo 'export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH"' >> $BASH_ENV
241-
echo 'export QEMU_AUDIO_DRV=none' >> $BASH_ENV
242-
echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> $BASH_ENV
243-
source $BASH_ENV
244-
- restore-cache: *cache_restore_brew_android
225+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
226+
source ~/.bashrc
227+
nvm install v14.18.1
228+
node -v
229+
npm install --global yarn@1.22.17
230+
yarn -v
231+
- restore_cache: *cache_restore_yarn
245232
- run:
246-
name: Install Android SDK tools
247-
command: |
248-
brew update --preinstall
249-
brew bundle --file=.circleci/Brewfile.android --no-lock
250-
- save-cache: *cache_save_brew_android
233+
name: Install dependencies
234+
command: yarn --pure-lockfile --non-interactive --cache-folder ~/.cache/yarn
235+
- save_cache: *cache_save_yarn
251236
- run:
252-
name: Install Android emulator
253-
shell: /bin/bash -e
237+
name: Configure Environment Variables
254238
command: |
255-
yes | sdkmanager "platform-tools" "tools" 1> /dev/null
256-
yes | sdkmanager "platforms;android-28" "system-images;android-28;default;x86_64" 1> /dev/null
257-
yes | sdkmanager "emulator" --channel=3 1> /dev/null
258-
yes | sdkmanager "build-tools;28.0.3" 1> /dev/null
259-
yes | sdkmanager --licenses 1> /dev/null
260-
yes | sdkmanager --list
239+
echo 'export QEMU_AUDIO_DRV=none' >> $BASH_ENV
240+
echo 'export PATH="$PATH:~/async_storage/node_modules/.bin"' >> $BASH_ENV
241+
source $BASH_ENV
261242
- run:
262-
name: ADB start/stop
243+
name: Install Android system image
263244
command: |
264-
adb start-server
265-
adb devices
266-
adb kill-server
267-
ls -la ~/.android
245+
sdkmanager "system-images;android-30;default;x86_64"
268246
- run:
269-
name: Create emulator
247+
name: "Create Android emulator"
270248
command: |
271-
avdmanager create avd --force \
272-
-n "Emu_E2E" \
273-
-k "system-images;android-28;default;x86_64" \
274-
-g "default" \
275-
-d "pixel"
249+
avdmanager create avd -n E2E_API_30 -d pixel_4 --package "system-images;android-30;default;x86_64"
276250
- run:
277-
name: Start emulator in background
278-
background: true
251+
name: Launch emulator
279252
command: |
280-
emulator -avd "Emu_E2E" \
281-
-cores 1 \
282-
-gpu auto \
283-
-accel on \
284-
-memory 1024 \
285-
-no-audio \
286-
-no-snapshot \
287-
-no-boot-anim \
288-
-no-window \
289-
-logcat '*:E ReactNative:W ReactNativeJS:*'
253+
emulator -avd E2E_API_30 -delay-adb -verbose -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
254+
background: true
255+
- run:
256+
name: "Make sure TestButler apk is present"
257+
command: ./scripts/android_e2e.sh 'install_test_butler'
290258
- run:
291259
name: Wait for emulator to boot
292260
command: ./scripts/android_e2e.sh 'wait_for_emulator'
293-
- run:
294-
name: Wake device
295-
command: |
296-
adb shell input keyevent 82
297261
- run:
298262
name: Run e2e tests
299263
command: yarn test:e2e:android

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,17 @@
120120
"testBinaryPath": "example/android/app/build/outputs/apk/androidTest/release/app-release-androidTest.apk",
121121
"type": "android.emulator",
122122
"device": {
123-
"avdName": "Emu_E2E"
123+
"avdName": "E2E_API_30",
124+
"utilBinaryPaths": ["/var/tmp/test-butler.apk"]
124125
}
125126
},
126127
"android.emu.release.next": {
127128
"binaryPath": "example/android/app/build/outputs/apk/next/app-next.apk",
128129
"testBinaryPath": "example/android/app/build/outputs/apk/androidTest/release/app-release-androidTest.apk",
129130
"type": "android.emulator",
130131
"device": {
131-
"avdName": "Emu_E2E"
132+
"avdName": "E2E_API_30",
133+
"utilBinaryPaths": ["/var/tmp/test-butler.apk"]
132134
}
133135
}
134136
}

scripts/android_e2e.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,22 @@ wait_for_emulator_to_boot() {
4040
echo "[Detox e2e] Emulator booted."
4141
}
4242

43+
install_test_butler() {
44+
apkPath=/var/tmp/test-butler.apk
45+
46+
if [ -f $apkPath ]; then
47+
echo "[Detox e2e] TestButler apk exists, skipping"
48+
else
49+
curl -o $apkPath "https://repo1.maven.org/maven2/com/linkedin/testbutler/test-butler-app/2.2.1/test-butler-app-2.2.1.apk"
50+
echo
51+
echo "[Detox e2e] TestButler app saved to $apkPath"
52+
fi
53+
}
54+
55+
56+
57+
58+
4359

4460
case $1 in
4561
wait_for_emulator)
@@ -51,6 +67,9 @@ case $1 in
5167
bundle)
5268
shift; bundle_js $@
5369
;;
70+
install_test_butler)
71+
install_test_butler
72+
;;
5473
*)
5574
echo -n "Unknown argument: $1"
5675
;;

0 commit comments

Comments
 (0)