Files
fn_registry/dev/issues/0054-deploy-server-registry-first-refactor.md

5.2 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
0054 deploy_server: refactor registry-first (SSH/systemd/rsync/health/docker-compose) pendiente refactor
registry-quality
deploy
multi-app alta
2026-05-17 2026-05-17

0054 — deploy_server: refactor registry-first (SSH/systemd/rsync/health/docker-compose)

APP Metadata

Campo Valor
ID 0054
Estado pendiente
Prioridad alta
Tipo refactor — apps/deploy_server/

Dependencias

  • 13 funciones del registry ya existentes y testeadas:
    • ssh_check_go_infra, ssh_exec_go_infra, ssh_upload_go_infra, ssh_config_read_go_infra, ssh_config_find_go_infra
    • systemd_install_go_infra, systemd_restart_go_infra, systemd_status_go_infra, systemd_generate_unit_go_infra (pure)
    • rsync_deploy_bash_infra, docker_compose_remote_deploy_bash_infra
    • health_check_http_go_infra
    • vps_setup_app_go_infra
  • Pipelines deploy_app_remote_go_infra y setup_vps_app_go_infra orquestan varias.

Contexto

fn doctor uses-functions (2026-05-07) detecto que apps/deploy_server/ no importa NADA del registry. Toda la logica SSH/systemd/rsync/health/docker-compose esta reimplementada inline en deployer.go (d.sshCheck, d.sshExec, d.rsyncDeploy, d.healthCheck, d.generateUnit, d.installUnit, deployDockerCompose).

Esta es la violacion mas grande de la regla registry-first.md actualmente activa. La app fue construida antes de que existieran las funciones del registry equivalentes; las funciones se crearon despues pero deploy_server quedo sin migrar.

Tras sincronizar app.md (2026-05-07) las 13 funciones se quitaron del frontmatter — ahora refleja la realidad pero la deuda real (registry-first compliance) sigue.

Objetivo

Reemplazar implementaciones inline de deployer.go por llamadas a las funciones del registry. Resultado:

  1. apps/deploy_server/*.go importa fn-registry/functions/infra y fn-registry/functions/cybersecurity segun corresponda.
  2. app.md declara las 13 funciones en uses_functions.
  3. Los tests existentes siguen pasando.
  4. fn doctor uses-functions reporta deploy_server_go_infra sin drift.

Arquitectura

Archivos afectados

  • apps/deploy_server/deployer.go — ELIMINAR metodos sshCheck, sshExec, sshUpload, rsyncDeploy, healthCheck, generateUnit, installUnit y reemplazar por llamadas a funciones del registry.
  • apps/deploy_server/docker_compose.go — sustituir deployDockerCompose por docker_compose_remote_deploy_bash_infra.
  • apps/deploy_server/handlers.go (probable) — actualizar callsites.
  • apps/deploy_server/app.md — anadir las 13 deps en uses_functions.
  • apps/deploy_server/go.mod — anadir replace fn-registry => ../.. si no esta.

Tareas

Fase 1 — preparacion

1.1 Listar callsites actuales en deployer.go (grep -n 'd\.\(sshCheck\|sshExec\|sshUpload\|rsyncDeploy\|healthCheck\|generateUnit\|installUnit\)\|deployDockerCompose'). 1.2 Verificar firmas de las funciones del registry vs los metodos inline. Documentar diferencias (parametros distintos, error wrapping). 1.3 Anadir replace directive en go.mod si falta.

Fase 2 — migracion SSH

2.1 Reemplazar d.sshCheck por infra.SshCheck. 2.2 Reemplazar d.sshExec por infra.SshExec. 2.3 Reemplazar d.sshUpload por infra.SshUpload. 2.4 Test build: go build en deploy_server.

Fase 3 — migracion systemd

3.1 Reemplazar d.generateUnit por infra.SystemdGenerateUnit. 3.2 Reemplazar d.installUnit por infra.SystemdInstall. 3.3 Reemplazar restart/status por infra.SystemdRestart, infra.SystemdStatus.

Fase 4 — migracion rsync + http + docker-compose

4.1 Reemplazar d.rsyncDeploy por shell-out a bash/functions/infra/rsync_deploy.sh (es bash, no Go). 4.2 Reemplazar d.healthCheck por infra.HealthCheckHTTP. 4.3 Reemplazar deployDockerCompose por shell-out a bash/functions/infra/docker_compose_remote_deploy.sh.

Fase 5 — tests + docs

5.1 Correr tests existentes. Si hay mocks de los metodos privados, actualizar. 5.2 Actualizar app.md uses_functions con las 13 IDs (orden alfabetico). 5.3 fn index y fn doctor uses-functions debe reportar deploy_server limpio. 5.4 Update CHANGELOG.md con la migracion.

Riesgos

  • Las firmas inline pueden tener parametros adicionales que las del registry no exponen. Mitigacion: si la diferencia es real, abrir proposal para extender la funcion del registry, NO duplicar inline.
  • Tests con mocks de metodos privados rompen. Mitigacion: convertir a integration tests contra docker container o servidor SSH local.
  • Build cross-platform: si infra paquete tiene CGo y deploy_server cross-compila, validar build linux/windows.

Decisiones de diseno

  • No crear adapter layer. Llamada directa a las funciones del registry. Si la firma cambia entre version, se actualiza el callsite — el costo es bajo y mantiene la regla registry-first sin ceremonia.
  • Las funciones bash (rsync_deploy, docker_compose_remote_deploy) se invocan via os/exec con bash <script_path>. NO portar a Go solo para "estar en el mismo lenguaje" — la version bash funciona y es la que el registry mantiene.