These scripts back the workflow:
.github/workflows/qa-android-ui-tests.yml
The workflow now calls a small set of phase-oriented scripts instead of many tiny one-off files.
Flavor resolution is runner-driven, not hardcoded in the repo.
- Source of truth:
/etc/android-qa/flavors.json(on the self-hosted runner) - Executed via:
bash scripts/qa_android_ui_tests/execution_setup.sh resolve-flavor - Exports for later workflow steps:
S3_FOLDER,APP_ID,PACKAGES_TO_UNINSTALL
validation.sh: input validation, TAG selector parsing, and resolved value logging.execution_setup.sh: runner prep, flavor/APK resolution, device prep, secrets fetch, and test artifact setup.run_ui_tests.sh: instrumentation execution/sharding plus failed-test auto-reruns (explicit per-device retry lists with even count balancing).reporting.sh: Allure pull/merge/generate/publish plus cleanup subcommands.
resolve_flavor.py: parseflavors.jsonand export flavor-derived env vars.select_apks.py: resolve NEW/OLD APK keys based on input/build selection rules.fetch_secrets_json.py: build runtimesecrets.jsonfrom 1Password vault items.merge_allure_results.py: merge per-device Allure outputs and attach metadata.extract_failed_tests.py: extract failed test IDs (Class#method) from one attempt's Allure result files.