- 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
723 B
Bash
Executable File
34 lines
723 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# deploy.sh — Despliega la rama actual a <slug>.localesp.es
|
|
# 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:-${GITHUB_REF_NAME:-}}"
|
|
if [ -z "$branch" ]; then
|
|
usage
|
|
fi
|
|
root="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
Logger::set_tag deploy
|
|
Env::new env "$branch" "$root"
|
|
Logger::info "$(Env::banner env)"
|
|
|
|
Env::deploy env
|
|
|
|
Logger::info "LISTO: $(Env::url env) ($(Env::summary env))"
|
|
}
|
|
|
|
main "$@"
|