750b7abcd5
- .claude/CLAUDE.md - .claude/agents/fn-recopilador/SKILL.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - bash/functions/infra/build_cpp_windows.sh - cpp/CMakeLists.txt - cpp/PATTERNS.md - cpp/framework/app_base.cpp - cpp/framework/app_base.h - dev/issues/README.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
---
|
|
name: generate_compose_traefik
|
|
kind: function
|
|
lang: go
|
|
domain: infra
|
|
version: "1.0.0"
|
|
purity: pure
|
|
signature: "func GenerateComposeTraefik(cfg ComposeTraefikConfig) string"
|
|
description: "Genera el texto YAML de un docker-compose.yml para una app Go desplegada behind Traefik + Coolify. Replica el patron de apps/registry_api/docker-compose.yml. Determinista: orden de EnvVars sigue el orden de entrada."
|
|
tags: [docker, compose, traefik, coolify, yaml, infra, deploy, generator]
|
|
uses_functions: []
|
|
uses_types: [ComposeTraefikConfig_go_infra]
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: ""
|
|
imports: [fmt, strings]
|
|
params:
|
|
- name: cfg
|
|
desc: "configuracion del compose: nombre de proyecto/servicio, contexto de build, puerto, volume, env vars y red de Coolify"
|
|
output: "texto YAML completo del docker-compose.yml listo para escribir a disco"
|
|
tested: true
|
|
tests:
|
|
- "render con volume y multiples envs"
|
|
- "render sin volume"
|
|
- "render sin envs"
|
|
- "project name con guion"
|
|
- "snapshot YAML completo replica patron registry_api"
|
|
test_file_path: "functions/infra/generate_compose_traefik_test.go"
|
|
file_path: "functions/infra/generate_compose_traefik.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
cfg := ComposeTraefikConfig{
|
|
ProjectName: "kanban",
|
|
ServiceName: "kanban",
|
|
BuildContext: "../../",
|
|
Dockerfile: "apps/kanban/Dockerfile",
|
|
Port: 8421,
|
|
VolumeName: "kanban_data",
|
|
EnvVars: []string{"KANBAN_TOKEN"},
|
|
Network: "coolify",
|
|
}
|
|
yaml := GenerateComposeTraefik(cfg)
|
|
os.WriteFile("apps/kanban/docker-compose.yml", []byte(yaml), 0644)
|
|
```
|
|
|
|
## Notas
|
|
|
|
Funcion pura: dado el mismo `ComposeTraefikConfig` siempre produce el mismo YAML. Si `VolumeName` es `""` se omite la seccion `volumes:` y el mount. Si `EnvVars` es nil/vacio se omite la seccion `environment:`. Los env vars se generan con la sintaxis `${KEY:-}` (passthrough con fallback vacio) para que el contenedor arranque sin el `.env` si la variable no es critica.
|