Files
fn_registry/.claude/commands/compile.md
T
egutierrez 34c27876e0 feat(compile): Wails support in /compile skill
- New helper: deploy_wails_exe_to_windows_bash_infra
  - taskkill + cp build/bin/<app>.exe to Desktop/apps/<app>/
  - cmd.exe /c start RELAUNCHES the app post-deploy (key diff vs cpp)
  - preserves local_files/, copies appicon.ico if present
- New pipeline: compile_wails_app_bash_pipelines
  - resolve_cpp_app_dir (reused) + wails build -platform windows/amd64
  - auto -tags goolm if app declares matrix_crypto_init
  - delegates deploy + relaunch to deploy_wails_exe_to_windows
- /compile skill dispatches by framework:
  - wails.json present -> compile_wails_app (relaunches)
  - CMakeLists.txt present -> compile_cpp_app (no relaunch)

Refs: matrix_client_pc + matrix_admin_panel (issues 0147, 0163)
2026-05-25 03:11:09 +02:00

3.3 KiB

description
description
Compila app del registry (C++ o Wails Go), copia el .exe a Desktop/apps/<app>/ y relanza en Windows. Wrapper sobre compile_cpp_app o compile_wails_app segun framework declarado en app.md.

/compile — Compila app C++ o Wails y la copia al escritorio de Windows

Wrapper sobre 2 pipelines del registry segun el framework:

  • C++ (imgui / cmake)compile_cpp_app_bash_pipelines. Cross-compile MinGW + assets/enrichers/runtime + taskkill, NO relanza.
  • Wails Go (matrix_client_pc, matrix_admin_panel, etc.)compile_wails_app_bash_pipelines. wails build -platform windows/amd64 con -tags goolm si E2EE + taskkill + RELANZA la app tras copy.

Toda la logica vive en el registry (resolver app desde CWD/arg, build, deploy con preservacion de local_files/).

Dispatch

cd /home/lucas/fn_registry

# Detecta framework via wails.json o CMakeLists.txt en el dir del app
APP="$ARGUMENTS"
RESOLVED=$(bash -c '
  source bash/functions/infra/resolve_cpp_app_dir.sh
  resolve_cpp_app_dir "'"$APP"'"
' 2>/dev/null) || true
APP_DIR="$(echo "$RESOLVED" | cut -f2)"

if [ -n "$APP_DIR" ] && [ -f "$APP_DIR/wails.json" ]; then
    ./fn run compile_wails_app "$ARGUMENTS"
elif [ -n "$APP_DIR" ] && [ -f "$APP_DIR/CMakeLists.txt" ]; then
    ./fn run compile_cpp_app "$ARGUMENTS"
else
    echo "ERROR: no se detecto framework (falta wails.json o CMakeLists.txt en $APP_DIR)" >&2
    exit 1
fi

Argumento

$ARGUMENTS — opcional. Nombre de app (ej: chart_demo, matrix_client_pc).

  • Sin argumento: deduce desde pwd si estas dentro de cpp/apps/<X>/, apps/<X>/ o projects/*/apps/<X>/.
  • Si no se puede deducir y no se pasa argumento, lista las apps disponibles en stderr y aborta.

Que hace el pipeline (C++)

  1. resolve_cpp_app_dir_bash_infra — resuelve <app_name> y <dir absoluto>.
  2. Verifica CMakeLists.txt.
  3. build_cpp_windows_bash_infra <app> — cross-compila con MinGW.
  4. deploy_cpp_exe_to_windows_bash_infra <app> <dir>:
    • taskkill.exe /IM <app>.exe /F.
    • Copia <app>.exe + DLLs.
    • rsync assets/, enrichers/, runtime/ (si aplica).
    • Preserva local_files/.
    • NO relanza.

Que hace el pipeline (Wails)

  1. resolve_cpp_app_dir_bash_infra (reusado — sirve para Wails apps tambien).
  2. Verifica wails.json + go.mod.
  3. Detecta -tags goolm automaticamente (grep matrix_crypto_init en app.md o build:tags en wails.json).
  4. wails build -platform windows/amd64 [-tags goolm].
  5. deploy_wails_exe_to_windows_bash_infra <app> <dir>:
    • taskkill.exe /IM <app>.exe /F.
    • Copia <app>.exe (+ appicon.ico si existe).
    • Relanza via cmd.exe /c start "" <app>.exe.
    • Preserva local_files/.

Notas

  • Solo target Windows hoy. Linux ya lo da wails build / cpp/build/ nativo.
  • Variables override-ables: BUILD_WIN, WIN_DESKTOP_APPS, FN_REGISTRY_ROOT.
  • Si la app C++ no esta registrada en cpp/CMakeLists.txt, el build falla — registrar siguiendo .claude/rules/cpp_apps.md §5.
  • Si la app Wails falla build con no required module provides package, correr go mod tidy en el dir del app primero.
  • Para tocar la logica: editar bash/functions/{infra,pipelines}/{resolve_cpp_app_dir,build_cpp_windows,deploy_{cpp,wails}_exe_to_windows,compile_{cpp,wails}_app}.sh, no este wrapper.