android-test: sample 3/6/9/12-month wallet tags as WARN only

Pick nearest release tags to 90/180/270/365 days for the older matrix
slot; failures there never hard-block (only ≤14d releases can).
This commit is contained in:
Hernâni Marques 2026-07-17 21:57:01 +02:00
parent a4f525e40c
commit 984b2d6434
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
4 changed files with 107 additions and 56 deletions

View file

@ -4,22 +4,23 @@
# Default order:
# 1) stable-self — rebuild STABLE_TAG (always WARN on fail)
# 2) published — current F-Droid suggested APK
# 3) older-* — previous release tags (APK and/or self-build) if available
# 4) master — tip (always WARN on fail)
# 3) older / milestones — releases near **3 / 6 / 9 / 12 months** (WARN only)
# 4) master — tip (always WARN on fail)
#
# Severity (released apps):
# Age ≤ BLOCKER_MAX_AGE_DAYS (default **14**) → **BLOCKER** on fail (FAIL_FAST)
# Age > 14 days (or unknown) → **WARN** only
# master / pure self-builds without release age → WARN
# Age > 14 days, incl. 3/6/9/12month samples → **WARN** only
# master / stable-self → WARN
#
# Env:
# STABLE_TAG, STABLE_APK_URL, STABLE_APK_NAME
# MASTER_BRANCH, FIX_BRANCH
# VARIANTS default: stable-self,published,older,master
# INCLUDE_OLDER=1 expand token "older" (default 1)
# OLDER_TAG_COUNT how many recent wallet-* tags to consider (default 4)
# INCLUDE_OLDER=1 expand token "older" / "milestones" (default 1)
# MILESTONE_DAYS default "90 180 270 365" (≈ 3,6,9,12 months)
# MILESTONE_TOLERANCE_DAYS default 50 — max distance to accept a tag
# BLOCKER_MAX_AGE_DAYS default 14
# PUBLISHED_FORCE_BLOCKER=1 always treat current published as blocker (default 0 = age rule)
# PUBLISHED_FORCE_BLOCKER=1 always treat current published as blocker
# FAIL_FAST=1, GUI=0, STACK=…
#
set -euo pipefail
@ -36,14 +37,15 @@ ROOT=$(cd "$(dirname "$0")" && pwd)
: "${FIX_BRANCH:=dev/hernani-inference/fix-bank-withdraw-auto-exchange}"
: "${VARIANTS:=stable-self,published,older,master}"
: "${INCLUDE_OLDER:=1}"
: "${OLDER_TAG_COUNT:=4}"
: "${MILESTONE_DAYS:=90 180 270 365}"
: "${MILESTONE_TOLERANCE_DAYS:=50}"
: "${BLOCKER_MAX_AGE_DAYS:=14}"
: "${PUBLISHED_FORCE_BLOCKER:=0}"
: "${FAIL_FAST:=1}"
: "${GUI:=0}"
: "${STACK:=auto}"
: "${TALER_ANDROID_SRC:=$HOME/taler/taler-android}"
export TALER_ANDROID_SRC BLOCKER_MAX_AGE_DAYS
export TALER_ANDROID_SRC BLOCKER_MAX_AGE_DAYS MILESTONE_DAYS MILESTONE_TOLERANCE_DAYS
TS=$(date +%Y%m%d-%H%M%S)
MATRIX_OUT="${MATRIX_OUT:-$ROOT/out-matrix-$TS}"
@ -53,7 +55,8 @@ SUMMARY="$MATRIX_OUT/SUMMARY.txt"
echo "=== Android variant matrix ===" | tee -a "$SUMMARY"
echo "STACK=$STACK GUI=$GUI headless=${EMULATOR_HEADLESS} variants=$VARIANTS" | tee -a "$SUMMARY"
echo "STABLE_TAG=$STABLE_TAG BLOCKER_MAX_AGE_DAYS=$BLOCKER_MAX_AGE_DAYS OLDER_TAG_COUNT=$OLDER_TAG_COUNT" | tee -a "$SUMMARY"
echo "STABLE_TAG=$STABLE_TAG BLOCKER_MAX_AGE_DAYS=$BLOCKER_MAX_AGE_DAYS" | tee -a "$SUMMARY"
echo "milestones(days)=$MILESTONE_DAYS tolerance=$MILESTONE_TOLERANCE_DAYS (always WARN)" | tee -a "$SUMMARY"
echo "out: $MATRIX_OUT" | tee -a "$SUMMARY"
android_ensure_device || {
@ -64,45 +67,51 @@ export SERIAL ANDROID_SERIAL
echo "device: $SERIAL" | tee -a "$SUMMARY"
# --- expand VARIANTS (token "older" → concrete older-pub / older-self entries) ---
# Append one older release as WARN-only (pub APK if possible, else self-build).
append_older_warn() {
local t="$1" age="$2" target="${3:-}"
local vn meta apk_vc apk_url
vn="${t#wallet-}"
if [ -n "$target" ]; then
echo " milestone ~${target}d → $t (age=${age}d) severity=WARN" | tee -a "$SUMMARY"
else
echo " older $t (age=${age}d) severity=WARN" | tee -a "$SUMMARY"
fi
meta=$(fdroid_apk_for_version_name "$vn" 2>/dev/null || true)
if [ -n "$meta" ]; then
apk_vc="${meta%%|*}"
apk_url="${meta#*|}"
if fdroid_apk_exists "$apk_url"; then
out+=("older-pub:${vn}:${apk_vc}:warn")
return
fi
echo " (no F-Droid APK for $vn — self-build only)" | tee -a "$SUMMARY"
fi
out+=("older-self:${t}:warn")
}
expand_variants() {
local raw="$1"
local -a out=()
local v tag vn age sev stable_vn
stable_vn="${STABLE_TAG#wallet-}"
local v tag vn age sev line t target
IFS=',' read -r -a toks <<<"$raw"
for v in "${toks[@]}"; do
v=$(echo "$v" | tr -d '[:space:]')
[ -n "$v" ] || continue
if [ "$v" = "older" ] || [ "$v" = "older-releases" ]; then
if [ "$v" = "older" ] || [ "$v" = "older-releases" ] || [ "$v" = "milestones" ]; then
[ "$INCLUDE_OLDER" = "1" ] || continue
local -a tags=()
mapfile -t tags < <(list_wallet_release_tags "$OLDER_TAG_COUNT" 2>/dev/null || true)
local t
for t in "${tags[@]}"; do
# Prefer 3/6/9/12-month samples (always WARN). Fall back: nothing if no tags nearby.
local found=0
while read -r t age target; do
[ -n "$t" ] || continue
# skip current stable tag (already covered by published / stable-self)
[ "$t" = "$STABLE_TAG" ] && continue
vn="${t#wallet-}"
age=$(release_age_days "$t" 2>/dev/null || echo "")
sev=$(severity_from_age_days "$age")
echo " older candidate $t age_days=${age:-?} severity=$sev" | tee -a "$SUMMARY"
# Prefer published APK when downloadable; always also allow self-build token
local meta apk_vc apk_url
meta=$(fdroid_apk_for_version_name "$vn" 2>/dev/null || true)
if [ -n "$meta" ]; then
apk_vc="${meta%%|*}"
apk_url="${meta#*|}"
if fdroid_apk_exists "$apk_url"; then
out+=("older-pub:${vn}:${apk_vc}:${sev}")
else
echo " (no F-Droid APK for $vn at $apk_url — self-build only)" | tee -a "$SUMMARY"
out+=("older-self:${t}:${sev}")
fi
else
out+=("older-self:${t}:${sev}")
fi
done
append_older_warn "$t" "$age" "$target"
found=1
done < <(select_milestone_tags "$STABLE_TAG" 2>/dev/null || true)
if [ "$found" = "0" ]; then
echo " (no milestone tags within ±${MILESTONE_TOLERANCE_DAYS}d of $MILESTONE_DAYS)" | tee -a "$SUMMARY"
fi
else
out+=("$v")
fi
@ -296,7 +305,7 @@ done
echo "" | tee -a "$SUMMARY"
echo "=== matrix done (overall=$overall) ===" | tee -a "$SUMMARY"
echo "rule: released app age ≤ ${BLOCKER_MAX_AGE_DAYS}d → BLOCKER on fail; older → WARN" | tee -a "$SUMMARY"
echo "rule: age ≤ ${BLOCKER_MAX_AGE_DAYS}d → BLOCKER; 3/6/9/12mo milestones + older → WARN only" | tee -a "$SUMMARY"
for r in "${RESULTS[@]}"; do
echo " $r" | tee -a "$SUMMARY"
done