Fix test result reporting in build.sh

This commit is contained in:
Alinson S. Xavier 2026-04-11 10:43:15 -05:00
parent 2beedadb12
commit 453f4ca3f9

View File

@ -27,6 +27,7 @@ GRADLE_LOG="build/gradle-output.log"
PACKAGE_NAME=org.isoron.uhabits PACKAGE_NAME=org.isoron.uhabits
SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager"
VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g') VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g')
ATTEMPTS=1
BOOT_TIMEOUT=360 BOOT_TIMEOUT=360
case "$(uname -m)" in case "$(uname -m)" in
arm64|aarch64) ARCH="arm64-v8a" ;; arm64|aarch64) ARCH="arm64-v8a" ;;
@ -174,10 +175,20 @@ android_launch() {
local AVDNAME=${AVD_PREFIX}${API} local AVDNAME=${AVD_PREFIX}${API}
local PORT=6${API}0 local PORT=6${API}0
export ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${PORT}"
if [ -n "$KILL_EMU" ]; then
log_info "Stopping Android emulator..." log_info "Stopping Android emulator..."
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
pkill -9 -f ${AVDNAME} pkill -9 -f ${AVDNAME}
sleep 1
done done
fi
if pgrep -f "${AVDNAME}" > /dev/null; then
log_info "Emulator already running (API $API), reusing..."
return 0
fi
log_info "Launching emulator (API $API)..." log_info "Launching emulator (API $API)..."
local EMULATOR_LOG="build/emulator-${API}.log" local EMULATOR_LOG="build/emulator-${API}.log"
@ -187,8 +198,6 @@ android_launch() {
-no-snapshot \ -no-snapshot \
1>"$EMULATOR_LOG" 2>&1 & 1>"$EMULATOR_LOG" 2>&1 &
export ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${PORT}"
log_info "Waiting for emulator to boot..." log_info "Waiting for emulator to boot..."
timeout $BOOT_TIMEOUT $ADB wait-for-device shell \ timeout $BOOT_TIMEOUT $ADB wait-for-device shell \
'while [[ -z "$(getprop sys.boot_completed)" ]]; do sleep 1; done; input keyevent 82' & 'while [[ -z "$(getprop sys.boot_completed)" ]]; do sleep 1; done; input keyevent 82' &
@ -243,15 +252,16 @@ android_test() {
OUT_INSTRUMENT=${ANDROID_OUTPUTS_DIR}/instrument-${API}.txt OUT_INSTRUMENT=${ANDROID_OUTPUTS_DIR}/instrument-${API}.txt
OUT_LOGCAT=${ANDROID_OUTPUTS_DIR}/logcat-${API}.txt OUT_LOGCAT=${ANDROID_OUTPUTS_DIR}/logcat-${API}.txt
FAILED_TESTS="" FAILED_TESTS=""
for i in {1..10}; do for ((i=1; i<=ATTEMPTS; i++)); do
log_info "Running $size instrumented tests (attempt $i)..." log_info "Running $size instrumented tests (attempt $i)..."
$ADB shell am instrument \ $ADB shell am instrument \
-r -e coverage true -e size "$size" $FAILED_TESTS \ -r -e coverage true -e size "$size" $FAILED_TESTS \
-w ${PACKAGE_NAME}.test/androidx.test.runner.AndroidJUnitRunner \ -w ${PACKAGE_NAME}.test/androidx.test.runner.AndroidJUnitRunner \
| ts "%.s" | tee "$OUT_INSTRUMENT" | ts "%.s" > "$OUT_INSTRUMENT"
FAILED_TESTS=$(tools/parseInstrument.py "$OUT_INSTRUMENT") FAILED_TESTS=$(tools/parseInstrument.py "$OUT_INSTRUMENT")
SUCCESS=$? SUCCESS=$?
log_debug "$FAILED_TESTS"
if [ $SUCCESS -eq 0 ]; then if [ $SUCCESS -eq 0 ]; then
log_info "$size tests passed." log_info "$size tests passed."
break break
@ -368,6 +378,8 @@ _parse_opts() {
case "$1" in case "$1" in
-r ) RELEASE=1; shift ;; -r ) RELEASE=1; shift ;;
-c ) CLEAN=1; shift ;; -c ) CLEAN=1; shift ;;
-k ) KILL_EMU=1; shift ;;
-n ) ATTEMPTS=$2; shift 2 ;;
* ) shift ;; * ) shift ;;
esac esac
done done
@ -395,6 +407,8 @@ Commands:
Options: Options:
-c Remove build folders before building -c Remove build folders before building
-k Kill running emulator before tests (default: reuse if running)
-n N Number of test attempts per size (default: 1)
-r Build and test release version, instead of debug -r Build and test release version, instead of debug
END END
} }