--- name: run_kotlin_app_tests kind: pipeline lang: bash domain: pipelines version: "1.0.0" purity: impure signature: "run_kotlin_app_tests(project_dir: string, avd_name?: string, --skip-emulator?, --no-stop?) -> int" description: "Pipeline e2e completo de testing app Kotlin: unit JVM + screenshot Roborazzi + build APK + instrumented Compose en emulador." tags: [android, kotlin, compose, test, e2e, launcher] uses_functions: - gradle_unit_test_bash_infra - gradle_screenshot_test_bash_infra - gradle_assemble_debug_bash_infra - gradle_instrumented_test_bash_infra - android_emulator_list_bash_infra - android_emulator_start_bash_infra - android_emulator_stop_bash_infra - adb_wsl_bash_infra uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" file_path: "bash/functions/pipelines/run_kotlin_app_tests.sh" params: - name: project_dir desc: "Raiz del proyecto Android. Debe contener gradlew. Puede ser relativo al cwd o absoluto." - name: avd_name desc: "AVD para instrumented tests. Default: Medium_Phone_API_35. Debe existir en la lista de AVDs del sistema. Ignorado si se pasa --skip-emulator." - name: --skip-emulator desc: "Saltar instrumented tests. El pipeline solo ejecuta unit tests, screenshot tests y build APK, luego sale con exit 0." - name: --no-stop desc: "No parar el emulador al finalizar los instrumented tests. Util en desarrollo iterativo para no esperar el arranque en la siguiente ejecucion." output: "Stdout con tabla resumen de cada step (nombre, OK/FAIL/SKIP, tiempo). Exit 0 = todos los tests pasan. Exit codes: 1=unit tests fallaron, 2=screenshot tests fallaron, 3=build APK fallado, 4=emulador no encontrado o no arranca, 5=instrumented tests fallaron." --- ## Ejemplo ```bash # Suite completa con AVD por defecto bash bash/functions/pipelines/run_kotlin_app_tests.sh apps/my_kotlin_app # Suite completa con AVD especifico bash bash/functions/pipelines/run_kotlin_app_tests.sh apps/my_kotlin_app Pixel_7_API_34 # Solo tests JVM (unit + screenshot + build), sin emulador bash bash/functions/pipelines/run_kotlin_app_tests.sh apps/my_kotlin_app --skip-emulator # Suite completa, dejar emulador corriendo al final bash bash/functions/pipelines/run_kotlin_app_tests.sh apps/my_kotlin_app Medium_Phone_API_35 --no-stop # Desde el launcher (fn run) fn run run_kotlin_app_tests apps/my_kotlin_app ``` ## Notas - Fail-fast: si un paso falla, el pipeline imprime el resumen parcial y sale con el exit code del paso fallido. No continua al siguiente. - El orden de los flags tras `project_dir` es libre: `avd_name` es el primer argumento no-flag; `--skip-emulator` y `--no-stop` pueden aparecer en cualquier posicion. - El arranque del emulador usa `android_emulator_start` que es idempotente: si ya hay un emulador corriendo con ese AVD, no lanza otro. - `adb_wsl` se sourcea para resolver `$ADB` apuntando a `adb.exe` en Windows desde WSL2. - El paso `emulator_stop` se registra como SKIP en la tabla resumen cuando se pasa `--no-stop`. - Requiere WSL2 + Android SDK instalado en Windows. `ANDROID_HOME` o `~/android-sdk/env.sh` deben estar disponibles.