--- name: redeploy_cpp_app_windows kind: pipeline lang: bash domain: pipelines version: "1.1.0" purity: impure signature: "redeploy_cpp_app_windows(app_name: string, app_dir: string, [--build]) -> void" description: "Pipeline orquestador para redeployar una app C++ en Windows desde WSL2 en un solo comando. Reemplaza la secuencia manual taskkill+copy+launch+verify e incluye refresh del icon cache del shell." tags: [cpp, windows, redeploy, pipeline, wsl, launcher, cpp-windows] uses_functions: - build_cpp_windows_bash_infra - deploy_cpp_exe_to_windows_bash_infra - launch_cpp_app_windows_bash_infra - is_cpp_app_running_windows_bash_infra - refresh_windows_icon_cache_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/redeploy_cpp_app_windows.sh" params: - name: app_name desc: "Nombre de la app C++ (ej: chart_demo, registry_dashboard). Se usa para localizar el .exe en cpp/build/windows/apps// y el destino Desktop/apps//." - name: app_dir desc: "Ruta absoluta al directorio fuente de la app (ej: /home/lucas/fn_registry/cpp/apps/chart_demo). Requerido para localizar enrichers/, runtime/ y app.md." - name: "--build" desc: "Flag opcional. Si presente, compila la app para Windows antes del deploy. Por defecto off (asume .exe ya compilado)." output: "Imprime 'OK: redeployed (build=yes/no, PID=N)' en stdout. Exit 1 en cualquier paso fallido con mensaje de error indicando el paso." --- ## Ejemplo ```bash # Solo redeploy (asume build ya hecho) redeploy_cpp_app_windows "registry_dashboard" "/home/lucas/fn_registry/projects/fn_monitoring/apps/registry_dashboard" # Con build previo redeploy_cpp_app_windows "chart_demo" "/home/lucas/fn_registry/cpp/apps/chart_demo" --build ``` ## Comportamiento 1. **Parsear flag `--build`** (default off, opt-in). 2. **Si `--build`**: invocar `build_cpp_windows ` para compilar `cpp/build/windows/apps//.exe`. Si falla, exit 1 sin tocar el Desktop. 3. **Deploy**: invocar `deploy_cpp_exe_to_windows "" ""`. Esta función mata el proceso si está vivo (taskkill.exe pre-autorizado), copia exe + DLLs + assets + runtime + enrichers, y preserva `local_files/`. 3b. **Refresh icon cache** (v1.1.0+): invocar `refresh_windows_icon_cache` (best-effort). Llama `ie4uinit.exe -show` para que Explorer recargue `iconcache.db` sin esperar al timestamp. Si falla, no aborta el pipeline. 4. **Launch**: invocar `launch_cpp_app_windows ""` para arrancar la app en Windows. 5. **Wait**: `sleep 1` — espera arranque corto. 6. **Verify**: invocar `is_cpp_app_running_windows ""`. Si NO está vivo → exit 1 con mensaje claro. 7. **Stdout final**: `OK: redeployed (build=yes/no, PID=N)`. ## Argumentos - `app_name` — obligatorio. Nombre corto de la app. - `app_dir` — obligatorio. Ruta absoluta al directorio fuente (donde vive `app.md`, `enrichers/`, `runtime/`). - `--build` — opcional. Activa la compilación antes del deploy. ## Errores Cada paso es punto de fallo independiente. En caso de error el pipeline imprime a stderr indicando qué paso falló y hace exit 1: - `ERROR [build]: build_cpp_windows falló` — fallo de compilación. - `ERROR [deploy]: deploy_cpp_exe_to_windows falló` — fallo al copiar archivos. - `ERROR [launch]: launch_cpp_app_windows falló` — la app no arrancó. - `ERROR [verify]: no está corriendo` — la app arrancó pero murió antes de 1s. ## Notas - Ahorra ~6 comandos manuales por redeploy (taskkill + cp + cd + start + sleep + tasklist). Motivación: issue 0086 — maximizar `Reg %` registrando esta secuencia como pipeline trazable. - Cada `fn run redeploy_cpp_app_windows_bash_pipelines` queda registrado en `call_monitor/operations.db`, alimentando las métricas del bucle reactivo. - `launch_cpp_app_windows_bash_infra` e `is_cpp_app_running_windows_bash_infra` son creadas por un fn-constructor paralelo. Si aún no existen en el registry al indexar, el indexer lo registra como advertencia pero el pipeline es válido structuralmente. - Tag `launcher` incluido: este pipeline tiene sentido en el Pipeline Launcher TUI (`apps/pipeline_launcher`) — es un workflow interactivo lanzable con argumentos.