From 453f4ca3f9d3a34dbbc85a739d47482a88c06107 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 11 Apr 2026 10:43:15 -0500 Subject: [PATCH] Fix test result reporting in build.sh --- build.sh | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/build.sh b/build.sh index c8669a2e..0faecf3b 100755 --- a/build.sh +++ b/build.sh @@ -27,6 +27,7 @@ GRADLE_LOG="build/gradle-output.log" PACKAGE_NAME=org.isoron.uhabits SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g') +ATTEMPTS=1 BOOT_TIMEOUT=360 case "$(uname -m)" in arm64|aarch64) ARCH="arm64-v8a" ;; @@ -174,10 +175,20 @@ android_launch() { local AVDNAME=${AVD_PREFIX}${API} local PORT=6${API}0 - log_info "Stopping Android emulator..." - while [[ -n $(pgrep -f ${AVDNAME}) ]]; do - pkill -9 -f ${AVDNAME} - done + export ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${PORT}" + + if [ -n "$KILL_EMU" ]; then + log_info "Stopping Android emulator..." + while [[ -n $(pgrep -f ${AVDNAME}) ]]; do + pkill -9 -f ${AVDNAME} + sleep 1 + 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)..." local EMULATOR_LOG="build/emulator-${API}.log" @@ -187,8 +198,6 @@ android_launch() { -no-snapshot \ 1>"$EMULATOR_LOG" 2>&1 & - export ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${PORT}" - log_info "Waiting for emulator to boot..." timeout $BOOT_TIMEOUT $ADB wait-for-device shell \ '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_LOGCAT=${ANDROID_OUTPUTS_DIR}/logcat-${API}.txt FAILED_TESTS="" - for i in {1..10}; do + for ((i=1; i<=ATTEMPTS; i++)); do log_info "Running $size instrumented tests (attempt $i)..." $ADB shell am instrument \ -r -e coverage true -e size "$size" $FAILED_TESTS \ -w ${PACKAGE_NAME}.test/androidx.test.runner.AndroidJUnitRunner \ - | ts "%.s" | tee "$OUT_INSTRUMENT" + | ts "%.s" > "$OUT_INSTRUMENT" FAILED_TESTS=$(tools/parseInstrument.py "$OUT_INSTRUMENT") SUCCESS=$? + log_debug "$FAILED_TESTS" if [ $SUCCESS -eq 0 ]; then log_info "$size tests passed." break @@ -368,6 +378,8 @@ _parse_opts() { case "$1" in -r ) RELEASE=1; shift ;; -c ) CLEAN=1; shift ;; + -k ) KILL_EMU=1; shift ;; + -n ) ATTEMPTS=$2; shift 2 ;; * ) shift ;; esac done @@ -395,6 +407,8 @@ Commands: Options: -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 END }