#!/usr/bin/env bash # PANELS · aplica los changelogs de Liquibase contra Postgres. # # Requiere las credenciales del rol "_owner" de cada módulo (nunca el rol # "_app" -- ese es solo para runtime, sin privilegios de DDL). Se leen de # variables de entorno con el mismo nombre que usan los secrets de la app: # DATABASE_URL_PLATFORM_OWNER (jdbc: panels_platform) # DATABASE_URL_IAM_OWNER (jdbc: panels_product, schema iam) # DATABASE_URL_CORE_OWNER (jdbc: panels_product, schema core) # # Formato esperado: postgresql://usuario:password@host:puerto/basededatos # # Uso: # set -a && source .env.dev-local && set +a && ./db/update.sh all # ./db/update.sh core --context-filter=dev set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" "$ROOT/db/bootstrap-tools.sh" LIQUIBASE="$ROOT/db/tools/liquibase/liquibase" PG_JDBC="$ROOT/db/tools/postgresql-jdbc.jar" TARGET="${1:-all}" shift || true EXTRA_ARGS=("$@") # postgresql://user:pass@host:port/db -> jdbc:postgresql://host:port/db + user/pass parse_url() { local url="$1" local rest="${url#postgresql://}" local userinfo="${rest%%@*}" local hostpart="${rest#*@}" PARSED_USER="${userinfo%%:*}" PARSED_PASS="${userinfo#*:}" PARSED_JDBC="jdbc:postgresql://${hostpart}" } run_one() { local name="$1" local var="DATABASE_URL_${name^^}_OWNER" local url="${!var:-}" if [[ -z "$url" ]]; then echo "Falta la variable de entorno $var (credenciales del rol _owner de $name)" >&2 exit 1 fi parse_url "$url" echo "==> Liquibase update: $name ($PARSED_JDBC)" ( cd "$ROOT/db/$name" "$LIQUIBASE" \ --defaultsFile=liquibase.properties \ --classpath="$PG_JDBC" \ --url="$PARSED_JDBC" \ --username="$PARSED_USER" \ --password="$PARSED_PASS" \ update "${EXTRA_ARGS[@]}" ) } case "$TARGET" in platform) run_one platform ;; iam) run_one iam ;; core) run_one core ;; all) run_one platform run_one iam run_one core ;; *) echo "Usage: $0 [all|platform|iam|core] [-- liquibase-args...]" >&2 exit 1 ;; esac echo "Liquibase OK"