#!/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 (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"