Files
fn_registry/bash/functions/infra/rsync_deploy.md
T
egutierrez 6b8bcd0939 feat: funciones bash de deploy — rsync_deploy y gitea_create_webhook
rsync_deploy sincroniza directorio local a remoto via SSH con
exclusiones estándar (.git, node_modules, *.db, etc.).
gitea_create_webhook crea webhook de push en un repo Gitea para
auto-deploy en cada commit.
2026-04-12 17:29:56 +02:00

53 lines
2.0 KiB
Markdown

---
name: rsync_deploy
kind: function
lang: bash
domain: infra
version: "1.0.0"
purity: impure
signature: "rsync_deploy(local_dir: string, ssh_alias: string, remote_dir: string) -> json"
description: "Sincroniza un directorio local a un host remoto via rsync+SSH. Excluye archivos de desarrollo y bases de datos locales. Crea el directorio remoto si no existe."
tags: [rsync, deploy, sync, ssh, remote, infra]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
- name: local_dir
desc: "ruta al directorio local a sincronizar (ej: apps/dag_engine/)"
- name: ssh_alias
desc: "alias SSH del host destino definido en ~/.ssh/config (ej: myserver)"
- name: remote_dir
desc: "ruta absoluta del directorio destino en el host remoto (ej: /opt/apps/dag_engine)"
output: "JSON con files_transferred (int), total_size (string), ssh_alias (string), remote_dir (string)"
tested: false
tests: []
test_file_path: ""
file_path: "bash/functions/infra/rsync_deploy.sh"
---
## Ejemplo
```bash
source bash/functions/infra/rsync_deploy.sh
# Deploy de una app al servidor de producción
result=$(rsync_deploy "apps/dag_engine/" "prod-server" "/opt/apps/dag_engine")
echo "$result"
# {"files_transferred": 12, "total_size": "1.23 MB", "ssh_alias": "prod-server", "remote_dir": "/opt/apps/dag_engine"}
# Deploy con ruta absoluta local
rsync_deploy "/home/lucas/fn_registry/apps/myapp/" "myserver" "/opt/myapp"
```
## Notas
- Usa `rsync -avz --delete`: archivos borrados localmente se borran también en el remoto.
- Antes del rsync crea el directorio remoto con `ssh mkdir -p` para evitar errores si no existe.
- Archivos excluidos: `.git`, `operations.db*`, `*.exe`, `node_modules`, `.venv`, `__pycache__`, `build/`, `*.db-shm`, `*.db-wal`.
- El JSON de salida va a stdout; los mensajes de progreso y errores van a stderr.
- Exit code 1 si rsync falla o si el directorio local no existe.
- El `ssh_alias` se resuelve con la configuración de `~/.ssh/config`, incluyendo host, user, identityfile y puerto.