- 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>
669 lines
17 KiB
Bash
Executable File
669 lines
17 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# =============================================================================
|
||
# SCRIPT DE MIGRACIÓN A ESTRUCTURA MULTI-PROYECTO
|
||
# =============================================================================
|
||
# Versión: 1.0.0
|
||
# Fecha: 2025-11-23
|
||
# Descripción: Migra workspace actual a estructura multi-proyecto
|
||
# =============================================================================
|
||
|
||
set -e # Exit on error
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Variables
|
||
WORKSPACE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||
BACKUP_DIR="${WORKSPACE_ROOT}_backup_$(date +%Y%m%d_%H%M%S)"
|
||
|
||
# =============================================================================
|
||
# FUNCIONES
|
||
# =============================================================================
|
||
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ ${NC}$1"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✓ ${NC}$1"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠ ${NC}$1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}✗ ${NC}$1"
|
||
}
|
||
|
||
print_header() {
|
||
echo ""
|
||
echo "============================================================================="
|
||
echo "$1"
|
||
echo "============================================================================="
|
||
echo ""
|
||
}
|
||
|
||
# =============================================================================
|
||
# VALIDACIONES PRE-MIGRACIÓN
|
||
# =============================================================================
|
||
|
||
validate_workspace() {
|
||
print_header "VALIDANDO WORKSPACE ACTUAL"
|
||
|
||
log_info "Directorio actual: $WORKSPACE_ROOT"
|
||
|
||
# Validar que estamos en el workspace correcto
|
||
if [ ! -d "$WORKSPACE_ROOT/orchestration" ]; then
|
||
log_error "No se encontró carpeta 'orchestration'. ¿Estás en el workspace correcto?"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -d "$WORKSPACE_ROOT/reference" ]; then
|
||
log_error "No se encontró carpeta 'reference'. ¿Estás en el workspace correcto?"
|
||
exit 1
|
||
fi
|
||
|
||
log_success "Workspace válido"
|
||
}
|
||
|
||
create_backup() {
|
||
print_header "CREANDO BACKUP"
|
||
|
||
log_info "Creando backup en: $BACKUP_DIR"
|
||
|
||
# Crear directorio de backup
|
||
mkdir -p "$BACKUP_DIR"
|
||
|
||
# Copiar contenido (excepto .git para no duplicar)
|
||
rsync -av --exclude='.git' "$WORKSPACE_ROOT/" "$BACKUP_DIR/"
|
||
|
||
log_success "Backup creado exitosamente"
|
||
log_warning "Si algo sale mal, puedes restaurar desde: $BACKUP_DIR"
|
||
}
|
||
|
||
# =============================================================================
|
||
# MIGRACIÓN
|
||
# =============================================================================
|
||
|
||
create_shared_structure() {
|
||
print_header "CREANDO ESTRUCTURA SHARED/"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# Crear estructura shared
|
||
log_info "Creando carpetas shared/..."
|
||
mkdir -p shared/{reference,orchestration,analysis,bugs,components,docs}
|
||
|
||
# Crear subcarpetas de analysis
|
||
mkdir -p shared/analysis/{domain-models/{common,financial,inventory,purchasing,production,crm},odoo-comparison,architecture}
|
||
|
||
# Crear subcarpetas de bugs
|
||
mkdir -p shared/bugs/{global,by-component}
|
||
|
||
# Crear subcarpetas de components
|
||
mkdir -p shared/components/{database/{common-schemas,common-functions},backend/{auth-module,common-entities,common-services,utils},frontend/{ui-kit,common-hooks,common-stores}}
|
||
|
||
# Crear subcarpetas de docs
|
||
mkdir -p shared/docs/{onboarding,standards,guides}
|
||
|
||
log_success "Estructura shared/ creada"
|
||
}
|
||
|
||
move_shared_content() {
|
||
print_header "MOVIENDO CONTENIDO A SHARED/"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# Mover reference
|
||
if [ -d "reference" ]; then
|
||
log_info "Moviendo reference/ → shared/reference/"
|
||
mv reference/* shared/reference/ 2>/dev/null || true
|
||
rmdir reference 2>/dev/null || true
|
||
log_success "Reference movido"
|
||
fi
|
||
|
||
# Mover orchestration
|
||
if [ -d "orchestration" ]; then
|
||
log_info "Moviendo orchestration/ → shared/orchestration/"
|
||
mv orchestration/* shared/orchestration/ 2>/dev/null || true
|
||
rmdir orchestration 2>/dev/null || true
|
||
log_success "Orchestration movido"
|
||
fi
|
||
}
|
||
|
||
create_projects_structure() {
|
||
print_header "CREANDO ESTRUCTURA PROJECTS/"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# Crear carpeta projects
|
||
mkdir -p projects
|
||
|
||
# Crear estructura para cada proyecto
|
||
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
|
||
log_info "Creando estructura para $project..."
|
||
|
||
# Crear carpetas principales
|
||
mkdir -p "projects/$project"/{docs,apps,orchestration,bugs}
|
||
|
||
# Crear subcarpetas de docs
|
||
mkdir -p "projects/$project/docs"/{00-overview,01-analysis/{requirements,domain-model,database-design,odoo-comparison},02-modules,03-architecture/{adr,database-schema,api-design},04-development}
|
||
|
||
# Crear subcarpetas de apps
|
||
mkdir -p "projects/$project/apps"/{database/{ddl,seeds,migrations,scripts},backend,frontend/{web,mobile}}
|
||
|
||
# Crear subcarpetas de orchestration
|
||
mkdir -p "projects/$project/orchestration"/{trazas,inventarios,estados,reportes}
|
||
|
||
log_success "$project creado"
|
||
done
|
||
}
|
||
|
||
migrate_construccion_content() {
|
||
print_header "MIGRANDO CONTENIDO DE ERP CONSTRUCCIÓN"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# Mover docs
|
||
if [ -d "docs" ]; then
|
||
log_info "Moviendo docs/ → projects/erp-construccion/docs/"
|
||
|
||
# Crear carpeta temporal
|
||
mkdir -p temp_docs
|
||
mv docs/* temp_docs/ 2>/dev/null || true
|
||
|
||
# Mover a estructura nueva
|
||
mv temp_docs/* "projects/erp-construccion/docs/" 2>/dev/null || true
|
||
|
||
# Limpiar
|
||
rmdir temp_docs 2>/dev/null || true
|
||
rmdir docs 2>/dev/null || true
|
||
|
||
log_success "Docs migrados"
|
||
fi
|
||
|
||
# Mover apps
|
||
if [ -d "apps" ]; then
|
||
log_info "Moviendo apps/ → projects/erp-construccion/apps/"
|
||
|
||
# Crear carpeta temporal
|
||
mkdir -p temp_apps
|
||
mv apps/* temp_apps/ 2>/dev/null || true
|
||
|
||
# Mover a estructura nueva
|
||
mv temp_apps/* "projects/erp-construccion/apps/" 2>/dev/null || true
|
||
|
||
# Limpiar
|
||
rmdir temp_apps 2>/dev/null || true
|
||
rmdir apps 2>/dev/null || true
|
||
|
||
log_success "Apps migrados"
|
||
fi
|
||
}
|
||
|
||
create_readme_files() {
|
||
print_header "CREANDO ARCHIVOS README"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# README.md para cada proyecto
|
||
log_info "Creando READMEs de proyectos..."
|
||
|
||
# ERP Genérico
|
||
cat > "projects/erp-generic/README.md" << 'EOF'
|
||
# ERP GENÉRICO
|
||
|
||
**Tipo:** ERP Base
|
||
**Estado:** 📋 En planificación
|
||
**Versión:** 0.1.0
|
||
|
||
## Descripción
|
||
|
||
ERP genérico que sirve como base para todos los demás ERPs. Contiene módulos comunes reutilizables.
|
||
|
||
## Módulos Base
|
||
|
||
- Autenticación y autorización
|
||
- Gestión de usuarios y roles
|
||
- Gestión de empresas/organizaciones
|
||
- Catálogos maestros
|
||
- Sistema de reportes
|
||
- Módulo financiero básico
|
||
- Módulo de inventario básico
|
||
- Módulo de compras básico
|
||
- CRM básico
|
||
|
||
## Documentación
|
||
|
||
Ver `docs/00-overview/` para más información.
|
||
EOF
|
||
|
||
# ERP Construcción
|
||
cat > "projects/erp-construccion/README.md" << 'EOF'
|
||
# ERP CONSTRUCCIÓN
|
||
|
||
**Tipo:** ERP Especializado
|
||
**Giro:** Empresas de construcción e INFONAVIT
|
||
**Estado:** 🚧 En desarrollo
|
||
**Versión:** 0.1.0
|
||
**Base:** ERP Genérico (60-70% de código reutilizado)
|
||
|
||
## Descripción
|
||
|
||
ERP especializado para empresas de construcción con módulos específicos para gestión de proyectos, control de obra, presupuestos, y cumplimiento normativo INFONAVIT.
|
||
|
||
## Módulos Específicos
|
||
|
||
- Gestión de proyectos de construcción
|
||
- Presupuestos y costos
|
||
- Control de obra y avances
|
||
- INFONAVIT y cumplimiento normativo
|
||
- Gestión de activos y maquinaria
|
||
- Estimaciones y facturación
|
||
- Gestión documental
|
||
- HSE (Seguridad e higiene)
|
||
|
||
## Documentación
|
||
|
||
Ver `docs/00-overview/MVP-APP.md` para el plan completo del MVP.
|
||
EOF
|
||
|
||
# ERP Vidrio
|
||
cat > "projects/erp-vidrio-templado/README.md" << 'EOF'
|
||
# ERP VIDRIO TEMPLADO
|
||
|
||
**Tipo:** ERP Especializado
|
||
**Giro:** Producción de vidrio templado
|
||
**Estado:** 📋 En planificación
|
||
**Versión:** 0.1.0
|
||
**Base:** ERP Genérico (60-70% de código reutilizado)
|
||
|
||
## Descripción
|
||
|
||
ERP especializado para empresas de producción de vidrio templado con módulos para gestión de producción, control de calidad, inventario de materia prima, y órdenes de producción.
|
||
|
||
## Módulos Específicos
|
||
|
||
- Órdenes de producción
|
||
- Control de calidad (testing de vidrio)
|
||
- Inventario de materia prima
|
||
- Gestión de hornos/maquinaria
|
||
- Trazabilidad de lotes
|
||
- Cotizaciones y ventas
|
||
|
||
## Documentación
|
||
|
||
Ver `docs/00-overview/` para más información.
|
||
EOF
|
||
|
||
# ERP Mecánicas
|
||
cat > "projects/erp-mecanicas-diesel/README.md" << 'EOF'
|
||
# ERP MECÁNICAS DIESEL
|
||
|
||
**Tipo:** ERP Especializado
|
||
**Giro:** Laboratorios de mecánica diesel
|
||
**Estado:** 📋 En planificación
|
||
**Versión:** 0.1.0
|
||
**Base:** ERP Genérico (50-60% de código reutilizado)
|
||
|
||
## Descripción
|
||
|
||
ERP especializado para laboratorios de mecánica diesel con módulos para diagnósticos, reparaciones, gestión de refacciones, y mantenimiento.
|
||
|
||
## Módulos Específicos
|
||
|
||
- Diagnósticos y pruebas
|
||
- Órdenes de reparación
|
||
- Inventario de refacciones
|
||
- Gestión de vehículos en servicio
|
||
- Cotizaciones y facturación
|
||
- Historial de servicios
|
||
|
||
## Documentación
|
||
|
||
Ver `docs/00-overview/` para más información.
|
||
EOF
|
||
|
||
log_success "READMEs creados"
|
||
|
||
# README de shared/bugs
|
||
log_info "Creando README de shared/bugs..."
|
||
cat > "shared/bugs/README.md" << 'EOF'
|
||
# SISTEMA DE GESTIÓN DE BUGS
|
||
|
||
## Estructura
|
||
|
||
- `global/` - Bugs que afectan a componentes compartidos
|
||
- `by-component/` - Bugs organizados por componente
|
||
|
||
## Workflow
|
||
|
||
### Bug Local (específico de un proyecto)
|
||
|
||
Reportar en: `projects/{proyecto}/bugs/BUGS-ACTIVOS.md`
|
||
|
||
### Bug Global (afecta componente compartido)
|
||
|
||
1. Reportar en: `shared/bugs/global/BUGS-ACTIVOS.md`
|
||
2. Identificar proyectos afectados
|
||
3. Priorizar según impacto
|
||
4. Corregir en `shared/components/`
|
||
5. Actualizar todos los proyectos afectados
|
||
6. Validar en todos los proyectos
|
||
7. Cerrar bug y documentar
|
||
|
||
## Template de Bug Global
|
||
|
||
```yaml
|
||
## BUG-GLOBAL-XXX: Título del bug
|
||
**Componente:** shared/components/...
|
||
**Afecta a:**
|
||
- proyecto-1 ✅
|
||
- proyecto-2 ❌
|
||
**Prioridad:** 🔴 Alta | 🟡 Media | 🟢 Baja
|
||
**Estado:** 🔧 En corrección | 🧪 En testing | ✅ Resuelto
|
||
**Detectado en:** proyecto-x
|
||
**Fecha:** YYYY-MM-DD
|
||
**Asignado a:** Agente-X
|
||
|
||
### Descripción
|
||
...
|
||
|
||
### Impacto
|
||
...
|
||
|
||
### Plan de corrección
|
||
1. ...
|
||
```
|
||
EOF
|
||
|
||
log_success "README de bugs creado"
|
||
}
|
||
|
||
create_initial_files() {
|
||
print_header "CREANDO ARCHIVOS INICIALES"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
# Crear BUGS-ACTIVOS.md en shared/bugs/global
|
||
log_info "Creando archivos de bugs globales..."
|
||
cat > "shared/bugs/global/BUGS-ACTIVOS.md" << 'EOF'
|
||
# BUGS GLOBALES ACTIVOS
|
||
|
||
**Última actualización:** 2025-11-23
|
||
|
||
---
|
||
|
||
## 🔴 PRIORIDAD ALTA
|
||
|
||
_No hay bugs de prioridad alta actualmente_
|
||
|
||
---
|
||
|
||
## 🟡 PRIORIDAD MEDIA
|
||
|
||
_No hay bugs de prioridad media actualmente_
|
||
|
||
---
|
||
|
||
## 🟢 PRIORIDAD BAJA
|
||
|
||
_No hay bugs de prioridad baja actualmente_
|
||
|
||
---
|
||
|
||
## 📝 NOTAS
|
||
|
||
Los bugs globales afectan a componentes compartidos en `shared/components/`.
|
||
Para bugs específicos de un proyecto, usar `projects/{proyecto}/bugs/`.
|
||
EOF
|
||
|
||
cat > "shared/bugs/global/BUGS-RESUELTOS.md" << 'EOF'
|
||
# BUGS GLOBALES RESUELTOS
|
||
|
||
**Última actualización:** 2025-11-23
|
||
|
||
---
|
||
|
||
_No hay bugs resueltos aún_
|
||
|
||
---
|
||
EOF
|
||
|
||
log_success "Archivos de bugs creados"
|
||
|
||
# Crear PROJECT-STATUS.md para cada proyecto
|
||
log_info "Creando archivos PROJECT-STATUS.md..."
|
||
|
||
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
|
||
if [ "$project" = "erp-construccion" ]; then
|
||
status="🚧 En desarrollo"
|
||
progress="35%"
|
||
else
|
||
status="📋 En planificación"
|
||
progress="0%"
|
||
fi
|
||
|
||
cat > "projects/$project/PROJECT-STATUS.md" << EOF
|
||
# ESTADO DEL PROYECTO
|
||
|
||
**Proyecto:** $project
|
||
**Estado:** $status
|
||
**Progreso:** $progress
|
||
**Última actualización:** $(date +%Y-%m-%d)
|
||
|
||
---
|
||
|
||
## 📊 RESUMEN
|
||
|
||
- **Fase actual:** Análisis y planificación
|
||
- **Módulos completados:** 0
|
||
- **Módulos en desarrollo:** 0
|
||
- **Módulos pendientes:** TBD
|
||
|
||
---
|
||
|
||
## 🎯 PRÓXIMOS PASOS
|
||
|
||
1. Completar análisis de requerimientos
|
||
2. Modelado de dominio
|
||
3. Comparación con Odoo
|
||
4. Diseño de base de datos
|
||
5. Inicio de desarrollo
|
||
|
||
---
|
||
EOF
|
||
done
|
||
|
||
log_success "PROJECT-STATUS.md creados"
|
||
}
|
||
|
||
update_gitignore() {
|
||
print_header "ACTUALIZANDO .gitignore"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
log_info "Agregando entradas a .gitignore..."
|
||
|
||
cat >> .gitignore << 'EOF'
|
||
|
||
# =============================================================================
|
||
# MULTI-PROJECT WORKSPACE
|
||
# =============================================================================
|
||
|
||
# Backups
|
||
*_backup_*/
|
||
|
||
# Temporary files
|
||
temp_*/
|
||
*.tmp
|
||
|
||
# Project-specific node_modules
|
||
projects/*/apps/backend/node_modules/
|
||
projects/*/apps/frontend/web/node_modules/
|
||
projects/*/apps/frontend/mobile/node_modules/
|
||
|
||
# Project-specific build outputs
|
||
projects/*/apps/backend/dist/
|
||
projects/*/apps/frontend/web/dist/
|
||
projects/*/apps/frontend/mobile/dist/
|
||
|
||
# Environment files
|
||
projects/*/apps/backend/.env
|
||
projects/*/apps/frontend/web/.env
|
||
projects/*/apps/frontend/mobile/.env
|
||
|
||
# Database dumps
|
||
projects/*/apps/database/*.dump
|
||
projects/*/apps/database/*.sql.gz
|
||
|
||
EOF
|
||
|
||
log_success ".gitignore actualizado"
|
||
}
|
||
|
||
create_validation_script() {
|
||
print_header "CREANDO SCRIPT DE VALIDACIÓN"
|
||
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
log_info "Creando tools/validation/validate-structure.sh..."
|
||
|
||
cat > "tools/validation/validate-structure.sh" << 'EOFSCRIPT'
|
||
#!/bin/bash
|
||
|
||
# Script de validación de estructura multi-proyecto
|
||
|
||
WORKSPACE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||
cd "$WORKSPACE_ROOT"
|
||
|
||
echo "🔍 Validando estructura del workspace..."
|
||
echo ""
|
||
|
||
errors=0
|
||
|
||
# Validar shared/
|
||
echo "Validando shared/..."
|
||
for dir in reference orchestration analysis bugs components docs; do
|
||
if [ -d "shared/$dir" ]; then
|
||
echo " ✓ shared/$dir"
|
||
else
|
||
echo " ✗ shared/$dir NO EXISTE"
|
||
((errors++))
|
||
fi
|
||
done
|
||
|
||
# Validar projects/
|
||
echo ""
|
||
echo "Validando projects/..."
|
||
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
|
||
if [ -d "projects/$project" ]; then
|
||
echo " ✓ projects/$project"
|
||
|
||
# Validar subcarpetas
|
||
for subdir in docs apps orchestration bugs; do
|
||
if [ -d "projects/$project/$subdir" ]; then
|
||
echo " ✓ $subdir/"
|
||
else
|
||
echo " ✗ $subdir/ NO EXISTE"
|
||
((errors++))
|
||
fi
|
||
done
|
||
else
|
||
echo " ✗ projects/$project NO EXISTE"
|
||
((errors++))
|
||
fi
|
||
done
|
||
|
||
# Validar tools/
|
||
echo ""
|
||
echo "Validando tools/..."
|
||
for dir in scaffolding migration validation; do
|
||
if [ -d "tools/$dir" ]; then
|
||
echo " ✓ tools/$dir"
|
||
else
|
||
echo " ✗ tools/$dir NO EXISTE"
|
||
((errors++))
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
if [ $errors -eq 0 ]; then
|
||
echo "✅ Validación exitosa - Estructura completa"
|
||
exit 0
|
||
else
|
||
echo "❌ Validación fallida - $errors errores encontrados"
|
||
exit 1
|
||
fi
|
||
EOFSCRIPT
|
||
|
||
chmod +x "tools/validation/validate-structure.sh"
|
||
|
||
log_success "Script de validación creado"
|
||
}
|
||
|
||
# =============================================================================
|
||
# SCRIPT PRINCIPAL
|
||
# =============================================================================
|
||
|
||
main() {
|
||
print_header "MIGRACIÓN A ESTRUCTURA MULTI-PROYECTO"
|
||
|
||
echo "Este script migrará el workspace actual a la nueva estructura multi-proyecto."
|
||
echo ""
|
||
echo "Workspace: $WORKSPACE_ROOT"
|
||
echo "Backup: $BACKUP_DIR"
|
||
echo ""
|
||
read -p "¿Continuar? (s/N): " -n 1 -r
|
||
echo ""
|
||
|
||
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
|
||
log_warning "Migración cancelada"
|
||
exit 0
|
||
fi
|
||
|
||
# Ejecutar migración
|
||
validate_workspace
|
||
create_backup
|
||
create_shared_structure
|
||
move_shared_content
|
||
create_projects_structure
|
||
migrate_construccion_content
|
||
create_readme_files
|
||
create_initial_files
|
||
update_gitignore
|
||
create_validation_script
|
||
|
||
# Validar resultado
|
||
print_header "VALIDANDO RESULTADO"
|
||
bash "$WORKSPACE_ROOT/tools/validation/validate-structure.sh"
|
||
|
||
# Resumen
|
||
print_header "MIGRACIÓN COMPLETADA"
|
||
|
||
log_success "Migración completada exitosamente"
|
||
echo ""
|
||
echo "📁 Estructura nueva:"
|
||
echo " - shared/ → Componentes compartidos"
|
||
echo " - projects/ → Proyectos ERP individuales"
|
||
echo " - tools/ → Scripts de utilidad"
|
||
echo ""
|
||
echo "📦 Backup guardado en:"
|
||
echo " $BACKUP_DIR"
|
||
echo ""
|
||
echo "📋 Próximos pasos:"
|
||
echo " 1. Revisar estructura: tree -L 2"
|
||
echo " 2. Revisar README: cat PROPUESTA-REESTRUCTURACION-MULTI-PROYECTO.md"
|
||
echo " 3. Commit de cambios: git add . && git commit -m 'chore: migrate to multi-project structure'"
|
||
echo ""
|
||
}
|
||
|
||
# Ejecutar
|
||
main
|