diff --git a/kokoro/build.sh b/kokoro/build.sh index dacdb9c38..68d8a1379 100644 --- a/kokoro/build.sh +++ b/kokoro/build.sh @@ -44,31 +44,54 @@ export JAVA_HOME= ./gradlew "${GRADLE_FLAGS[@]}" build # For Firebase Test Lab -./gradlew app:assembleAndroidTest -./gradlew app:assembleDebug +./gradlew assembleAndroidTest +./gradlew assembleDebug MAX_RETRY=3 run_firebase_test_lab() { ## Retry can be done by passing the --num-flaky-test-attempts to gcloud, but gcloud SDK in the ## kokoro server doesn't support it yet. + ## FTL requires a normal apk, even though we don't need or have any for library modules + ## For now, just pass in the main app apk + set +e # To not exit on an error to retry flaky tests local counter=0 local result=1 + local module=$1 while [ $result != 0 -a $counter -lt $MAX_RETRY ]; do gcloud firebase test android run \ --type instrumentation \ - --app app/build/outputs/apk/debug/app-debug.apk \ - --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk \ + --app "app/build/outputs/apk/debug/app-debug.apk" \ + --test "$module/build/outputs/apk/androidTest/debug/$module-debug-androidTest.apk" \ --device-ids $deviceIds \ --os-version-ids $osVersionIds \ --locales en \ - --timeout 60 + --timeout 300 result=$? ; let counter=counter+1 done return $result } -run_firebase_test_lab -exit $? + +# All modules with androidTest to run tests on. +# This command will create a list like ["app", "sync"] based on which subdirectories +# (assumed to be modules) have an androidTest source directory. +# The sed regex pulls out the module name from the matched directory +modules=($(find . -regex ".*/src/androidTest" | sed -E 's|\./([^/]*)/.*|\1|g')) + +# Run all modules in parallel with Firebase Test Lab, and fail if any fail +pids="" +result=0 + +for module in ${modules[@]}; do + run_firebase_test_lab $module & + pids="$pids $!" +done + +for pid in ${pids[@]}; do + wait $pid || let "result=1" +done + +exit $result