82 lines
2.3 KiB
Bash
Executable File
82 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ $# -ne 2 ]]; then
|
|
echo "Uso: $0 config.json /ruta/destino" >&2
|
|
exit 1
|
|
fi
|
|
|
|
CONFIG_PATH="$1"
|
|
DEST_PATH="$2"
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
TEMPLATE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
if [[ ! -f "$CONFIG_PATH" ]]; then
|
|
echo "Config no encontrada: $CONFIG_PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
python3 - "$CONFIG_PATH" "$DEST_PATH" "$TEMPLATE_ROOT" <<'PY'
|
|
import json, sys, pathlib, shutil
|
|
|
|
config_path = pathlib.Path(sys.argv[1]).expanduser().resolve()
|
|
dest_root = pathlib.Path(sys.argv[2]).expanduser().resolve()
|
|
template_root = pathlib.Path(sys.argv[3]).resolve()
|
|
|
|
with open(config_path) as f:
|
|
config = json.load(f)
|
|
|
|
def flatten(prefix, value, store):
|
|
if isinstance(value, dict):
|
|
for k, v in value.items():
|
|
flatten(f"{prefix}{k.upper()}_", v, store)
|
|
elif isinstance(value, list):
|
|
store[prefix[:-1]] = ", ".join(str(v) for v in value)
|
|
else:
|
|
store[prefix[:-1]] = str(value)
|
|
|
|
replacements = {}
|
|
for key, val in config.items():
|
|
if isinstance(val, (dict, list)):
|
|
flatten(f"{key.upper()}_", val, replacements)
|
|
else:
|
|
replacements[key.upper()] = str(val)
|
|
|
|
def render_text(text: str) -> str:
|
|
for key, value in replacements.items():
|
|
text = text.replace(f"{{{{{key}}}}}", value)
|
|
return text
|
|
|
|
template_paths = [
|
|
"CULTURA-AGENTE.template.md",
|
|
"agents.template.md",
|
|
"memory.template.md",
|
|
"context/README.template.md",
|
|
"context/hosts.template.md",
|
|
"context/traefik.template.md",
|
|
"context/cron.template.md",
|
|
"context/n8n.template.md",
|
|
"context/git.template.md",
|
|
"context/docker.template.md",
|
|
"context/scripts.template.md",
|
|
"context/opencode.template.md",
|
|
"context/otros.template.md",
|
|
]
|
|
|
|
for rel in template_paths:
|
|
template = template_root / rel
|
|
if not template.exists():
|
|
print(f"Aviso: {rel} no existe, omitiendo", file=sys.stderr)
|
|
continue
|
|
relative = template.relative_to(template_root)
|
|
target_name = relative.name.replace(".template", "")
|
|
target_rel = relative.parent / target_name
|
|
target_path = dest_root / target_rel
|
|
target_path.parent.mkdir(parents=True, exist_ok=True)
|
|
content = template.read_text()
|
|
rendered = render_text(content)
|
|
target_path.write_text(rendered)
|
|
print(f"Renderizado {target_rel}")
|
|
|
|
PY
|