koopa-admin-log/scripts/taler-monitoring/android-test/run-android-build-and-smoke.sh
Hernâni Marques 92695c0ee3
monitoring: use inference fix branch by default; harden GUI chain ANR wait
Default BUILD branch fix-bank-withdraw-auto-exchange; dismiss System UI
ANR before confirm taps so low-RAM emulators fail less uselessly.
2026-07-17 21:22:45 +02:00

108 lines
4.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Build the **latest** GNU Taler Android wallet from source, then run the same
# adb deep-link smoke as run-android-pay-smoke.sh.
#
# Source (default): $HOME/taler/taler-android (git@git.taler.net:taler-android.git)
# Build: ./gradlew :wallet:assembleFdroidDebug
# Package id: net.taler.wallet.fdroid.debug
#
# No root required if ANDROID_HOME points at a user SDK ($HOME/Android/Sdk).
#
# Usage:
# ./android-test/run-android-build-and-smoke.sh
# STACK=goa ./android-test/run-android-build-and-smoke.sh
# STACK=stage SKIP_PULL=1 ./android-test/run-android-build-and-smoke.sh
# TALER_ANDROID_SRC=/path/to/taler-android ./android-test/run-android-build-and-smoke.sh
#
set -euo pipefail
ROOT=$(cd "$(dirname "$0")" && pwd)
SMOKE="$ROOT/run-android-pay-smoke.sh"
SRC="${TALER_ANDROID_SRC:-$HOME/taler/taler-android}"
SKIP_PULL="${SKIP_PULL:-0}"
# Prefer existing inference fix branch for GOA withdraw (spinner/exchange resolve).
# Override: BRANCH=master or BRANCH=dev/hernani-inference/fix-withdraw-spinner-fallback
BRANCH="${BRANCH:-dev/hernani-inference/fix-bank-withdraw-auto-exchange}"
VARIANT="${VARIANT:-fdroidDebug}" # assemble task suffix: FdroidDebug / NightlyDebug / …
export ANDROID_HOME="${ANDROID_HOME:-$HOME/Android/Sdk}"
export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-$ANDROID_HOME}"
if [ ! -x "$SRC/gradlew" ]; then
echo "taler-android not found at $SRC (set TALER_ANDROID_SRC=…)" >&2
exit 2
fi
if [ ! -d "$ANDROID_HOME" ]; then
echo "ANDROID_HOME missing: $ANDROID_HOME" >&2
exit 2
fi
printf 'sdk.dir=%s\n' "$ANDROID_HOME" >"$SRC/local.properties"
cd "$SRC"
if [ -d .git ]; then
git fetch origin 2>/dev/null || true
if [ -n "$BRANCH" ] && git rev-parse --verify "origin/$BRANCH" >/dev/null 2>&1; then
echo "checkout origin/$BRANCH (minimal GOA/automation fixes; override BRANCH=)"
git checkout -B "$BRANCH" "origin/$BRANCH" 2>/dev/null || git checkout "$BRANCH" 2>/dev/null || true
fi
if [ "$SKIP_PULL" != "1" ]; then
br=$(git rev-parse --abbrev-ref HEAD)
git pull --ff-only origin "$br" 2>/dev/null || true
fi
fi
COMMIT=$(git rev-parse --short=12 HEAD 2>/dev/null || echo unknown)
echo "source: $SRC @ $COMMIT (branch $(git rev-parse --abbrev-ref HEAD 2>/dev/null || ?))"
echo "variant: assemble${VARIANT^}" 2>/dev/null || true
# Map VARIANT → gradle task (fdroidDebug → assembleFdroidDebug)
task="assemble$(printf '%s' "$VARIANT" | python3 -c 'import sys; s=sys.stdin.read().strip(); print(s[:1].upper()+s[1:] if s else "FdroidDebug")')"
# Prefer explicit known tasks
case "$VARIANT" in
fdroidDebug|FdroidDebug) task=assembleFdroidDebug ;;
fdroidRelease|FdroidRelease) task=assembleFdroidRelease ;;
nightlyDebug|NightlyDebug) task=assembleNightlyDebug ;;
googleDebug|GoogleDebug) task=assembleGoogleDebug ;;
esac
# Low-RAM hosts: cap JVM (override GRADLE_OPTS to raise)
export GRADLE_OPTS="${GRADLE_OPTS:--Xmx1280m -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=1}"
echo "gradle :wallet:$task"
./gradlew ":wallet:$task" --no-daemon --max-workers="${GRADLE_MAX_WORKERS:-1}" \
-Dorg.gradle.jvmargs="${GRADLE_JVMARGS:--Xmx1280m}"
# Locate APK
APK=$(find "$SRC/wallet/build/outputs/apk" -name '*.apk' -type f 2>/dev/null | sort | tail -1)
if [ -z "$APK" ] || [ ! -f "$APK" ]; then
echo "no APK under wallet/build/outputs/apk" >&2
exit 4
fi
echo "built apk: $APK ($(wc -c <"$APK") bytes)"
# Package id from aapt if available
PKG="${PKG:-}"
if [ -z "$PKG" ] && command -v aapt >/dev/null 2>&1; then
PKG=$(aapt dump badging "$APK" 2>/dev/null | sed -n "s/^package: name='\([^']*\)'.*/\1/p" | head -1)
fi
: "${PKG:=net.taler.wallet.fdroid.debug}"
mkdir -p "$ROOT/apks"
STAMP_APK="$ROOT/apks/wallet-from-source-${COMMIT}.apk"
cp -f "$APK" "$STAMP_APK"
echo "copied → $STAMP_APK"
echo "$COMMIT" >"$ROOT/out/build-commit.txt" 2>/dev/null || mkdir -p "$ROOT/out" && echo "$COMMIT" >"$ROOT/out/build-commit.txt"
echo "$APK" >"$ROOT/out/build-apk-path.txt"
# Same smoke as published F-Droid path (CLI hybrid or GUI)
export APK_PATH="$STAMP_APK"
export APK_NAME="$(basename "$STAMP_APK")"
export PKG
export OUT_DIR="${OUT_DIR:-$ROOT/out-source}"
mkdir -p "$OUT_DIR"
SMOKE_CMD="$SMOKE"
if [ "${GUI:-0}" = "1" ]; then
SMOKE_CMD="$ROOT/run-android-gui-smoke.sh"
OUT_DIR="${OUT_DIR%-source}-source-gui"
export OUT_DIR
fi
echo "=== smoke with built APK (PKG=$PKG · GUI=${GUI:-0}) ==="
exec env APK_DIR="$ROOT/apks" APK_NAME="$APK_NAME" APK_PATH="$APK_PATH" PKG="$PKG" OUT_DIR="$OUT_DIR" \
"$SMOKE_CMD"