Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Core: - Add catalog reference implementations (auth, payments, notifications, websocket, etc.) - New agent profiles: Database Auditor, Integration Validator, LLM Agent, Policy Auditor, Trading Strategist - Update SIMCO directives and add escalation/git guidelines - Add deployment inventory and audit execution reports Projects: - erp-suite: DevOps configs, Dockerfiles, shared libs, vertical enhancements - gamilit: Test structure, admin controllers, service refactoring, husky/commitlint - trading-platform: MT4 gateway, auth controllers, admin frontend, deployment scripts - platform_marketing_content: Full DevOps setup, tests, Docker configs - betting-analytics/inmobiliaria-analytics: Initial app structure 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
307 lines
8.3 KiB
Bash
Executable File
307 lines
8.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# sync-to-deploy-repos.sh
|
|
#
|
|
# Script para sincronizar componentes del workspace a repositorios de deploy
|
|
# independientes para CI/CD con Jenkins
|
|
#
|
|
# Uso:
|
|
# ./sync-to-deploy-repos.sh [vertical] [componente]
|
|
# ./sync-to-deploy-repos.sh construccion backend
|
|
# ./sync-to-deploy-repos.sh construccion all
|
|
# ./sync-to-deploy-repos.sh all all
|
|
#
|
|
# Autor: Architecture-Analyst
|
|
# Fecha: 2025-12-12
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# CONFIGURACION
|
|
# -----------------------------------------------------------------------------
|
|
|
|
WORKSPACE_ROOT="/home/isem/workspace/projects/erp-suite"
|
|
DEPLOY_REPOS_ROOT="/home/isem/deploy-repos"
|
|
|
|
# Configuración de Gitea (usar token en lugar de password para evitar bloqueos)
|
|
GITEA_HOST="72.60.226.4:3000"
|
|
GITEA_USER="rckrdmrd"
|
|
GITEA_TOKEN="3fb69a2465f4c1d43c856e980236fbc9f79278b1"
|
|
|
|
# Verticales disponibles
|
|
VERTICALES=("construccion" "mecanicas-diesel" "vidrio-templado" "retail" "clinicas")
|
|
|
|
# Proyectos especiales (no en verticales/)
|
|
PROYECTOS_ESPECIALES=("erp-core")
|
|
|
|
# Componentes por vertical
|
|
COMPONENTES=("backend" "frontend-web" "frontend-mobile" "database")
|
|
|
|
# Colores para output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# FUNCIONES
|
|
# -----------------------------------------------------------------------------
|
|
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[OK]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Crear repo de deploy si no existe
|
|
ensure_deploy_repo() {
|
|
local repo_path="$1"
|
|
local repo_name="$2"
|
|
|
|
if [ ! -d "$repo_path" ]; then
|
|
log_info "Creando repo de deploy: $repo_name"
|
|
mkdir -p "$repo_path"
|
|
cd "$repo_path"
|
|
git init -b main
|
|
echo "# $repo_name" > README.md
|
|
echo "Repositorio de deploy para CI/CD con Jenkins" >> README.md
|
|
git add README.md
|
|
git commit -m "Initial commit - Deploy repo for $repo_name"
|
|
|
|
# Configurar remoto con token
|
|
git remote add origin "http://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_HOST}/${GITEA_USER}/${repo_name}.git"
|
|
log_success "Repo creado: $repo_path"
|
|
else
|
|
# Asegurar que el remoto use token
|
|
cd "$repo_path"
|
|
git remote set-url origin "http://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_HOST}/${GITEA_USER}/${repo_name}.git" 2>/dev/null || \
|
|
git remote add origin "http://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_HOST}/${GITEA_USER}/${repo_name}.git" 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
# Sincronizar un componente
|
|
sync_component() {
|
|
local vertical="$1"
|
|
local component="$2"
|
|
|
|
local source_path=""
|
|
# Evitar duplicar prefijo "erp-" si el proyecto ya lo tiene
|
|
local repo_name=""
|
|
if [[ "$vertical" == erp-* ]]; then
|
|
repo_name="${vertical}-${component}"
|
|
else
|
|
repo_name="erp-${vertical}-${component}"
|
|
fi
|
|
local repo_path="${DEPLOY_REPOS_ROOT}/${repo_name}"
|
|
|
|
# Determinar base path (verticales/ o directamente en apps/)
|
|
local base_path=""
|
|
if [[ " ${PROYECTOS_ESPECIALES[*]} " =~ " ${vertical} " ]]; then
|
|
base_path="${WORKSPACE_ROOT}/apps/${vertical}"
|
|
else
|
|
base_path="${WORKSPACE_ROOT}/apps/verticales/${vertical}"
|
|
fi
|
|
|
|
# Determinar ruta fuente según componente
|
|
case "$component" in
|
|
"backend")
|
|
source_path="${base_path}/backend"
|
|
;;
|
|
"frontend-web")
|
|
# Soportar ambas estructuras: frontend/web/ o frontend/ directo
|
|
if [ -d "${base_path}/frontend/web" ]; then
|
|
source_path="${base_path}/frontend/web"
|
|
elif [ -d "${base_path}/frontend" ] && [ -f "${base_path}/frontend/package.json" ]; then
|
|
source_path="${base_path}/frontend"
|
|
else
|
|
source_path="${base_path}/frontend/web"
|
|
fi
|
|
;;
|
|
"frontend-mobile")
|
|
source_path="${base_path}/frontend/mobile"
|
|
;;
|
|
"database")
|
|
source_path="${base_path}/database"
|
|
;;
|
|
*)
|
|
log_error "Componente desconocido: $component"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
# Verificar que existe el source
|
|
if [ ! -d "$source_path" ]; then
|
|
log_warn "Source no existe: $source_path"
|
|
return 0
|
|
fi
|
|
|
|
# Crear repo si no existe
|
|
ensure_deploy_repo "$repo_path" "$repo_name"
|
|
|
|
# Sincronizar usando rsync
|
|
log_info "Sincronizando: $source_path -> $repo_path"
|
|
|
|
rsync -av --delete \
|
|
--exclude 'node_modules' \
|
|
--exclude 'dist' \
|
|
--exclude '.env' \
|
|
--exclude '.env.local' \
|
|
--exclude '*.log' \
|
|
--exclude '.DS_Store' \
|
|
--exclude 'coverage' \
|
|
--exclude '.nyc_output' \
|
|
"$source_path/" "$repo_path/"
|
|
|
|
# Crear .gitignore si no existe
|
|
if [ ! -f "$repo_path/.gitignore" ]; then
|
|
cat > "$repo_path/.gitignore" << 'EOF'
|
|
# Dependencies
|
|
node_modules/
|
|
|
|
# Build output
|
|
dist/
|
|
build/
|
|
|
|
# Environment files (local)
|
|
.env
|
|
.env.local
|
|
.env.*.local
|
|
|
|
# IDE
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
*.swo
|
|
|
|
# Logs
|
|
*.log
|
|
npm-debug.log*
|
|
|
|
# Coverage
|
|
coverage/
|
|
.nyc_output/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Cache
|
|
.cache/
|
|
.parcel-cache/
|
|
EOF
|
|
fi
|
|
|
|
log_success "Sincronizado: $repo_name"
|
|
}
|
|
|
|
# Sincronizar todos los componentes de una vertical
|
|
sync_vertical() {
|
|
local vertical="$1"
|
|
|
|
log_info "=========================================="
|
|
log_info "Sincronizando vertical: $vertical"
|
|
log_info "=========================================="
|
|
|
|
for component in "${COMPONENTES[@]}"; do
|
|
sync_component "$vertical" "$component"
|
|
done
|
|
}
|
|
|
|
# Mostrar uso
|
|
show_usage() {
|
|
echo "Uso: $0 [proyecto] [componente]"
|
|
echo ""
|
|
echo "Proyectos disponibles:"
|
|
for v in "${VERTICALES[@]}"; do
|
|
echo " - $v"
|
|
done
|
|
for p in "${PROYECTOS_ESPECIALES[@]}"; do
|
|
echo " - $p"
|
|
done
|
|
echo " - all (todos los proyectos)"
|
|
echo ""
|
|
echo "Componentes disponibles:"
|
|
for c in "${COMPONENTES[@]}"; do
|
|
echo " - $c"
|
|
done
|
|
echo " - all (todos los componentes)"
|
|
echo ""
|
|
echo "Ejemplos:"
|
|
echo " $0 construccion backend # Solo backend de construccion"
|
|
echo " $0 construccion all # Todos los componentes de construccion"
|
|
echo " $0 erp-core backend # Solo backend de erp-core"
|
|
echo " $0 all all # Todo el proyecto"
|
|
}
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# MAIN
|
|
# -----------------------------------------------------------------------------
|
|
|
|
main() {
|
|
local vertical="${1:-}"
|
|
local component="${2:-}"
|
|
|
|
if [ -z "$vertical" ] || [ -z "$component" ]; then
|
|
show_usage
|
|
exit 1
|
|
fi
|
|
|
|
# Crear directorio base de repos si no existe
|
|
mkdir -p "$DEPLOY_REPOS_ROOT"
|
|
|
|
log_info "Workspace: $WORKSPACE_ROOT"
|
|
log_info "Deploy repos: $DEPLOY_REPOS_ROOT"
|
|
echo ""
|
|
|
|
# Procesar según parámetros
|
|
if [ "$vertical" == "all" ]; then
|
|
# Procesar verticales
|
|
for v in "${VERTICALES[@]}"; do
|
|
if [ "$component" == "all" ]; then
|
|
sync_vertical "$v"
|
|
else
|
|
sync_component "$v" "$component"
|
|
fi
|
|
done
|
|
# Procesar proyectos especiales
|
|
for p in "${PROYECTOS_ESPECIALES[@]}"; do
|
|
if [ "$component" == "all" ]; then
|
|
sync_vertical "$p"
|
|
else
|
|
sync_component "$p" "$component"
|
|
fi
|
|
done
|
|
else
|
|
if [ "$component" == "all" ]; then
|
|
sync_vertical "$vertical"
|
|
else
|
|
sync_component "$vertical" "$component"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
log_success "=========================================="
|
|
log_success "Sincronizacion completada!"
|
|
log_success "=========================================="
|
|
echo ""
|
|
log_info "Repos de deploy en: $DEPLOY_REPOS_ROOT"
|
|
log_info "Para hacer push a remoto:"
|
|
echo " cd $DEPLOY_REPOS_ROOT/erp-{vertical}-{component}"
|
|
echo " git remote add origin git@github.com:isem-digital/erp-{vertical}-{component}.git"
|
|
echo " git push -u origin main"
|
|
}
|
|
|
|
main "$@"
|