- scripts/lib/env.sh: modelo OOP. Env (aggregate root) compone las entidades SystemdUnit, NginxVhost y TlsCert, más servicios estáticos (Slug, Host, Port, Artifacts, Deps, Logger). Instancias = arrays asociativos globales accedidos vía nameref (local -n); la composición vive en Env::new. - deploy.sh / teardown.sh: pasan a ser entrypoints finos (~33 líneas) que sourcean lib/env.sh. Comparten una única fuente de verdad para "qué es un entorno", eliminando la duplicación de slugify y el regex de vhost. - Comportamiento idéntico al procedural: heredocs de systemd/nginx son byte-idénticos; orquestación de deploy y teardown verificados end-to-end. Requiere bash >= 4.3 (namerefs), ya cubierto en el host runner.
34 lines
702 B
Bash
Executable File
34 lines
702 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# teardown.sh — Elimina el entorno de una rama (al borrar la rama o a mano).
|
|
# Toda la lógica vive en lib/env.sh (modelo OOP). Éste es sólo el entrypoint.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=lib/env.sh
|
|
. "$SCRIPT_DIR/lib/env.sh"
|
|
|
|
usage() {
|
|
echo "usage: $0 <branch>" >&2
|
|
exit 2
|
|
}
|
|
|
|
main() {
|
|
local branch root
|
|
|
|
branch="${1:-}"
|
|
if [ -z "$branch" ]; then
|
|
usage
|
|
fi
|
|
root="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
Logger::set_tag teardown
|
|
Env::new env "$branch" "$root"
|
|
Logger::info "$(Env::identity env)"
|
|
|
|
Env::teardown env
|
|
|
|
Logger::info "entorno eliminado ✓"
|
|
}
|
|
|
|
main "$@"
|