-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.travis.yml
387 lines (344 loc) · 18.2 KB
/
.travis.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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
# Run android emulator on accelerated intel CPU
# or on emulated ARM CPU.
# Includes test.
#
# Specifically targetting API Level 21 - 29 as per app/build.gradle
#
# +-----------+--------------------+--------------------+
# | API Level | Code Name | Android OS version |
# +-----------+--------------------+--------------------+
# | 29 | 10 | 10 |
# | 28 | Pie | 9 |
# | 27 | Oreo | 8.1 |
# | 26 | Oreo | (dropped ARM) 8.0 |
# | 25 | Nougat | 7.1 |
# | 24 | Nougat | 7.0 |
# | 23 | Marshmallow | 6.0 |
# | 22 | Lollipop | 5.1 |
# | 21 | Lollipop | 5.0 |
# +-----------+--------------------+--------------------+
# "https://en.wikipedia.org/wiki/Android_(operating_system)#Platform_information"
# Note: Flutter supports down to API 16
language: generic
dist: bionic # ubuntu 18.04
# specify global envs and jobs
env:
global:
- GRAVIS="https://raw.githubusercontent.com/DanySK/Gravis-CI/master/"
- JDK=1.8 # the JDK used for running tests
- ANDROID_TOOLS=6858069 # android-29
- ANDROID_VERSION=29 # The current compileSdkVersion from build.gradle
- ANDROID_ARCHITECTURE=x86_64
- ANDROID_BUILD_TOOLS_VERSION=29.0.3 # Depends on compileSdkVersion
- ANDROID_HOME=${HOME}/android-sdk
- ANDROID_SDK_ROOT=${ANDROID_HOME}
- FLUTTER_CHANNEL=stable
- FLUTTER_HOME=${HOME}/flutter
- PATH=${FLUTTER_HOME}/bin:$HOME/.pub-cache/bin:${ANDROID_HOME}:${ANDROID_HOME}/emulator:${ANDROID_HOME}/cmdline-tools/tools/bin:${ANDROID_HOME}/platform-tools:${PATH}
- secure=r2RWsWgPXvH/aY186O/uWpPZgRHR/bCWBT8EK3EGFbqAkQwNHafmUuwo/hoJsifYUkPtiKP/tW/TbslPY5RuZEIPV/Aah4GvyK9eBlLiZgnHPAsVh5xIqvCsZHPmNuFdi1XJJAN4hAf/SlIevcOQFcLCptrPoCSB+UUtOdqK44BCz2DsXNGHGVckHMl2COOkpl6nVr6FD++ef7R7l4c3J+Ie6YI92RI6yxrIeypR9Y/xp5aatdWJG2bf+qI072ae7QFImIqYn0RJXYq0+dNyv53S9DNkm2aqnHxErMm4/M3eksgdoHXwEj+5I3z7Pn2BvEj2OU5Q16Q3oJLFZ/ekvs5gHprLhfOWse1UxrWuPdp4TF61ufgmal8b6Zy12REOclGRHhnfAPW0g4MrlDsgAC1cjtXq14IAWvxgLl28N+0eLyNbwBbZfEqZhbKRqx5AgA52tZoqhAZ6Hzz6NFTIzo0LZuIzLJildB8KNNQEtGTQhx4DFVAjO7QLIwTWLhyT7d3dEiRS6Is8PV0T6JOWCilg3Ibd7OdpHxOd6RzAu0P4l3TwdZk4OnqconzRlIQgCjsd054qXTAhBfpEQj21C0BqUejTibN2v6BKCYgqaN52P2zT3sboEchk3BDstle4w7yyv3gVZodb1fMRo644+aCkrw2wnHoMuGcG5YWik/E=
# matrix of APIxABIxGOO
# generate this with:
# $ sdkmanager --list --verbose | awk -F';' '/system-images;.*/{ split($2,a,"-"); printf(" - API=%-3sABI=%-12sGOO=%s\n", a[2], $4, $3)}'
jobs:
- API=29 ABI=x86_64 GOO=google_apis_playstore
- API=29 ABI=x86 GOO=google_apis_playstore
- API=29 ABI=x86_64 GOO=google_apis
- API=29 ABI=x86 GOO=google_apis
- API=29 ABI=x86_64 GOO=default
- API=29 ABI=x86 GOO=default
- API=28 ABI=x86_64 GOO=google_apis_playstore
- API=28 ABI=x86 GOO=google_apis_playstore
- API=28 ABI=x86_64 GOO=google_apis
- API=28 ABI=x86 GOO=google_apis
- API=28 ABI=x86_64 GOO=default
- API=28 ABI=x86 GOO=default
- API=27 ABI=x86 GOO=google_apis_playstore
- API=27 ABI=x86 GOO=google_apis
- API=27 ABI=x86_64 GOO=default
- API=27 ABI=x86 GOO=default
- API=26 ABI=x86 GOO=google_apis_playstore
- API=26 ABI=x86_64 GOO=google_apis
- API=26 ABI=x86 GOO=google_apis
- API=26 ABI=x86_64 GOO=default
- API=26 ABI=x86 GOO=default
- API=25 ABI=x86 GOO=google_apis_playstore
- API=25 ABI=x86_64 GOO=google_apis
- API=25 ABI=x86 GOO=google_apis
- API=25 ABI=x86_64 GOO=default
- API=25 ABI=x86 GOO=default
- API=25 ABI=armeabi-v7a GOO=google_apis
- API=25 ABI=arm64-v8a GOO=google_apis
- API=24 ABI=x86_64 GOO=google_apis
- API=24 ABI=x86 GOO=google_apis
- API=24 ABI=armeabi-v7a GOO=google_apis
- API=24 ABI=arm64-v8a GOO=google_apis
- API=24 ABI=x86_64 GOO=default
- API=24 ABI=x86 GOO=default
- API=24 ABI=armeabi-v7a GOO=default
- API=24 ABI=arm64-v8a GOO=default
- API=23 ABI=x86_64 GOO=google_apis
- API=23 ABI=x86 GOO=google_apis
- API=23 ABI=armeabi-v7a GOO=google_apis
- API=23 ABI=x86_64 GOO=default
- API=23 ABI=x86 GOO=default
- API=23 ABI=armeabi-v7a GOO=default
- API=22 ABI=x86_64 GOO=google_apis
- API=22 ABI=x86 GOO=google_apis
- API=22 ABI=armeabi-v7a GOO=google_apis
- API=22 ABI=x86_64 GOO=default
- API=22 ABI=x86 GOO=default
- API=22 ABI=armeabi-v7a GOO=default
- API=21 ABI=x86_64 GOO=google_apis
- API=21 ABI=x86 GOO=google_apis
- API=21 ABI=armeabi-v7a GOO=google_apis
- API=21 ABI=x86_64 GOO=default
- API=21 ABI=x86 GOO=default
- API=21 ABI=armeabi-v7a GOO=default
# API=20 -- not released
- API=19 ABI=x86 GOO=google_apis
- API=19 ABI=x86 GOO=default
- API=19 ABI=armeabi-v7a GOO=google_apis
- API=19 ABI=armeabi-v7a GOO=default
- API=18 ABI=x86 GOO=google_apis
- API=18 ABI=x86 GOO=default
- API=18 ABI=armeabi-v7a GOO=google_apis
- API=18 ABI=armeabi-v7a GOO=default
- API=17 ABI=x86 GOO=google_apis
- API=17 ABI=x86 GOO=default
- API=17 ABI=armeabi-v7a GOO=google_apis
- API=17 ABI=armeabi-v7a GOO=default
- API=16 ABI=x86 GOO=google_apis
- API=16 ABI=x86 GOO=default
- API=16 ABI=armeabi-v7a GOO=google_apis
- API=16 ABI=armeabi-v7a GOO=default
# API=15 -- not supported by flutter
# API=14 -- not released
# API=13 -- not released
# API=12 -- not released
# API=11 -- not released
# API=10 -- not supported by flutter
before_install:
- java -version
- |
echo 'Set up KVM'
if [[ ! $TRAVIS_OS_NAME =~ "osx" ]]; then
sudo apt-get -y --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder > /dev/null
sudo apt-get install -y libxtst6 libnss3-dev libnspr4 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0 libgdk-pixbuf2.0-0 > /dev/null
sudo adduser $USER libvirt
sudo adduser $USER kvm
fi
- |
echo 'Set up JDK 8 for Android SDK'
curl "${GRAVIS}.install-jdk-travis.sh" --output ~/.install-jdk-travis.sh
export TARGET_JDK="${JDK}"
source ~/.install-jdk-travis.sh
- |
echo 'Set up Android SDK'
if [[ $TRAVIS_OS_NAME == "osx" ]]; then
curl -o android-sdk-tools.zip "https://dl.google.com/android/repository/commandlinetools-mac-${ANDROID_TOOLS}_latest.zip"
else
curl -o android-sdk-tools.zip "https://dl.google.com/android/repository/commandlinetools-${TRAVIS_OS_NAME}-${ANDROID_TOOLS}_latest.zip"
fi
unzip -q android-sdk-tools.zip -d ${ANDROID_HOME}
rm android-sdk-tools.zip
mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/tools
find ${ANDROID_SDK_ROOT}/cmdline-tools -maxdepth 1 -mindepth 1 -not -name tools -exec mv '{}' ${ANDROID_SDK_ROOT}/cmdline-tools/tools \;
# Avoid harmless sdkmanager warning
mkdir ~/.android
echo 'count=0' > ~/.android/repositories.cfg
# Accept licenses before installing components, no need to echo y for each component
yes | sdkmanager --licenses >/dev/null
# install:
# - |
# echo 'Download SDK tools'
# sdkmanager "platform-tools" >/dev/null
# sdkmanager "tools" >/dev/null # A second time per Travis docs, gets latest versions
# sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" >/dev/null # Implicit gradle dependency - gradle drives changes
# sdkmanager "platforms;android-$API" >/dev/null # We need the API of the emulator we will run
# sdkmanager "platforms;android-$ANDROID_VERSION" >/dev/null # We need the API of the current compileSdkVersion from build.gradle
# sdkmanager "extras;android;m2repository" >/dev/null
# sdkmanager "system-images;android-$ANDROID_VERSION;default;x86" >/dev/null # install system images used in gradle.build
# sdkmanager "system-images;android-$API;$GOO;$ABI" >/dev/null # install system images for emulator
# - |
# echo 'install flutter'
# cd ${HOME} && git clone --depth 1 --branch ${FLUTTER_CHANNEL} https://github.com/flutter/flutter.git && cd ${TRAVIS_BUILD_DIR} && ls -lh
# flutter config --no-analytics
# flutter precache
# flutter pub get
jobs:
fast_finish: true
# jobs that are flakey or fail consistently
allow_failures:
- env: API=29 ABI=x86_64 GOO=google_apis_playstore # flutter driver: "No devices found."
- env: API=29 ABI=x86 GOO=google_apis_playstore # flutter doctor: device offline
- env: API=29 ABI=x86_64 GOO=google_apis # flutter drive: "Bad state: No element"
# - env: API=29 ABI=x86 GOO=google_apis # DriverError: Failed to fulfill GetHealth due to remote error
- env: API=29 ABI=x86 GOO=default # hangs while resolving dependencies
- env: API=28 ABI=x86_64 GOO=google_apis_playstore # flutter driver hangs
# - env: API=28 ABI=x86 GOO=google_apis_playstore # flutter driver hangs
- env: API=26 ABI=x86 GOO=default # emulator hangs
- env: API=25 ABI=armeabi-v7a GOO=google_apis # flutter drive reports "apk: Can't find service: package"
- env: API=25 ABI=arm64-v8a GOO=google_apis # Timeout (600 seconds) reached; failed to start emulator
- env: API=24 ABI=x86 GOO=google_apis # flutter driver hangs after resolving gradle dependencies
- env: API=24 ABI=armeabi-v7a GOO=google_apis # hangs during Installing build/app/outputs/apk/app.apk...
- env: API=24 ABI=arm64-v8a GOO=google_apis # Timeout (600 seconds) reached; failed to start emulator
- env: API=24 ABI=armeabi-v7a GOO=default # hangs after installing apk
- env: API=24 ABI=arm64-v8a GOO=default # Timeout (600 seconds) reached; failed to start emulator
- env: API=23 ABI=armeabi-v7a GOO=google_apis # hangs during Installing build/app/outputs/apk/app.apk...
- env: API=23 ABI=armeabi-v7a GOO=default # hangs after installing apk
- env: API=22 ABI=x86_64 GOO=default # flutter drive hangs during installation of apk
- env: API=22 ABI=armeabi-v7a GOO=google_apis # hangs after installing apk
- env: API=21 ABI=armeabi-v7a GOO=google_apis # Timeout (600 seconds) reached; failed to start emulator
- env: API=19 ABI=armeabi-v7a GOO=google_apis # hangs after installing apk
- env: API=19 ABI=armeabi-v7a GOO=default # hangs on Installing build/app/outputs/apk/app.apk...
- env: API=18 ABI=armeabi-v7a GOO=google_apis # flutter driver: incorrect success after installing apk
- env: API=17 ABI=x86 GOO=google_apis # FlutterDriver: It is taking an unusually long time to connect to the VM...
- env: API=17 ABI=x86 GOO=default # FlutterDriver: It is taking an unusually long time to connect to the VM...
- env: API=16 ABI=x86 GOO=google_apis # FlutterDriver: It is taking an unusually long time to connect to the VM...
- env: API=16 ABI=x86 GOO=default # FlutterDriver: It is taking an unusually long time to connect to the VM...
- env: API=16 ABI=armeabi-v7a GOO=google_apis # hangs after installing apk
- env: API=16 ABI=armeabi-v7a GOO=default # hangs after installing apk
# include:
# # - stage: Unit Testing
# # language: generic
# # os: linux
# # before_script:
# # - flutter pub global activate coverage
# # script: flutter test --coverage
# # after_success: bash <(curl -s https://codecov.io/bash)
# - &integration-test-stage
# stage: Integration Testing
# sudo: true
# dist: bionic
# language: generic
# os: linux
# # Run integration tests on android
install:
- |
echo 'Download SDK tools'
sdkmanager "platform-tools" >/dev/null
sdkmanager "tools" >/dev/null # A second time per Travis docs, gets latest versions
sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" >/dev/null # Implicit gradle dependency - gradle drives changes
sdkmanager "platforms;android-$API" >/dev/null # We need the API of the emulator we will run
sdkmanager "platforms;android-$ANDROID_VERSION" >/dev/null # We need the API of the current compileSdkVersion from build.gradle
sdkmanager "extras;android;m2repository" >/dev/null
sdkmanager "system-images;android-$ANDROID_VERSION;default;x86" >/dev/null # install system images used in gradle.build
sdkmanager "system-images;android-$API;$GOO;$ABI" >/dev/null # install system images for emulator
sdkmanager "emulator" >/dev/null
- ${ANDROID_HOME}/emulator/emulator -version
- |
if [[ $ABI =~ "arm" ]]; then
echo "downgrading emulator"
# Download a pinned version of the emulator since default version can cause issues
emulator_version=5264690 # 29.2.1.0 (build_id 5889189) ==> 28.0.23.0 (build_id 5264690)
# sudo apt-get install -y libunwind8 libc++1
curl -fo emulator.zip "https://dl.google.com/android/repository/emulator-linux-$emulator_version.zip"
rm -rf "${ANDROID_HOME}/emulator"
unzip -q emulator.zip -d "${ANDROID_HOME}"
rm -f emulator.zip
# install build tools and platforms for arm (to allow emulator to run)
sdkmanager "build-tools;25.0.2" "platforms;android-25" > /dev/null
fi
- ${ANDROID_HOME}/emulator/emulator -version
# Create an Android emulator
# - echo no | avdmanager --verbose create avd --force -n test -k "system-images;android-$API;$GOO;$ABI" -c 10M
- echo no | avdmanager --verbose create avd --force -n test -k "system-images;android-$API;$GOO;$ABI"
- EMU_PARAMS="
-avd test
-no-window
-no-audio
"
- EMU_COMMAND="emulator"
- |
if [[ $ABI =~ "x86" ]]; then
#EMU_COMMAND="emulator-headless"
echo -n # noop
else
# emulate graphics if running on ARM
EMU_PARAMS="${EMU_PARAMS} -gpu swiftshader"
fi
# This double "sudo" monstrosity is used to have Travis execute the
# emulator with its new group permissions and help preserve the rule
# of least privilege.
- sudo -E sudo -u $USER -E bash -c "${ANDROID_HOME}/emulator/${EMU_COMMAND} ${EMU_PARAMS} &"
# install flutter (while emulator is starting)
- cd ${HOME} && git clone --depth 1 --branch ${FLUTTER_CHANNEL} https://github.com/flutter/flutter.git && cd ${TRAVIS_BUILD_DIR} && ls -lh
- flutter config --no-analytics
- flutter precache
- flutter pub get
# Switch back to our target JDK version to build and run tests
- JDK="${TARGET_JDK}"
- source ~/.install-jdk-travis.sh
- flutter doctor -v
before_script:
# wait for emulator to finish startup
- ./wait-for-emulator.sh
# sometimes takes a second for the emmulator to load
- sleep 90s
- adb devices
- flutter devices
- flutter doctor -v
script:
# run test with retries
- travis_retry flutter driver --verbose-system-logs --target=test_driver/main.dart
# - <<: *integration-test-stage
# os: osx
# # use oldest flutter supported version of xcode
# osx_image: xcode12.2
# # Run integration tests on ios
# install:
# - open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
# - export HOMEBREW_NO_AUTO_UPDATE=1
# - brew install libimobiledevice
# - brew install ideviceinstaller
# - brew install ios-deploy
# - brew install cocoapods || echo 'ignore exit(1)'
# - brew link --overwrite cocoapods
# - |
# echo 'install flutter'
# cd ${HOME} && git clone --depth 1 --branch ${FLUTTER_CHANNEL} https://github.com/flutter/flutter.git && cd ${TRAVIS_BUILD_DIR} && ls -lh
# flutter config --no-analytics
# flutter precache
# flutter pub get
# before_script:
# - flutter devices
# - flutter doctor -v
# script:
# # run test with retries
# - travis_retry flutter driver --verbose-system-logs test_driver/main.dart
# after_success:
# - |
# if [ $TRAVIS_EVENT_TYPE == "push"] && [ $TRAVIS_BRANCH == "master" ]; then
# export NEW_TAG=0.0.2
# export LAST_TAG=$(git describe --tags --abbrev=0)
# rm $TRAVIS_BUILD_DIR/screenshots/*.png
# cp /tmp/screenshots/test/* $TRAVIS_BUILD_DIR/screenshots/
# ls -lh $TRAVIS_BUILD_DIR/screenshots/
# git config --global user.email "[email protected]"
# git config --global user.name "Thomas Cave"
# sed -i "s/\/compare\/master..$LAST_TAG/\/compare\/master..$NEW_TAG/" CHANGELOG.md
# export NEW_CHANGELOG=$(sed -n "/<\!-- NEXT RELEASE START: Don't remove me! -->/,/<\!-- NEXT RELEASE END: Don't remove me! -->/{//!p;}" CHANGELOG.md | sed 's/$/<br>/')
# sed -i -e "/<\!-- NEXT RELEASE START: Don't remove me! -->/,/<\!-- NEXT RELEASE END: Don't remove me! -->/{//!d;}" -e "/<\!-- NEXT RELEASE END: Don't remove me! -->/ i - _Your contribution here_" CHANGELOG.md
# export NEW_SCREENSHOTS=$(for i in screenshots/*.png; do echo -n '![Screenshot' "$i](https://github.com/caveman280/sample-flutter-mobileci/blob/$NEW_TAG/screenshots/$i?raw=true)"; done)
# sed -i -e "/|--|--|--|/ a | [$NEW_TAG] | $NEW_CHANGELOG | <details><summary>Open me...</summary> $NEW_SCREENSHOTS </details> |" CHANGELOG.md
# echo -e "\n[$NEW_TAG]: https://github.com/caveman280/sample-flutter-mobileci/releases/tag/$NEW_TAG" >> CHANGELOG.md
# git add $TRAVIS_BUILD_DIR/screenshots/*.png
# git add CHANGELOG.md
# git commit --message "[TAG] New release: $NEW_TAG"
# git tag $NEW_TAG
# git remote add origin-master https://${GH_TOKEN}@github.com/caveman280/sample-flutter-mobileci.git > /dev/null 2>&1
# git push --quiet --set-upstream origin-master master
# fi
before_cache:
- rm -rfv ~/.gradle/caches/?*.?*.?*
- rm -rf ~/.gradle/caches/transforms-1
- rm -rf ~/.gradle/caches/transforms-2
- rm -rf ~/.gradle/caches/journal-1
- rm -rf ~/.gradle/caches/modules-2
- find ~/.gradle/caches/ -name "*.lock" -type f -delete
- find ~/.gradle/caches -type f -mtime 0 -exec stat -c "%z %n" {} \; | sort
cache:
directories:
- $HOME/.pub-cache
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/