-
Notifications
You must be signed in to change notification settings - Fork 43
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
350 additions
and
315 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,127 @@ | ||
language: android | ||
|
||
jdk: | ||
- oraclejdk8 | ||
|
||
android: | ||
components: | ||
- tools | ||
- platform-tools | ||
- build-tools-29.0.2 | ||
- android-29 | ||
- extra-android-m2repository | ||
licenses: | ||
- "android-sdk-preview-license-52d11cd2" | ||
- "android-sdk-license-.+" | ||
- "google-gdk-license-.+" | ||
# modified version of https://github.com/ankidroid/Anki-Android/blob/master/.travis.yml | ||
sudo: true | ||
language: bash | ||
# ignored on non-linux platforms, but bionic is required for nested virtualization | ||
dist: bionic | ||
|
||
stages: | ||
- install | ||
- unit_test # custom stage defined in jobs::include section | ||
- test | ||
- finalize_coverage # custom stage defined in jobs::include section | ||
- cache | ||
|
||
env: | ||
global: | ||
- COMPILE_API=29 # sync with compileSdkVersion | ||
- ANDROID_BUILD_TOOLS=29.0.2 | ||
- ABI=x86_64 | ||
- ADB_INSTALL_TIMEOUT=8 | ||
- ANDROID_HOME=${HOME}/android-sdk | ||
- ANDROID_TOOLS_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" | ||
- EMU_FLAVOR=default # use google_apis flavor if no default flavor emulator | ||
- GRAVIS="https://raw.githubusercontent.com/DanySK/Gravis-CI/master/" | ||
- JDK="1.8" | ||
- TOOLS=${ANDROID_HOME}/tools | ||
# PATH order is incredibly important. e.g. the 'emulator' script exists in more than one place! | ||
- PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH} | ||
# fix gradle output | ||
- TERM=dumb | ||
matrix: | ||
- API=21 # Android 5.0 | ||
- API=26 # Android 8.0 | ||
- API=29 # Android 10.0 | ||
|
||
before_install: | ||
- yes | sdkmanager --update | ||
# This section may run on all platforms, and may run for unit tests or for coverage finalization | ||
# It should not make assumptions about os platform or desired tool installation | ||
|
||
# Set up JDK 8 for Android SDK - Java is universally needed: codacy, unit tests, emulators | ||
- curl "${GRAVIS}.install-jdk-travis.sh" --output ~/.install-jdk-travis.sh | ||
- export TARGET_JDK="${JDK}" | ||
- JDK="1.8" | ||
- source ~/.install-jdk-travis.sh | ||
|
||
# Set up Android SDK - this is needed everywhere but coverage finalization, so toggle on that | ||
- wget -q "${ANDROID_TOOLS_URL}" -O android-sdk-tools.zip | ||
- unzip -q android-sdk-tools.zip -d ${ANDROID_HOME} | ||
- rm android-sdk-tools.zip | ||
- mkdir ~/.android | ||
- echo 'count=0' > ~/.android/repositories.cfg | ||
- yes | sdkmanager --licenses >/dev/null | ||
- echo y | sdkmanager --no_https "platform-tools" >/dev/null | ||
- echo y | sdkmanager --no_https "tools" >/dev/null | ||
- echo y | sdkmanager --no_https "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null | ||
- echo y | sdkmanager --no_https "platforms;android-${COMPILE_API}" >/dev/null | ||
|
||
install: | ||
# In our setup, install only runs on matrix entries we want full emulator tests on | ||
# That only happens currently on linux, so this section can assume linux + emulator is desired | ||
# Download required emulator tools | ||
- echo y | sdkmanager --no_https "platforms;android-$API" >/dev/null # We need the API of the emulator we will run | ||
- echo y | sdkmanager --no_https "emulator" >/dev/null | ||
- echo y | sdkmanager --no_https "system-images;android-$API;$EMU_FLAVOR;$ABI" >/dev/null # install our emulator | ||
|
||
# Set up KVM on linux for hardware acceleration. Manually here so it only happens for emulator tests, takes ~30s | ||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder | ||
- sudo adduser $USER libvirt | ||
- sudo adduser $USER kvm | ||
|
||
# Create an Android emulator | ||
- echo no | avdmanager create avd --force -n test -k "system-images;android-$API;$EMU_FLAVOR;$ABI" -c 10M | ||
- | | ||
EMU_PARAMS="-verbose -no-snapshot -no-window -camera-back none -camera-front none -selinux permissive -qemu -m 2048" | ||
EMU_COMMAND="emulator" | ||
# 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} -avd test ${AUDIO} ${EMU_PARAMS} &" | ||
# Wait for emulator to be ready | ||
- | | ||
bootanim="" | ||
failcounter=0 | ||
timeout_in_sec=600 # 10 minutes | ||
until [[ "$bootanim" =~ "stopped" ]]; do | ||
bootanim=`adb -e shell getprop init.svc.bootanim 2>&1 &` | ||
if [[ "$bootanim" =~ "device not found" || "$bootanim" =~ "device offline" | ||
|| "$bootanim" =~ "running" || "$bootanim" =~ "error: no emulators found" ]]; then | ||
let "failcounter += 1" | ||
echo "Waiting for emulator to start" | ||
if [[ $failcounter -gt timeout_in_sec ]]; then | ||
echo "Timeout ($timeout_in_sec seconds) reached; failed to start emulator" | ||
exit 1 | ||
fi | ||
fi | ||
sleep 1 | ||
done | ||
echo "Emulator is ready" | ||
- adb shell input keyevent 82 & | ||
|
||
# Switch back to our target JDK version to build and run tests | ||
- JDK="${TARGET_JDK}" | ||
- source ~/.install-jdk-travis.sh | ||
|
||
before_script: | ||
- adb -e logcat | tee logcat.log > /dev/null 2>&1 & | ||
|
||
script: | ||
- ./gradlew assembleDebug | ||
- ./gradlew test | ||
- ./gradlew testDebug | ||
- ./gradlew connectedDebugAndroidTest | ||
|
||
after_script: | ||
# Uncomment the line below to kill adb and show logcat output. | ||
- echo " LOGCAT "; echo "========"; cat logcat.log; pkill -KILL -f adb | ||
|
||
before_cache: | ||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock | ||
- curl "${GRAVIS}.clean_gradle_cache.sh" --output ~/.clean_gradle_cache.sh | ||
- bash ~/.clean_gradle_cache.sh > /dev/null | ||
|
||
cache: | ||
directories: | ||
- $HOME/.gradle/caches/ | ||
- $HOME/.gradle/wrapper/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.