docs: CLAUDE.md actualizado con fn run, tipos Go en functions/, bash functions

Documentación de fn run para todos los lenguajes, nueva ubicación de tipos Go,
sección de uso por agentes. Añadidas funciones Bash del registry (shell, infra,
core, pipelines).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-28 23:23:30 +01:00
parent 72c572e1ea
commit 54be36dd63
11 changed files with 438 additions and 4 deletions
@@ -0,0 +1,65 @@
---
name: setup_metabase_volume
kind: pipeline
lang: bash
domain: pipelines
version: "1.0.0"
purity: impure
signature: "setup_metabase_volume([registry_db_path: string], [container_name: string], [dest_path: string]) -> void"
description: "Copia registry.db al contenedor Docker de Metabase verificando existencia del archivo, disponibilidad de docker, estado del contenedor y coincidencia de tamaños. Todos los argumentos son opcionales con defaults razonables."
tags: [metabase, docker, setup, launcher, pipeline, bash, infra]
uses_functions:
- assert_file_exists_bash_shell
- assert_command_exists_bash_shell
- assert_docker_container_running_bash_infra
- docker_cp_file_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/setup_metabase_volume.sh"
---
## Ejemplo
```bash
# Con defaults
./functions/pipelines/setup_metabase_volume.sh
# Con argumentos explícitos
./functions/pipelines/setup_metabase_volume.sh \
/home/lucas/fn_registry/registry.db \
metabase \
/registry.db
```
## Flujo
1. `assert_file_exists` — verifica que `registry.db` existe localmente y obtiene su tamaño
2. `assert_command_exists` — verifica que `docker` está disponible en PATH
3. `assert_docker_container_running` — verifica que el contenedor destino está activo; si falla, muestra lista de contenedores activos
4. `docker_cp_file` — ejecuta `docker cp` y verifica que los tamaños local y remoto coinciden
## Notas
El pipeline usa `set -euo pipefail` — cualquier fallo en una función individual detiene la ejecución.
Las funciones individuales se sourcean desde sus rutas en el registry, relativas a `REGISTRY_ROOT` detectado automáticamente desde la ubicación del script.
Defaults:
- `REGISTRY_DB_PATH`: `/home/lucas/fn_registry/registry.db`
- `CONTAINER_NAME`: `metabase`
- `DEST_PATH`: `/registry.db`
Nota de persistencia: `docker cp` copia al contenedor en ejecución. Si el contenedor se reinicia, el archivo se pierde. Para persistencia real, montar el directorio como volumen en docker-compose:
```yaml
volumes:
- /home/lucas/fn_registry:/fn_registry:ro
```
Y usar `--registry-db-path /fn_registry/registry.db`.
+82
View File
@@ -0,0 +1,82 @@
#!/usr/bin/env bash
# setup_metabase_volume
# ---------------------
# Copia registry.db al contenedor Docker de Metabase.
# Compone: assert_file_exists + assert_command_exists +
# assert_docker_container_running + docker_cp_file
#
# USO:
# ./setup_metabase_volume.sh [REGISTRY_DB_PATH] [CONTAINER_NAME] [DEST_PATH]
#
# ARGUMENTOS (opcionales, con defaults):
# REGISTRY_DB_PATH Ruta local al registry.db
# Default: /home/lucas/fn_registry/registry.db
# CONTAINER_NAME Nombre del contenedor Docker de Metabase
# Default: metabase
# DEST_PATH Ruta destino dentro del contenedor
# Default: /registry.db
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REGISTRY_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
source "$REGISTRY_ROOT/bash/functions/shell/assert_file_exists.sh"
source "$REGISTRY_ROOT/bash/functions/shell/assert_command_exists.sh"
source "$REGISTRY_ROOT/bash/functions/infra/assert_docker_container_running.sh"
source "$REGISTRY_ROOT/bash/functions/infra/docker_cp_file.sh"
REGISTRY_DB_PATH="${1:-/home/lucas/fn_registry/registry.db}"
CONTAINER_NAME="${2:-metabase}"
DEST_PATH="${3:-/registry.db}"
echo "[setup_metabase_volume] Configuracion:"
echo " registry.db local : $REGISTRY_DB_PATH"
echo " contenedor Docker : $CONTAINER_NAME"
echo " ruta en contenedor : $DEST_PATH"
echo ""
# 1. Verificar archivo local
local_size=$(assert_file_exists "$REGISTRY_DB_PATH")
echo "[setup_metabase_volume] Archivo local encontrado: ${local_size} bytes"
# 2. Verificar que docker esta disponible
assert_command_exists docker
echo "[setup_metabase_volume] docker disponible en PATH."
# 3. Verificar que el contenedor esta corriendo
if ! assert_docker_container_running "$CONTAINER_NAME"; then
echo "" >&2
echo "Contenedores activos:" >&2
docker ps --format " {{.Names}}\t{{.Status}}\t{{.Image}}" >&2
echo "" >&2
echo "Si el contenedor se llama diferente, pasa el nombre como segundo argumento:" >&2
echo " ./setup_metabase_volume.sh $REGISTRY_DB_PATH <nombre_contenedor>" >&2
exit 1
fi
echo "[setup_metabase_volume] Contenedor '$CONTAINER_NAME' encontrado y activo."
# 4. Copiar archivo y verificar tamaños
echo "[setup_metabase_volume] Copiando $REGISTRY_DB_PATH -> ${CONTAINER_NAME}:${DEST_PATH} ..."
result=$(docker_cp_file "$REGISTRY_DB_PATH" "$CONTAINER_NAME" "$DEST_PATH")
remote_size=$(echo "$result" | grep -o '"remote_size":[0-9]*' | cut -d: -f2)
echo "[setup_metabase_volume] OK Copia completada y verificada."
echo "[setup_metabase_volume] Tamanio: ${local_size} bytes (local) = ${remote_size} bytes (remoto)"
echo ""
echo "---------------------------------------------------------------------"
echo "registry.db disponible en el contenedor como: $DEST_PATH"
echo ""
echo "Ahora ejecuta main.py con:"
echo ""
echo " METABASE_ADMIN_PASSWORD=<password> \\"
echo " REGISTRY_DB_PATH=${DEST_PATH} \\"
echo " python apps/metabase_registry/main.py"
echo ""
echo "O bien:"
echo ""
echo " python apps/metabase_registry/main.py \\"
echo " --admin-password <password> \\"
echo " --registry-db-path ${DEST_PATH}"
echo "---------------------------------------------------------------------"