-
Notifications
You must be signed in to change notification settings - Fork 272
177 lines (148 loc) · 5.69 KB
/
e2e-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
name: RN Stripe
on:
push:
branches: [master]
pull_request:
branches: ['**']
jobs:
test-android:
name: e2e-android-test
runs-on: ubuntu-24.04
env:
MAESTRO_CLI_ANALYSIS_NOTIFICATION_DISABLED: true
steps:
- name: Delete unnecessary tools 🔧
uses: jlumbroso/free-disk-space@v1.3.1
with:
android: false # Don't remove Android tools
tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY"
dotnet: true # rm -rf /usr/share/dotnet
haskell: true # rm -rf /opt/ghc...
swap-storage: true # rm -f /mnt/swapfile (4GiB)
docker-images: false # Takes 16s, enable if needed in the future
large-packages: false # includes google-cloud-sdk and it's slow
# Enable KVM to be able to use hardware accelerated emulators.
# https://github.com/ReactiveCircus/android-emulator-runner?tab=readme-ov-file#running-hardware-accelerated-emulators-on-linux-runners
- name: Enable KVM group perms
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
ls /dev/kvm
- name: checkout
uses: actions/checkout@v4
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install React Native CLI
run: npm install react-native-cli
- name: Install Dependencies
run: yarn bootstrap-no-pods
- name: Setup Java environment
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'
- name: Gradle cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('**/buildSrc/**/*.kt') }}
- name: Install Maestro CLI
run: curl -Ls "https://get.maestro.mobile.dev" | bash
- name: Add Maestro to path
run: echo "${HOME}/.maestro/bin" >> $GITHUB_PATH
- name: Run Android Emulator and app
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 33
# This build is the most stable for API 33. Others appear to have a significant amount of ColorBuffer emulator errors.
# While those errors don't affect the test outcome, best to be on the most stable build.
emulator-build: 11237101
arch: x86_64
target: google_apis
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: |
# Wait for system to settle
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done'
# Retry once if necessary
yarn run-example-android:release || (sleep 60 && yarn run-example-android:release)
yarn test:e2e:android
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: maestro-artifacts-android
path: /Users/runner/.maestro/tests/**
test-ios:
name: e2e-ios-test
# Silicon chips run through the iOS tests much faster
runs-on: macos-15-xlarge
env:
MAESTRO_DRIVER_STARTUP_TIMEOUT: 300_000 # 5 minutes
MAESTRO_CLI_ANALYSIS_NOTIFICATION_DISABLED: true
steps:
- name: checkout
uses: actions/checkout@v4
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('example/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- uses: actions/cache@v4
with:
path: example/ios/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('example/ios/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install React Native CLI
run: npm install react-native-cli
- name: Install Dependencies
run: yarn bootstrap-no-pods
- name: Generate bundle
run: yarn example build:ios
- name: Install Pods
run: yarn pods
- name: Install Maestro CLI
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
brew tap facebook/fb
brew install facebook/fb/idb-companion
- name: Add Maestro to path
run: echo "${HOME}/.maestro/bin" >> $GITHUB_PATH
- name: Build iOS App
run: |
yarn run-example-ios:release
- name: Run tests
run: |
yarn test:e2e:ios
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: maestro-artifacts-ios
path: /Users/runner/.maestro/tests/**