workspace/projects/gamilit/apps/database/scripts/update-env-files.sh
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

325 lines
9.2 KiB
Bash
Executable File

#!/bin/bash
##############################################################################
# GAMILIT Platform - Environment Files Updater
#
# Propósito: Sincronizar credenciales de BD y secrets a archivos .env
#
# Uso:
# ./update-env-files.sh --env dev|prod --credentials-file FILE
# ./update-env-files.sh --env dev # Busca database-credentials-dev.txt
#
# Funcionalidades:
# 1. Lee credenciales desde database-credentials-{env}.txt
# 2. Genera JWT secrets si no existen
# 3. Actualiza múltiples archivos .env:
# - apps/backend/.env.{env}
# - apps/database/.env.{env}
# - ../../gamilit-deployment-scripts/.env.{env}
#
##############################################################################
set -e
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Configuración de rutas
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DATABASE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
APPS_ROOT="$(cd "$DATABASE_ROOT/.." && pwd)"
GAMILIT_ROOT="$(cd "$APPS_ROOT/.." && pwd)"
WORKSPACE_ROOT="$(cd "$GAMILIT_ROOT/../../.." && pwd)"
DEPLOYMENT_SCRIPTS="$WORKSPACE_ROOT/projects/gamilit-deployment-scripts"
# Variables
ENVIRONMENT=""
CREDENTIALS_FILE=""
DB_HOST=""
DB_PORT=""
DB_NAME=""
DB_USER=""
DB_PASSWORD=""
JWT_SECRET=""
JWT_REFRESH_SECRET=""
# ============================================================================
# FUNCIONES AUXILIARES
# ============================================================================
print_header() {
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
}
print_step() {
echo -e "${CYAN}$1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}$1${NC}"
}
print_info() {
echo " $1"
}
show_help() {
cat << EOF
GAMILIT Platform - Actualizador de Archivos .env
Uso: $0 [OPCIONES]
Opciones:
--env dev|prod Ambiente (dev o prod)
--credentials-file FILE Archivo de credenciales (opcional)
--help Mostrar ayuda
Ejemplos:
$0 --env dev
$0 --env prod --credentials-file /path/to/credentials.txt
Archivos que actualiza:
- apps/backend/.env.{env}
- apps/database/.env.{env}
- ../../gamilit-deployment-scripts/.env.{env}
EOF
}
# ============================================================================
# LEER CREDENCIALES
# ============================================================================
read_credentials() {
print_step "Leyendo credenciales de BD..."
if [ -z "$CREDENTIALS_FILE" ]; then
CREDENTIALS_FILE="$DATABASE_ROOT/database-credentials-${ENVIRONMENT}.txt"
fi
if [ ! -f "$CREDENTIALS_FILE" ]; then
print_error "Archivo de credenciales no encontrado: $CREDENTIALS_FILE"
exit 1
fi
# Parsear archivo de credenciales
DB_HOST=$(grep "^Host:" "$CREDENTIALS_FILE" | awk '{print $2}' | cut -d: -f1)
DB_PORT=$(grep "^Host:" "$CREDENTIALS_FILE" | awk '{print $2}' | cut -d: -f2)
DB_NAME=$(grep "^Database:" "$CREDENTIALS_FILE" | awk '{print $2}')
DB_USER=$(grep "^User:" "$CREDENTIALS_FILE" | awk '{print $2}')
DB_PASSWORD=$(grep "^Password:" "$CREDENTIALS_FILE" | awk '{print $2}')
# Validar que se leyeron todos los valores
if [ -z "$DB_HOST" ] || [ -z "$DB_PORT" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASSWORD" ]; then
print_error "No se pudieron leer todas las credenciales del archivo"
exit 1
fi
print_success "Credenciales leídas"
print_info "Host: $DB_HOST:$DB_PORT"
print_info "Database: $DB_NAME"
print_info "User: $DB_USER"
}
# ============================================================================
# GENERAR JWT SECRETS
# ============================================================================
generate_jwt_secrets() {
print_step "Generando JWT secrets..."
# Verificar si openssl está disponible
if ! command -v openssl &> /dev/null; then
print_error "OpenSSL no encontrado. Instálalo primero."
exit 1
fi
# Generar secrets
JWT_SECRET=$(openssl rand -base64 32)
JWT_REFRESH_SECRET=$(openssl rand -base64 32)
print_success "JWT secrets generados"
}
# ============================================================================
# ACTUALIZAR ARCHIVO .ENV
# ============================================================================
update_env_file() {
local env_file="$1"
local env_name="$2"
print_step "Actualizando $env_name..."
# Crear directorio si no existe
local dir=$(dirname "$env_file")
mkdir -p "$dir"
# Determinar si es archivo nuevo o existente
if [ -f "$env_file" ]; then
print_info "Actualizando archivo existente"
# Crear backup
cp "$env_file" "${env_file}.backup.$(date +%Y%m%d_%H%M%S)"
# Actualizar valores existentes
sed -i "s|^DB_HOST=.*|DB_HOST=$DB_HOST|" "$env_file"
sed -i "s|^DB_PORT=.*|DB_PORT=$DB_PORT|" "$env_file"
sed -i "s|^DB_NAME=.*|DB_NAME=$DB_NAME|" "$env_file"
sed -i "s|^DB_USER=.*|DB_USER=$DB_USER|" "$env_file"
sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASSWORD|" "$env_file"
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME|" "$env_file"
# Actualizar JWT secrets si las líneas existen
if grep -q "^JWT_SECRET=" "$env_file"; then
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$JWT_SECRET|" "$env_file"
else
echo "JWT_SECRET=$JWT_SECRET" >> "$env_file"
fi
if grep -q "^JWT_REFRESH_SECRET=" "$env_file"; then
sed -i "s|^JWT_REFRESH_SECRET=.*|JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET|" "$env_file"
else
echo "JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET" >> "$env_file"
fi
if grep -q "^VITE_JWT_SECRET=" "$env_file"; then
sed -i "s|^VITE_JWT_SECRET=.*|VITE_JWT_SECRET=$JWT_SECRET|" "$env_file"
fi
else
print_info "Creando archivo nuevo"
# Crear archivo nuevo con template básico
cat > "$env_file" << EOF
# ============================================================================
# GAMILIT Platform - $ENVIRONMENT Environment
# Generated: $(date)
# ============================================================================
# Database Configuration
DB_HOST=$DB_HOST
DB_PORT=$DB_PORT
DB_NAME=$DB_NAME
DB_USER=$DB_USER
DB_PASSWORD=$DB_PASSWORD
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME
# Pool Configuration
DB_POOL_MIN=2
DB_POOL_MAX=10
DB_SSL=false
# JWT Authentication
JWT_SECRET=$JWT_SECRET
JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET
JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# VITE Frontend
VITE_JWT_SECRET=$JWT_SECRET
# Environment
NODE_ENV=$ENVIRONMENT
APP_ENV=$ENVIRONMENT
EOF
fi
# Asegurar permisos restringidos
chmod 600 "$env_file"
print_success "Archivo actualizado: $env_file"
}
# ============================================================================
# MAIN
# ============================================================================
main() {
# Parsear argumentos
while [[ $# -gt 0 ]]; do
case $1 in
--env)
ENVIRONMENT="$2"
shift 2
;;
--credentials-file)
CREDENTIALS_FILE="$2"
shift 2
;;
--help)
show_help
exit 0
;;
*)
print_error "Opción desconocida: $1"
show_help
exit 1
;;
esac
done
# Validar argumentos
if [ -z "$ENVIRONMENT" ]; then
print_error "Debe especificar --env dev|prod"
show_help
exit 1
fi
if [ "$ENVIRONMENT" != "dev" ] && [ "$ENVIRONMENT" != "prod" ]; then
print_error "Ambiente debe ser 'dev' o 'prod'"
exit 1
fi
print_header "🔧 ACTUALIZADOR DE ARCHIVOS .ENV - $ENVIRONMENT"
# Ejecutar pasos
read_credentials
generate_jwt_secrets
echo ""
print_header "Actualizando archivos .env"
# Actualizar apps/backend/.env.{env}
BACKEND_ENV="$APPS_ROOT/backend/.env.$ENVIRONMENT"
update_env_file "$BACKEND_ENV" "Backend .env.$ENVIRONMENT"
# Actualizar apps/database/.env.{env}
DATABASE_ENV="$DATABASE_ROOT/.env.$ENVIRONMENT"
update_env_file "$DATABASE_ENV" "Database .env.$ENVIRONMENT"
# Actualizar deployment-scripts/.env.{env}
if [ -d "$DEPLOYMENT_SCRIPTS" ]; then
DEPLOY_ENV="$DEPLOYMENT_SCRIPTS/.env.$ENVIRONMENT"
update_env_file "$DEPLOY_ENV" "Deployment .env.$ENVIRONMENT"
else
print_warning "Carpeta deployment-scripts no encontrada, omitiendo"
fi
echo ""
print_header "✅ ARCHIVOS .ENV ACTUALIZADOS"
print_info "Ambiente: $ENVIRONMENT"
print_info "Database: $DB_NAME"
print_info ""
print_info "Archivos actualizados:"
[ -f "$BACKEND_ENV" ] && print_info " - $BACKEND_ENV"
[ -f "$DATABASE_ENV" ] && print_info " - $DATABASE_ENV"
[ -f "$DEPLOY_ENV" ] && print_info " - $DEPLOY_ENV"
echo ""
}
main "$@"