a03675113a
- .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>
103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# cpp-windows
|
|
|
|
Operar apps C++ del registry en Windows desde WSL2: compilar, desplegar, lanzar, verificar y relanzar.
|
|
|
|
## Funciones del grupo
|
|
|
|
| ID | Firma corta | Que hace |
|
|
|---|---|---|
|
|
| `build_cpp_windows_bash_infra` | `build_cpp_windows([target])` | Cross-compila apps C++ para Windows con mingw-w64 |
|
|
| `deploy_cpp_exe_to_windows_bash_infra` | `deploy_cpp_exe_to_windows(app_name, app_dir)` | Copia .exe + DLLs + assets al Desktop Windows, mata proceso previo |
|
|
| `launch_cpp_app_windows_bash_infra` | `launch_cpp_app_windows(app_name, [desktop_dir])` | Lanza .exe en Windows via cmd.exe /c start, retorna inmediatamente |
|
|
| `is_cpp_app_running_windows_bash_infra` | `is_cpp_app_running_windows(app_name)` | Exit 0 si el proceso esta vivo (tasklist.exe), stdout: `RUNNING: PID=N MEM=...K` |
|
|
| `launch_cpp_app_windows_bash_infra` | `launch_cpp_app_windows(app_name, [desktop_dir])` | Lanza .exe en Windows via cmd.exe /c start, retorna inmediatamente |
|
|
| `e2e_run_cpp_windows_bash_infra` | `e2e_run_cpp_windows(target, [--no-build], [--no-deploy])` | Build + deploy + run headless de app C++ (tests e2e tipo altsnap) |
|
|
| `redeploy_cpp_app_windows_bash_pipelines` | `redeploy_cpp_app_windows(app_name, app_dir, [--build])` | Pipeline completo (UNA app): build? + deploy + launch + verify |
|
|
| `redeploy_all_cpp_apps_bash_pipelines` | `redeploy_all_cpp_apps([filter])` | Bulk: compila TODO el arbol cpp/ en un cmake pass + despliega cada `.exe`. Filtro opcional por substring de nombre. Tolerante a fallos por app. |
|
|
| `resolve_cpp_app_dir_bash_infra` | `resolve_cpp_app_dir([app_name])` | Resuelve `<name>\t<abs_dir>`. Busca en `apps/`, `cpp/apps/` (legacy), `projects/*/apps/`. Sin arg deduce desde CWD. |
|
|
|
|
## Ejemplo canonico
|
|
|
|
### Redeploy rapido (build ya hecho)
|
|
|
|
```bash
|
|
source bash/functions/infra/deploy_cpp_exe_to_windows.sh
|
|
source bash/functions/infra/launch_cpp_app_windows.sh
|
|
source bash/functions/infra/is_cpp_app_running_windows.sh
|
|
|
|
deploy_cpp_exe_to_windows "registry_dashboard" \
|
|
"/home/lucas/fn_registry/projects/fn_monitoring/apps/registry_dashboard"
|
|
launch_cpp_app_windows "registry_dashboard"
|
|
sleep 1
|
|
if is_cpp_app_running_windows "registry_dashboard"; then
|
|
echo "OK: arrancado"
|
|
else
|
|
echo "ERROR: no arranco" >&2; exit 1
|
|
fi
|
|
```
|
|
|
|
### Via pipeline (un solo comando)
|
|
|
|
```bash
|
|
source bash/functions/pipelines/redeploy_cpp_app_windows.sh
|
|
|
|
# Sin recompilar
|
|
redeploy_cpp_app_windows "registry_dashboard" \
|
|
"/home/lucas/fn_registry/projects/fn_monitoring/apps/registry_dashboard"
|
|
|
|
# Con recompilacion previa
|
|
redeploy_cpp_app_windows "chart_demo" \
|
|
"/home/lucas/fn_registry/cpp/apps/chart_demo" --build
|
|
```
|
|
|
|
### Comprobar si esta vivo antes de decidir
|
|
|
|
```bash
|
|
source bash/functions/infra/is_cpp_app_running_windows.sh
|
|
|
|
if is_cpp_app_running_windows "registry_dashboard"; then
|
|
echo "Ya esta corriendo — skip launch"
|
|
else
|
|
launch_cpp_app_windows "registry_dashboard"
|
|
fi
|
|
```
|
|
|
|
## Fronteras
|
|
|
|
- No gestiona builds Linux ni assets de Linux — solo el flujo Windows.
|
|
- No verifica que la app funcione correctamente, solo que el proceso existe (`tasklist.exe`).
|
|
- No gestiona credenciales ni configuracion de la app — eso es responsabilidad de cada app via `local_files/`.
|
|
- Tests automatizados en CI no son posibles — requieren WSL2 con Windows activo.
|
|
|
|
## Prerequisitos
|
|
|
|
- WSL2 con interop a Windows habilitado (`tasklist.exe`, `cmd.exe`, `wslpath` accesibles).
|
|
- `mingw-w64` instalado en WSL para `build_cpp_windows` (`sudo apt install mingw-w64`).
|
|
- El .exe compilado en `cpp/build/windows/apps/<app>/` antes de `deploy_cpp_exe_to_windows`.
|
|
|
|
## Notas
|
|
|
|
El flujo estandar es: `build_cpp_windows` → `deploy_cpp_exe_to_windows` → `launch_cpp_app_windows` → `is_cpp_app_running_windows`. El pipeline `redeploy_cpp_app_windows` encapsula los pasos 2-4 (con 1 opcional via `--build`).
|
|
|
|
`deploy_cpp_exe_to_windows` ya incluye un `taskkill.exe` interno — no es necesario matar el proceso manualmente antes de llamarlo. `is_cpp_app_running_windows` es util cuando se quiere tomar la decision de matar/no matar de forma explicita antes del deploy.
|
|
|
|
### Bulk redeploy (2026-05-16)
|
|
|
|
Tras cambios en `cpp/framework/app_base.*` o cualquier funcion linkada por muchos apps, usar:
|
|
|
|
```bash
|
|
./fn run redeploy_all_cpp_apps # todas las apps
|
|
./fn run redeploy_all_cpp_apps graph # solo apps con "graph" en el nombre
|
|
```
|
|
|
|
Build best-effort: si test targets rotos (`test_llm_anthropic`, `test_graph_icons` usan `setenv()` no disponible en mingw), el pipeline avisa pero sigue desplegando los `.exe` que SI se construyeron. Resumen final con OK/SKIPPED/FAILED por app.
|
|
|
|
### Layouts soportados
|
|
|
|
`resolve_cpp_app_dir` (y por tanto `compile_cpp_app`) busca apps en este orden:
|
|
1. `apps/<X>/` — canonical issue 0096.
|
|
2. `cpp/apps/<X>/` — legacy.
|
|
3. `projects/*/apps/<X>/` — apps de proyectos.
|
|
|
|
Tambien deduce desde CWD si la sesion esta dentro de cualquiera de las tres. Fix retroactivo: antes del 2026-05-16 `resolve_cpp_app_dir` no veia `apps/<X>/` y `./fn run compile_cpp_app <name>` fallaba para apps en ese layout.
|