From b1c8e5ddb2ded6c2b4a25386aaa53a3e0381ee7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Fri, 17 Jul 2026 20:59:31 +0200 Subject: [PATCH] monitoring: build latest taler-android then same adb pay smoke Add run-android-build-and-smoke.sh (assembleFdroidDebug from taler-android master) and wire APK_PATH/PKG into the existing smoke. --- .../taler-monitoring/GIT-AUTOMATION-NOTES.md | 13 +++ .../taler-monitoring/android-test/.gitignore | 1 + .../taler-monitoring/android-test/README.md | 23 ++++- .../run-android-build-and-smoke.sh | 93 +++++++++++++++++++ .../android-test/run-android-pay-smoke.sh | 22 +++-- 5 files changed, 143 insertions(+), 9 deletions(-) create mode 100755 scripts/taler-monitoring/android-test/run-android-build-and-smoke.sh diff --git a/scripts/taler-monitoring/GIT-AUTOMATION-NOTES.md b/scripts/taler-monitoring/GIT-AUTOMATION-NOTES.md index 57be728..73e654a 100644 --- a/scripts/taler-monitoring/GIT-AUTOMATION-NOTES.md +++ b/scripts/taler-monitoring/GIT-AUTOMATION-NOTES.md @@ -178,3 +178,16 @@ For reliable full UI confirm/pay use a physical phone or a host with **≥6–8 | `adb install` wallet | **Success** on emulator-5554 | | Deep-link withdraw | **delivered**; wallet-core started `prepareBankIntegratedWithdrawal` for GOA | | Unattended UI confirm | flaky (ANR) on this host’s RAM | +| Source build `assembleFdroidDebug` | **OK** (2026-07-17, `taler-android@f65a976c0d4a`, ~12 min, APK ~59 MiB) | + +### From-source smoke (same tests as F-Droid) + +```bash +# build latest master + adb smoke +./android-test/run-android-build-and-smoke.sh +STACK=goa ./android-test/run-android-build-and-smoke.sh +# already built: +APK_PATH=$HOME/taler/taler-android/wallet/build/outputs/apk/fdroid/debug/wallet-fdroid-debug.apk \ + PKG=net.taler.wallet.fdroid.debug \ + ./android-test/run-android-pay-smoke.sh +``` diff --git a/scripts/taler-monitoring/android-test/.gitignore b/scripts/taler-monitoring/android-test/.gitignore index 2b9c0a5..3119fff 100644 --- a/scripts/taler-monitoring/android-test/.gitignore +++ b/scripts/taler-monitoring/android-test/.gitignore @@ -1,3 +1,4 @@ apks/*.apk out/ *.png +out-source/ diff --git a/scripts/taler-monitoring/android-test/README.md b/scripts/taler-monitoring/android-test/README.md index 96b760f..b943083 100644 --- a/scripts/taler-monitoring/android-test/README.md +++ b/scripts/taler-monitoring/android-test/README.md @@ -1,7 +1,6 @@ -# Android pay smoke (published wallet) +# Android pay smoke -Installs the **F-Droid** GNU Taler Wallet APK and deep-links -`taler://withdraw/…` + optional `taler://pay…` against GOA or stage. +## 1) Published F-Droid wallet ```bash # needs adb device/emulator @@ -10,4 +9,22 @@ STACK=goa ./run-android-pay-smoke.sh STACK=stage ./run-android-pay-smoke.sh ``` +APK: F-Droid **1.6.1** (`net.taler.wallet.fdroid`). + +## 2) Latest source build + same tests + +Pulls/builds `taler-android` master (`:wallet:assembleFdroidDebug`), then +runs the **same** smoke (install + withdraw/pay deep-links). + +```bash +# default source: $HOME/taler/taler-android +./run-android-build-and-smoke.sh +STACK=goa ./run-android-build-and-smoke.sh +SKIP_PULL=1 ./run-android-build-and-smoke.sh # use tree as-is +TALER_ANDROID_SRC=/path/to/taler-android ./run-android-build-and-smoke.sh +``` + +Built package id: `net.taler.wallet.fdroid.debug`. +Needs `ANDROID_HOME` (e.g. `$HOME/Android/Sdk`), Java 17+, network for Maven. + See parent [GIT-AUTOMATION-NOTES.md](../GIT-AUTOMATION-NOTES.md). diff --git a/scripts/taler-monitoring/android-test/run-android-build-and-smoke.sh b/scripts/taler-monitoring/android-test/run-android-build-and-smoke.sh new file mode 100755 index 0000000..958ca84 --- /dev/null +++ b/scripts/taler-monitoring/android-test/run-android-build-and-smoke.sh @@ -0,0 +1,93 @@ +#!/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}" +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 [ "$SKIP_PULL" != "1" ] && [ -d .git ]; then + echo "git pull --ff-only origin $(git rev-parse --abbrev-ref HEAD)" + git pull --ff-only origin "$(git rev-parse --abbrev-ref HEAD)" || \ + git fetch origin && git merge --ff-only "origin/$(git rev-parse --abbrev-ref HEAD)" || true +fi +COMMIT=$(git rev-parse --short=12 HEAD 2>/dev/null || echo unknown) +echo "source: $SRC @ $COMMIT" +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 +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" +echo "=== smoke with built APK (PKG=$PKG) ===" +exec env APK_DIR="$ROOT/apks" APK_NAME="$APK_NAME" PKG="$PKG" OUT_DIR="$OUT_DIR" \ + "$SMOKE" diff --git a/scripts/taler-monitoring/android-test/run-android-pay-smoke.sh b/scripts/taler-monitoring/android-test/run-android-pay-smoke.sh index da328b7..907cb07 100755 --- a/scripts/taler-monitoring/android-test/run-android-pay-smoke.sh +++ b/scripts/taler-monitoring/android-test/run-android-pay-smoke.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash -# Android wallet smoke: install published F-Droid APK, open withdraw/pay URIs via adb. +# Android wallet smoke: install APK (published F-Droid **or** from-source), open +# withdraw/pay URIs via adb. # # No root required if: # - adb is available (package android-tools-adb / platform-tools) @@ -7,10 +8,12 @@ # - optional user-local SDK under $HOME/Android/Sdk (emulator) # # Usage: -# ./android-test/run-android-pay-smoke.sh # auto stack (GOA if local, else stage) +# ./android-test/run-android-pay-smoke.sh # published F-Droid APK # STACK=goa ./android-test/run-android-pay-smoke.sh # STACK=stage ./android-test/run-android-pay-smoke.sh -# SERIAL=emulator-5554 ./android-test/run-android-pay-smoke.sh +# # from-source (built first): +# ./android-test/run-android-build-and-smoke.sh +# APK_PATH=/path/to.apk PKG=net.taler.wallet.fdroid.debug ./run-android-pay-smoke.sh # # Published APK (default): F-Droid Taler Wallet 1.6.1 (854) # https://f-droid.org/packages/net.taler.wallet.fdroid/ @@ -20,6 +23,8 @@ ROOT=$(cd "$(dirname "$0")" && pwd) APK_DIR="${APK_DIR:-$ROOT/apks}" APK_URL="${APK_URL:-https://f-droid.org/repo/net.taler.wallet.fdroid_854.apk}" APK_NAME="${APK_NAME:-net.taler.wallet.fdroid_854.apk}" +# Optional override: full path to an already-built APK (from-source) +APK_PATH="${APK_PATH:-}" PKG="${PKG:-net.taler.wallet.fdroid}" STACK="${STACK:-auto}" # auto | goa | stage SERIAL="${SERIAL:-}" @@ -77,13 +82,18 @@ case "$STACK" in esac echo "stack: $STACK bank: $BANK" -# APK -APK_PATH="$APK_DIR/$APK_NAME" -if [ ! -f "$APK_PATH" ]; then +# APK: explicit path, or download published F-Droid into APK_DIR +if [ -n "$APK_PATH" ] && [ -f "$APK_PATH" ]; then + : +elif [ -f "$APK_DIR/$APK_NAME" ]; then + APK_PATH="$APK_DIR/$APK_NAME" +else + APK_PATH="$APK_DIR/$APK_NAME" echo "downloading published wallet APK…" curl -fL --retry 3 -o "$APK_PATH" "$APK_URL" fi echo "apk: $APK_PATH ($(wc -c <"$APK_PATH") bytes)" +echo "pkg: $PKG" "${ADB[@]}" wait-for-device "${ADB[@]}" install -r "$APK_PATH"