workspace/core/devtools/environment/scripts/setup-project-env.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

311 lines
10 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# setup-project-env.sh
# Script para Configurar Ambiente de Desarrollo de un Proyecto
# =============================================================================
# Mantenido por: NEXUS-DEVENV
# Uso: ./setup-project-env.sh <project-name>
# =============================================================================
set -e
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Paths
WORKSPACE_ROOT="${HOME}/workspace"
PROJECTS_ROOT="${WORKSPACE_ROOT}/projects"
TEMPLATES_DIR="${WORKSPACE_ROOT}/core/devtools/environment/templates"
REGISTRY_FILE="${WORKSPACE_ROOT}/core/devtools/environment/DEV-ENVIRONMENT-REGISTRY.yml"
# -----------------------------------------------------------------------------
# CONFIGURACIÓN POR PROYECTO (según DEV-ENVIRONMENT-REGISTRY.yml)
# -----------------------------------------------------------------------------
get_project_config() {
local project=$1
case $project in
"gamilit")
BACKEND_PORT=3001
FRONTEND_PORT=5001
DB_PORT=5432
DB_NAME="gamilit_platform"
DB_USER="gamilit_user"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=""
;;
"orbiquantia")
BACKEND_PORT=3002
FRONTEND_PORT=5002
DB_PORT=5433
DB_NAME="orbiquantia_platform"
DB_USER="orbiquantia"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=8001
;;
"erp-suite")
BACKEND_PORT=3003
FRONTEND_PORT=5003
DB_PORT=5434
DB_NAME="erp_generic"
DB_USER="erp_admin"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=""
;;
"trading-platform")
BACKEND_PORT=3004
FRONTEND_PORT=5004
DB_PORT=5435
DB_NAME="trading_platform"
DB_USER="trading_user"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=8002
;;
"betting-analytics")
BACKEND_PORT=3005
FRONTEND_PORT=5005
DB_PORT=5436
DB_NAME="betting_analytics"
DB_USER="betting_user"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=8003
;;
"inmobiliaria-analytics")
BACKEND_PORT=3006
FRONTEND_PORT=5006
DB_PORT=5437
DB_NAME="inmobiliaria_analytics"
DB_USER="inmobiliaria_user"
DB_PASSWORD="$(openssl rand -base64 12)"
ML_SERVICE_PORT=8004
;;
*)
echo -e "${RED}Proyecto desconocido: $project${NC}"
echo "Proyectos válidos: gamilit, orbiquantia, erp-suite, trading-platform, betting-analytics, inmobiliaria-analytics"
exit 1
;;
esac
PROJECT_NAME=$(echo "$project" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
PROJECT_SLUG=$(echo "$project" | tr '[:upper:]' '[:lower:]' | tr '_' '-')
}
# -----------------------------------------------------------------------------
# GENERAR .ENV DESDE TEMPLATE
# -----------------------------------------------------------------------------
generate_env_file() {
local template=$1
local output=$2
local project_name=$3
if [[ ! -f "$template" ]]; then
echo -e "${RED}Template no existe: $template${NC}"
return 1
fi
# Crear directorio si no existe
mkdir -p "$(dirname "$output")"
# Reemplazar variables
sed -e "s/\${PROJECT_NAME}/${PROJECT_NAME}/g" \
-e "s/\${PROJECT_SLUG}/${PROJECT_SLUG}/g" \
-e "s/\${BACKEND_PORT}/${BACKEND_PORT}/g" \
-e "s/\${FRONTEND_PORT}/${FRONTEND_PORT}/g" \
-e "s/\${DB_PORT}/${DB_PORT}/g" \
-e "s/\${DB_NAME}/${DB_NAME}/g" \
-e "s/\${DB_USER}/${DB_USER}/g" \
-e "s/\${DB_PASSWORD}/${DB_PASSWORD}/g" \
-e "s/\${ML_SERVICE_PORT}/${ML_SERVICE_PORT:-8000}/g" \
-e "s/\${DATE}/$(date '+%Y-%m-%d')/g" \
"$template" > "$output"
echo -e "${GREEN}Generado: $output${NC}"
}
# -----------------------------------------------------------------------------
# CREAR ESTRUCTURA DE PROYECTO
# -----------------------------------------------------------------------------
setup_project() {
local project=$1
local project_path="${PROJECTS_ROOT}/${project}"
echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} Configurando ambiente para: ${project}${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo ""
# Obtener configuración
get_project_config "$project"
echo "Configuración:"
echo " Backend Port: $BACKEND_PORT"
echo " Frontend Port: $FRONTEND_PORT"
echo " DB Port: $DB_PORT"
echo " DB Name: $DB_NAME"
echo " DB User: $DB_USER"
if [[ -n "$ML_SERVICE_PORT" ]]; then
echo " ML Port: $ML_SERVICE_PORT"
fi
echo ""
# Verificar que el proyecto existe
if [[ ! -d "$project_path" ]]; then
echo -e "${YELLOW}Directorio del proyecto no existe: $project_path${NC}"
echo "Creando estructura básica..."
mkdir -p "${project_path}/apps/backend"
mkdir -p "${project_path}/apps/frontend"
mkdir -p "${project_path}/orchestration/environment"
fi
# Determinar paths de .env
local backend_env_path="${project_path}/apps/backend/.env"
local frontend_env_path="${project_path}/apps/frontend/.env"
# Caso especial para erp-suite
if [[ "$project" == "erp-suite" ]]; then
backend_env_path="${project_path}/apps/erp-core/.env"
mkdir -p "${project_path}/apps/erp-core"
fi
# Preguntar antes de sobrescribir
if [[ -f "$backend_env_path" ]]; then
echo -e "${YELLOW}Backend .env ya existe: $backend_env_path${NC}"
read -p "¿Sobrescribir? (y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "Saltando backend .env"
else
generate_env_file "${TEMPLATES_DIR}/.env.backend.template" "$backend_env_path" "$project"
fi
else
generate_env_file "${TEMPLATES_DIR}/.env.backend.template" "$backend_env_path" "$project"
fi
if [[ -f "$frontend_env_path" ]]; then
echo -e "${YELLOW}Frontend .env ya existe: $frontend_env_path${NC}"
read -p "¿Sobrescribir? (y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "Saltando frontend .env"
else
generate_env_file "${TEMPLATES_DIR}/.env.frontend.template" "$frontend_env_path" "$project"
fi
else
generate_env_file "${TEMPLATES_DIR}/.env.frontend.template" "$frontend_env_path" "$project"
fi
# Crear PROJECT-ENV-CONFIG.yml
create_project_env_config "$project" "$project_path"
echo ""
echo -e "${GREEN}Configuración completada para $project${NC}"
echo ""
echo "Próximos pasos:"
echo " 1. Revisar y ajustar passwords en los archivos .env"
echo " 2. Crear la base de datos: createdb -p $DB_PORT $DB_NAME"
echo " 3. Crear el usuario: createuser -p $DB_PORT $DB_USER"
echo " 4. Ejecutar: npm install"
echo ""
}
# -----------------------------------------------------------------------------
# CREAR PROJECT-ENV-CONFIG.yml
# -----------------------------------------------------------------------------
create_project_env_config() {
local project=$1
local project_path=$2
local config_dir="${project_path}/orchestration/environment"
local config_file="${config_dir}/PROJECT-ENV-CONFIG.yml"
mkdir -p "$config_dir"
cat > "$config_file" << EOF
# =============================================================================
# PROJECT-ENV-CONFIG.yml
# Configuración de Ambiente específica del proyecto
# =============================================================================
# Proyecto: ${PROJECT_NAME}
# Generado: $(date '+%Y-%m-%d')
# Referencia: ~/workspace/core/devtools/environment/DEV-ENVIRONMENT-REGISTRY.yml
# =============================================================================
project:
name: "${PROJECT_NAME}"
slug: "${PROJECT_SLUG}"
ports:
backend: ${BACKEND_PORT}
frontend: ${FRONTEND_PORT}
database: ${DB_PORT}
ml_service: ${ML_SERVICE_PORT:-null}
database:
host: "localhost"
port: ${DB_PORT}
name: "${DB_NAME}"
user: "${DB_USER}"
# password: Ver archivo .env local
urls:
backend_api: "http://localhost:${BACKEND_PORT}/api"
frontend: "http://localhost:${FRONTEND_PORT}"
swagger: "http://localhost:${BACKEND_PORT}/api/docs"
env_files:
backend: "apps/backend/.env"
frontend: "apps/frontend/.env"
# Notas específicas del proyecto
notes: |
- Configuración generada automáticamente por NEXUS-DEVENV
- Ajustar passwords antes de usar en desarrollo
- Para producción, usar configuración separada
EOF
echo -e "${GREEN}Generado: $config_file${NC}"
}
# -----------------------------------------------------------------------------
# MAIN
# -----------------------------------------------------------------------------
show_usage() {
echo "Uso: $0 <project-name> [--all]"
echo ""
echo "Proyectos disponibles:"
echo " - gamilit"
echo " - orbiquantia"
echo " - erp-suite"
echo " - trading-platform"
echo " - betting-analytics"
echo " - inmobiliaria-analytics"
echo ""
echo "Opciones:"
echo " --all Configurar todos los proyectos"
echo ""
}
main() {
if [[ $# -eq 0 ]]; then
show_usage
exit 1
fi
if [[ "$1" == "--all" ]]; then
for project in gamilit orbiquantia erp-suite trading-platform betting-analytics inmobiliaria-analytics; do
setup_project "$project"
done
else
setup_project "$1"
fi
}
main "$@"