--- name: deploy_app kind: pipeline lang: go domain: infra version: "1.0.0" purity: impure signature: "func DeployApp(appDir string, imageName string, port int, envVars map[string]string) (string, error)" description: "Orquesta el deploy completo de una app Go en Docker. Pasos: genera Dockerfile, lo escribe a disco, construye la imagen y lanza el contenedor en modo detach con port mapping. Retorna el container ID." tags: [docker, deploy, go, pipeline, infra, container, pendiente-usar] uses_functions: [generate_dockerfile_go_infra, write_dockerfile_go_infra, docker_build_image_go_infra, docker_run_container_go_infra] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] params: - name: appDir desc: "ruta del directorio de la app Go (contiene main.go)" - name: imageName desc: "nombre de la imagen Docker a construir y contenedor a lanzar" - name: port desc: "puerto a mapear (hostPort == containerPort)" - name: envVars desc: "mapa de variables de entorno a pasar al contenedor" output: "ID del contenedor Docker lanzado exitosamente" tested: false tests: [] test_file_path: "" file_path: "functions/infra/deploy_app.go" --- ## Ejemplo ```go containerID, err := DeployApp( "/home/user/apps/myapp", "myapp", 8080, map[string]string{ "DB_HOST": "postgres", "PORT": "8080", }, ) if err != nil { log.Fatal(err) } fmt.Println("Contenedor lanzado:", containerID) ``` ## Notas Pipeline de 4 pasos: generate_dockerfile (pura) → write_dockerfile → docker_build_image → docker_run_container. El nombre del contenedor e imagen coinciden con imageName. El port mapping es simetrico (hostPort == containerPort). Si cualquier paso falla, el pipeline retorna error con contexto del paso fallido. No hace rollback automatico — para limpiar usar stop_app.