chore: auto-commit (286 archivos)
- .claude/agents/fn-orquestador/SKILL.md - .claude/commands/fn_claude.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - .claude/rules/ids_naming.md - CHANGELOG.md - apps/dag_engine/README.md - apps/dag_engine/api.go - apps/dag_engine/dags_migrated/example.yaml - apps/dag_engine/dags_migrated/example_lineage_tracking.yaml - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
---
|
||||
name: redeploy_all_cpp_apps
|
||||
kind: pipeline
|
||||
lang: bash
|
||||
domain: pipelines
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "redeploy_all_cpp_apps(filter?: string) -> void"
|
||||
description: "Cross-compila TODOS los apps C++ del registry en un solo cmake pass y despliega cada .exe al Desktop de Windows. Mas rapido que N builds individuales. Acepta filtro de nombre para despliegue parcial."
|
||||
tags: [cpp, windows, deploy, redeploy, bulk, cpp-windows]
|
||||
uses_functions:
|
||||
- build_cpp_windows_bash_infra
|
||||
- deploy_cpp_exe_to_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_all_cpp_apps.sh"
|
||||
params:
|
||||
- name: filter
|
||||
desc: "Opcional. Substring para limitar el deploy a apps cuyo nombre lo contenga (ej: 'graph' solo despliega apps con 'graph' en el nombre). Sin valor = todas las apps."
|
||||
output: "Imprime tabla resumen con OK/SKIPPED/FAILED y nombres de cada app. Exit 1 si al menos una app fallo el deploy."
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```bash
|
||||
# Recompilar y redesplegar TODAS las apps C++ tras un cambio en cpp/framework/
|
||||
./fn run redeploy_all_cpp_apps
|
||||
|
||||
# Solo apps cuyo nombre contenga "graph"
|
||||
./fn run redeploy_all_cpp_apps graph
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Tras un cambio en `cpp/framework/app_base.cpp`, `cpp/functions/core/*` o cualquier
|
||||
funcion linkada a multiples apps. Ahorra correr `redeploy_cpp_app_windows <name> <dir>`
|
||||
N veces — un solo cmake pass compila todo el arbol en paralelo.
|
||||
|
||||
## Comportamiento
|
||||
|
||||
1. **Build**: invoca `build_cpp_windows` sin argumento (compila todo el arbol con
|
||||
`-j$(nproc)`). Un solo cmake pass — mucho mas rapido que N builds individuales.
|
||||
2. **Descubrimiento**: itera `apps/*/CMakeLists.txt` y `projects/*/apps/*/CMakeLists.txt`.
|
||||
**No** usa `cpp/apps/` (deprecado tras issue 0096).
|
||||
3. **Filtro** (opcional): si se paso un argumento, solo procesa apps cuyo `basename`
|
||||
contiene el substring.
|
||||
4. **Por cada app**:
|
||||
- Localiza `.exe` en `cpp/build/windows/apps/<name>/<name>.exe`; si no existe,
|
||||
busca bajo `cpp/build/windows/` como fallback.
|
||||
- Si no hay `.exe`: log SKIP, continua (no aborta — apps headless o sub-repos no
|
||||
clonados no tienen build target).
|
||||
- `taskkill.exe /IM <name>.exe /F` silencioso (no aborta si falla).
|
||||
- `deploy_cpp_exe_to_windows <name> <app_dir>` (copia exe + DLLs + assets +
|
||||
enrichers + runtime, preserva `local_files/`).
|
||||
- Error por app: log FAILED, continua con la siguiente.
|
||||
5. **Resumen final**: tabla `OK / SKIPPED / FAILED` con nombres. Exit 1 si hay
|
||||
al menos un FAILED.
|
||||
|
||||
## Variables de entorno
|
||||
|
||||
| Variable | Default | Descripcion |
|
||||
|---|---|---|
|
||||
| `FN_REGISTRY_ROOT` | auto-detect | Raiz del registry (busca hacia arriba desde el script) |
|
||||
| `BUILD_WIN` | `$root/cpp/build/windows` | Directorio de build Windows |
|
||||
| `WIN_DESKTOP_APPS` | `/mnt/c/Users/lucas/Desktop/apps` | Destino de deploy en Windows |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- Solo Windows (cross-compile mingw-w64 + Desktop deploy via WSL2). En Linux puro no aplica.
|
||||
- `taskkill.exe` requiere WSL2 con interop habilitado. No funciona en WSL1 ni Linux nativo.
|
||||
- Algunas apps pueden no estar en el grafo cmake actual (sub-repo no clonado, `add_subdirectory`
|
||||
protegido por `if(EXISTS ...)`). El pipeline las SKIPea sin abortar — comportamiento esperado.
|
||||
- Build paralelo puede consumir varios GB de RAM. Si hay OOM, reducir paralelismo exportando
|
||||
`BUILD_JOBS=4` antes de invocar (actualmente la funcion `build_cpp_windows` usa `$(nproc)`;
|
||||
si necesitas override edita `BUILD_JOBS` como variable de entorno custom o fork la funcion).
|
||||
- El loop de deploy atrapa errores por app (`|| { failed+=...; continue; }`) para no abortar
|
||||
en el primer fallo — todas las apps se intentan aunque alguna falle.
|
||||
|
||||
## Capability growth log
|
||||
|
||||
- v1.0.0 (2026-05-16) — creacion. Tras issue 0096 (apps movidas a `apps/<X>/`) el patron "recompilar+desplegar todas tras un cambio en `cpp/framework/`" se repitio varias veces sin un wrapper. Pipeline tolerante a fallos: build best-effort (test_* roto en mingw no aborta), deploy por app captura fallos individuales, summary OK/SKIPPED/FAILED al final. Primera corrida real (16 May 2026): 12 OK / 1 SKIP (`data_factory` sin .exe target) / 0 FAILED.
|
||||
|
||||
## Notas operativas (2026-05-16)
|
||||
|
||||
- `build_cpp_windows` sin arg compila el arbol entero. Si hay targets rotos (ej. `test_llm_anthropic`, `test_graph_icons` usan `setenv()` no disponible en mingw-w64), el pipeline logea `[1/2] Build returned exit=N — continuing with deploy of available exes` y sigue con la fase de deploy. Cada app sin `.exe` queda SKIPPED.
|
||||
- Tras una corrida exitosa, los `.exe` quedan en `/mnt/c/Users/lucas/Desktop/apps/<name>/<name>.exe`. Lanzar individualmente con `./fn run is_cpp_app_running_windows <name>` para chequear y `launch_cpp_app_windows <name>` para arrancar.
|
||||
Reference in New Issue
Block a user