feat(infra): auto-commit con 29 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-14 02:06:44 +02:00
parent 47fac22230
commit ca1bf5a59b
29 changed files with 2148 additions and 11 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ version: "1.0.0"
purity: impure
signature: "compile_cpp_app(app_name?: string) -> void"
description: "Pipeline que resuelve la app C++ desde el nombre o CWD, la cross-compila para Windows con mingw-w64, y despliega el .exe al escritorio de Windows. Composicion de resolve_cpp_app_dir + build_cpp_windows + deploy_cpp_exe_to_windows."
tags: [cpp, compile, windows, mingw, cross-compile, deploy, pipeline, pendiente-usar]
tags: [cpp, compile, windows, mingw, cross-compile, deploy, pipeline, pendiente-usar, cpp-windows]
uses_functions:
- resolve_cpp_app_dir_bash_infra
- build_cpp_windows_bash_infra
@@ -0,0 +1,75 @@
---
name: redeploy_cpp_app_windows
kind: pipeline
lang: bash
domain: pipelines
version: "1.0.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."
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
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/<app>/ y el destino Desktop/apps/<app>/."
- 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: <app_name> 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 <app_name>` para compilar `cpp/build/windows/apps/<app_name>/<app_name>.exe`. Si falla, exit 1 sin tocar el Desktop.
3. **Deploy**: invocar `deploy_cpp_exe_to_windows "<app_name>" "<app_dir>"`. Esta función mata el proceso si está vivo (taskkill.exe pre-autorizado), copia exe + DLLs + assets + runtime + enrichers, y preserva `local_files/`.
4. **Launch**: invocar `launch_cpp_app_windows "<app_name>"` para arrancar la app en Windows.
5. **Wait**: `sleep 1` — espera arranque corto.
6. **Verify**: invocar `is_cpp_app_running_windows "<app_name>"`. Si NO está vivo → exit 1 con mensaje claro.
7. **Stdout final**: `OK: <app_name> 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]: <app> 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.
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
# redeploy_cpp_app_windows — Pipeline orquestador: build (opcional) + deploy + launch + verify
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../infra/build_cpp_windows.sh"
source "$SCRIPT_DIR/../infra/deploy_cpp_exe_to_windows.sh"
source "$SCRIPT_DIR/../infra/launch_cpp_app_windows.sh"
source "$SCRIPT_DIR/../infra/is_cpp_app_running_windows.sh"
redeploy_cpp_app_windows() {
local app_name=""
local app_dir=""
local do_build=0
# Parsear argumentos posicionales y flags
while [[ $# -gt 0 ]]; do
case "$1" in
--build)
do_build=1
shift
;;
-*)
echo "redeploy_cpp_app_windows: flag desconocido: $1" >&2
return 1
;;
*)
if [[ -z "$app_name" ]]; then
app_name="$1"
elif [[ -z "$app_dir" ]]; then
app_dir="$1"
else
echo "redeploy_cpp_app_windows: argumento inesperado: $1" >&2
return 1
fi
shift
;;
esac
done
if [[ -z "$app_name" || -z "$app_dir" ]]; then
echo "redeploy_cpp_app_windows: uso: redeploy_cpp_app_windows <app_name> <app_dir> [--build]" >&2
return 1
fi
# Paso 1: build opcional
if [[ $do_build -eq 1 ]]; then
echo "[1/4] Building $app_name for Windows..."
if ! build_cpp_windows "$app_name"; then
echo "ERROR [build]: build_cpp_windows falló para '$app_name'" >&2
return 1
fi
echo "[1/4] Build OK"
else
echo "[1/4] Build skipped (--build no especificado)"
fi
# Paso 2: deploy (taskkill + copy exe/DLLs/assets/runtime + preserva local_files)
echo "[2/4] Deploying $app_name to Windows Desktop..."
if ! deploy_cpp_exe_to_windows "$app_name" "$app_dir"; then
echo "ERROR [deploy]: deploy_cpp_exe_to_windows falló para '$app_name'" >&2
return 1
fi
echo "[2/4] Deploy OK"
# Paso 3: lanzar la app
echo "[3/4] Launching $app_name..."
if ! launch_cpp_app_windows "$app_name"; then
echo "ERROR [launch]: launch_cpp_app_windows falló para '$app_name'" >&2
return 1
fi
echo "[3/4] Launch OK"
# Paso 4: esperar arranque y verificar
sleep 1
echo "[4/4] Verifying $app_name is running..."
local pid=""
if ! pid=$(is_cpp_app_running_windows "$app_name"); then
echo "ERROR [verify]: $app_name no está corriendo tras el lanzamiento. Revisa logs en Desktop/apps/$app_name/." >&2
return 1
fi
echo "[4/4] Running OK"
local build_label="no"
[[ $do_build -eq 1 ]] && build_label="yes"
echo "OK: $app_name redeployed (build=$build_label, PID=$pid)"
}
# Ejecutar si se llama directamente (fn run lo invoca como script)
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
redeploy_cpp_app_windows "$@"
fi