59bd2d2d8a
- Añade servicios y configuración Cognito para login web (admins) y API (scanners) - Soporta Floci cuando AWS_ENDPOINT_URL está definido; AWS real en caso contrario - Incluye bootstrap Floci, docker-compose.local.yml y carga automática en run-local.sh - Documenta arquitectura, flujos y arranque manual/IntelliJ en README - Actualiza gitignore: excluye Flutter, H2 local y artefactos generados
156 lines
4.3 KiB
Bash
Executable File
156 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
COGNITO_ENV_FILE="$SCRIPT_DIR/docker/floci/generated/cognito.local.env"
|
|
|
|
MIN_JAVA_VERSION=25
|
|
|
|
is_valid_jdk() {
|
|
[[ -n "${1:-}" && -x "$1/bin/java" ]]
|
|
}
|
|
|
|
java_major_version() {
|
|
"$1/bin/java" -version 2>&1 | awk -F '"' '/version/ { split($2, v, "."); print v[1]; exit }'
|
|
}
|
|
|
|
collect_jdk_candidates() {
|
|
local -a candidates=()
|
|
|
|
if [[ -n "${JAVA_HOME:-}" ]]; then
|
|
candidates+=("$JAVA_HOME")
|
|
fi
|
|
|
|
if compgen -G "/opt/jdk-*" > /dev/null; then
|
|
while IFS= read -r jdk_dir; do
|
|
candidates+=("$jdk_dir")
|
|
done < <(ls -d /opt/jdk-* 2>/dev/null | sort -rV)
|
|
fi
|
|
|
|
candidates+=(
|
|
/usr/lib/jvm/java-25-temurin-jdk
|
|
/usr/lib/jvm/java-21-temurin-jdk
|
|
/usr/lib/jvm/java-21-openjdk-amd64
|
|
)
|
|
|
|
printf '%s\n' "${candidates[@]}"
|
|
}
|
|
|
|
resolve_java_home() {
|
|
local candidate major_version
|
|
local -A seen=()
|
|
|
|
if [[ -n "${JAVA_HOME:-}" && ! -x "${JAVA_HOME}/bin/java" ]]; then
|
|
echo "JAVA_HOME actual ($JAVA_HOME) no es valido. Buscando otro JDK..." >&2
|
|
fi
|
|
|
|
while IFS= read -r candidate; do
|
|
[[ -n "$candidate" && -z "${seen[$candidate]+x}" ]] || continue
|
|
seen[$candidate]=1
|
|
|
|
if ! is_valid_jdk "$candidate"; then
|
|
continue
|
|
fi
|
|
|
|
major_version="$(java_major_version "$candidate")"
|
|
if (( major_version >= MIN_JAVA_VERSION )); then
|
|
echo "$candidate"
|
|
return 0
|
|
fi
|
|
done < <(collect_jdk_candidates)
|
|
|
|
while IFS= read -r candidate; do
|
|
[[ -n "$candidate" && -z "${seen[$candidate]+x}" ]] || continue
|
|
seen[$candidate]=1
|
|
|
|
if is_valid_jdk "$candidate"; then
|
|
major_version="$(java_major_version "$candidate")"
|
|
echo "Se encontro Java $major_version en $candidate, pero este proyecto requiere Java $MIN_JAVA_VERSION o superior." >&2
|
|
return 1
|
|
fi
|
|
done < <(collect_jdk_candidates)
|
|
|
|
echo "No se encontro un JDK valido. Instala Temurin $MIN_JAVA_VERSION+ o define JAVA_HOME." >&2
|
|
return 1
|
|
}
|
|
|
|
wait_for_cognito_env() {
|
|
local elapsed=0
|
|
local timeout=120
|
|
|
|
while [[ ! -f "$COGNITO_ENV_FILE" && $elapsed -lt $timeout ]]; do
|
|
sleep 2
|
|
elapsed=$((elapsed + 2))
|
|
if (( elapsed % 10 == 0 )); then
|
|
echo "Esperando bootstrap de Cognito en Floci..." >&2
|
|
fi
|
|
done
|
|
|
|
[[ -f "$COGNITO_ENV_FILE" ]]
|
|
}
|
|
|
|
load_cognito_local_env() {
|
|
if [[ -n "${AWS_ENDPOINT_URL:-}" ]]; then
|
|
echo "AWS_ENDPOINT_URL ya definido; omitiendo carga de cognito.local.env" >&2
|
|
return 0
|
|
fi
|
|
|
|
if [[ ! -f "$COGNITO_ENV_FILE" ]]; then
|
|
echo "No se encontro $COGNITO_ENV_FILE. Exporta las variables Cognito manualmente." >&2
|
|
return 1
|
|
fi
|
|
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$COGNITO_ENV_FILE"
|
|
set +a
|
|
echo "Variables Cognito cargadas desde docker/floci/generated/cognito.local.env" >&2
|
|
}
|
|
|
|
JAVA_HOME="$(resolve_java_home)"
|
|
export JAVA_HOME
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
|
|
echo "Usando JAVA_HOME=$JAVA_HOME ($(java -version 2>&1 | head -1))" >&2
|
|
|
|
PROFILE="${SPRING_PROFILES_ACTIVE:-dev}"
|
|
|
|
echo "Perfil activo: $PROFILE" >&2
|
|
if [[ "$PROFILE" == *"postgres"* ]]; then
|
|
echo "Base de datos: PostgreSQL (${SPRING_DATASOURCE_URL:-jdbc:postgresql://localhost:5432/base_admin_web})" >&2
|
|
else
|
|
echo "Base de datos: H2 en archivo local (./data/h2/). Para PostgreSQL usa: SPRING_PROFILES_ACTIVE=postgres ./run-local.sh" >&2
|
|
fi
|
|
|
|
FLOCI_STARTED=false
|
|
|
|
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
|
|
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.local.yml"
|
|
mkdir -p "$SCRIPT_DIR/docker/floci/generated"
|
|
chmod 777 "$SCRIPT_DIR/docker/floci/generated" 2>/dev/null || true
|
|
|
|
if [[ "$PROFILE" == *"postgres"* ]]; then
|
|
echo "Levantando PostgreSQL y Floci (Cognito local)..." >&2
|
|
docker compose -f "$COMPOSE_FILE" up -d postgres floci
|
|
else
|
|
echo "Levantando Floci (Cognito local) en http://localhost:4566 ..." >&2
|
|
docker compose -f "$COMPOSE_FILE" up -d floci
|
|
fi
|
|
FLOCI_STARTED=true
|
|
elif [[ "$PROFILE" == *"postgres"* ]]; then
|
|
echo "Docker Compose no esta disponible. Instala Docker o levanta PostgreSQL manualmente." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$FLOCI_STARTED" == true ]]; then
|
|
if wait_for_cognito_env; then
|
|
load_cognito_local_env || true
|
|
else
|
|
echo "Advertencia: timeout esperando cognito.local.env. Revisa Floci o exporta las variables manualmente." >&2
|
|
fi
|
|
fi
|
|
|
|
cd "$SCRIPT_DIR"
|
|
|
|
mvn -pl base-admin-web-jar -am -DskipTests install
|
|
mvn -pl base-admin-web-jar spring-boot:run |