📦 DEPENDENCY MANAGEMENT - GUÍA MAESTRA¶
Sistema de Gestión de Dependencias para AudioLab¶
"Dependencies bien gestionadas = builds reproducibles y desarrollo sin fricción"
📖 TABLA DE CONTENIDOS¶
- Quick Start
- Visión General
- ¿Qué Script Usar?
- Estructura de Documentación
- Rutas de Aprendizaje
- Troubleshooting
- Recursos
🚀 QUICK START¶
Setup Inicial (5 minutos)¶
# 1. Navegar a dependency management
cd "2 - FOUNDATION/03_INFRA/03_03_dependency_management"
# 2. Instalar TODAS las dependencias
# Windows:
.\03_03_01_installation_scripts\install_all_dependencies.ps1
# Unix/macOS:
./03_03_01_installation_scripts/install_all_dependencies.sh
# 3. Verificar instalación
# Windows:
.\03_03_01_installation_scripts\verify_installation.ps1
# Unix/macOS:
./03_03_01_installation_scripts/verify_installation.sh
⏱️ Tiempo esperado: 15-30 minutos (primera vez)
✅ Si todo funciona: Verás "✓ All dependencies installed successfully"
❌ Si algo falla: Ver Troubleshooting
🎯 VISIÓN GENERAL¶
AudioLab gestiona dependencias usando un sistema híbrido que combina:
📦 Tipos de Dependencias¶
┌─────────────────────────────────────────────────────────┐
│ │
│ 🔧 VCPKG PACKAGES (7) │
│ ├─ fftw3 - Fast Fourier Transform │
│ ├─ eigen3 - Linear algebra │
│ ├─ libsndfile - Audio file I/O │
│ ├─ catch2 - Testing framework │
│ ├─ benchmark - Performance testing │
│ ├─ fmt - String formatting │
│ └─ spdlog - Logging │
│ │
│ 🐍 PYTHON TOOLS (3) │
│ ├─ black - Code formatter │
│ ├─ pytest - Testing │
│ └─ sphinx - Documentation │
│ │
│ 📚 VENDORED (1) │
│ └─ JUCE 7.0.9 - Audio plugin framework (71 MB) │
│ │
└─────────────────────────────────────────────────────────┘
🗂️ Sistema de Registry¶
Innovación clave: Tracking Git-friendly de dependencias instaladas
_installed_registry/
├── vcpkg/
│ ├── fftw3.yaml ← versión, fecha, location
│ ├── eigen3.yaml
│ └── ...
├── python/
│ ├── black.yaml
│ └── ...
└── vendored/
└── juce.yaml
Beneficios: - ✅ Team sync (todos mismo setup) - ✅ Audit trail (quién instaló qué y cuándo) - ✅ Version tracking (git diff muestra cambios)
🔀 ¿QUÉ SCRIPT USAR?¶
Flowchart de Decisión¶
┌────────────────────────────────────────┐
│ ¿Primera vez instalando? │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ install_all_dependencies │ ← Instala TODO
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ verify_installation │ ← Verifica
└──────────┬───────────────┘
│
✅ DONE
┌────────────────────────────────────────┐
│ Ya instalado, solo verificar? │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ verify_installation │
└──────────────────────────┘
┌────────────────────────────────────────┐
│ Solo necesitas core packages? │
│ (más rápido, omite opcionales) │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ install_core_deps │ ← Más rápido
└──────────────────────────┘
┌────────────────────────────────────────┐
│ ¿Ver qué está instalado? │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ list_installed │
└──────────────────────────┘
┌────────────────────────────────────────┐
│ ¿Registry desactualizado? │
│ (instalaste algo manualmente) │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ update_registry │
└──────────────────────────┘
┌────────────────────────────────────────┐
│ ¿Actualizar dependencias? │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ update_dependencies │
└──────────────────────────┘
┌────────────────────────────────────────┐
│ ¿Limpiar y empezar de cero? │
└─────────┬──────────────────────────────┘
│
SÍ │
▼
┌──────────────────────────┐
│ clean_dependencies │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ install_all_dependencies │
└──────────────────────────┘
Tabla de Scripts¶
| Script | Cuándo Usar | Tiempo | Plataformas |
|---|---|---|---|
| install_all_dependencies | Primera instalación completa | 15-30 min | Win, Unix, macOS |
| install_core_deps | Solo packages esenciales (más rápido) | 10-15 min | Windows |
| verify_installation | Verificar que todo esté instalado | 1-2 min | Win, Unix, macOS |
| list_installed | Ver qué packages tienes | < 1 min | Windows |
| update_registry | Sync registry con instalaciones | < 1 min | Windows |
| update_dependencies | Actualizar a nuevas versiones | 10-20 min | Windows |
| clean_dependencies | Limpiar todo (nuclear option) | < 1 min | Windows |
| check_security | Audit vulnerabilidades | 2-5 min | Windows |
Ver: 03_03_01_installation_scripts/README.md
📚 ESTRUCTURA DE DOCUMENTACIÓN¶
03_03_dependency_management/
│
├── 📄 README.md (este archivo) ⭐
├── 📄 DEPENDENCY_CHEAT_SHEET.md ⭐ (comandos rápidos)
├── 📄 INSTALLATION_GUIDE.md (guía detallada)
│
├── 📁 03_03_00_package_manifests/
│ ├── vcpkg.json (manifest de vcpkg)
│ ├── vcpkg-configuration.json
│ ├── requirements.txt (Python packages)
│ └── _installed_registry/ ⭐ (tracking system)
│ ├── vcpkg/
│ ├── python/
│ └── vendored/
│
├── 📁 03_03_01_installation_scripts/ ⭐
│ ├── README.md (guía de scripts)
│ ├── install_all_dependencies.ps1/sh
│ ├── install_core_deps.ps1
│ ├── verify_installation.ps1/sh
│ ├── list_installed.ps1
│ └── update_registry.ps1
│
├── 📁 03_03_02_cmake_integration/
│ ├── README.md (cómo integrar con CMake)
│ ├── Dependencies.cmake
│ ├── INTEGRATION_EXAMPLE.cmake
│ └── FindModules/
│ ├── FindFFTW3.cmake
│ ├── FindIPP.cmake
│ └── FindJUCE.cmake
│
├── 📁 03_03_03_maintenance_scripts/
│ ├── README.md (guía de mantenimiento)
│ ├── update_dependencies.ps1
│ ├── clean_dependencies.ps1
│ └── check_security.ps1
│
├── 📁 03_03_04_license_management/
│ ├── README.md
│ ├── generate_attributions.ps1/sh
│ └── THIRD_PARTY_LICENSES.md (generado)
│
├── 📁 03_03_05_vendoring/
│ ├── VENDOR_POLICY.md (cuándo vendor vs external)
│ └── juce/ (JUCE framework vendored)
│
└── 📁 03_03_09_troubleshooting/
├── README.md
└── DEPENDENCY_TROUBLESHOOTING_GUIDE.md ⭐ (876 líneas)
⭐ = Documentos esenciales
🛤️ RUTAS DE APRENDIZAJE¶
🌱 RUTA 1: USUARIO (Solo quiero que funcione)¶
Objetivo: Instalar dependencias y seguir desarrollando
Secuencia (30 min):
- Este README (5 min)
- 📖 Lee: Quick Start
-
📖 Lee: ¿Qué Script Usar?
-
Ejecutar instalación (15-30 min)
-
DEPENDENCY_CHEAT_SHEET.md (5 min)
-
📖 Bookmarkea para comandos rápidos
-
Si algo falla:
- 📖 DEPENDENCY_TROUBLESHOOTING_GUIDE.md
✅ Al Completar: Puedes compilar AudioLab con todas las dependencias.
🌿 RUTA 2: DEVELOPER (Entender el sistema)¶
Objetivo: Comprender cómo funciona la gestión de dependencias
Secuencia (2-3 horas):
- INSTALLATION_GUIDE.md (30 min)
- 📖 Detalles de cada package
-
📖 Sistema de registry explicado
- 📖 Qué hace cada script internamente
-
📖 Cómo personalizar instalación
-
03_03_02_cmake_integration/README.md (1 hora)
- 📖 Cómo CMake encuentra packages
- 📖 Crear custom FindModules
-
📖 Integration examples
-
VENDOR_POLICY.md (30 min)
- 📖 Cuándo vendor vs external
- 📖 Por qué JUCE está vendored
✅ Al Completar: Puedes agregar nuevas dependencias, troubleshoot issues.
🌲 RUTA 3: MAINTAINER (Gestionar dependencias)¶
Objetivo: Mantener dependencias actualizadas y seguras
Secuencia (4-5 horas):
-
Ruta 2 completa (prerequisito)
- 📖 Update workflow
- 📖 Security audits
-
📖 Dependency cleanup
- 📖 License compliance
- 📖 Attribution generation
-
📖 Legal requirements
-
DEPENDENCY_TROUBLESHOOTING_GUIDE.md (2 horas)
- 📖 Todos los problemas comunes
-
📖 Advanced troubleshooting
-
Práctica: Actualizar una dependencia completa
✅ Al Completar: Puedes gestionar todo el ciclo de vida de dependencias.
🚨 RUTA DE EMERGENCIA: "¡Las Dependencias Fallan!"¶
Si estás bloqueado:
- STOP - No reinstales ciegamente
- Identifica el problema:
- Busca en troubleshooting:
- DEPENDENCY_TROUBLESHOOTING_GUIDE.md
- Busca tu error específico (Ctrl+F)
- Problemas comunes:
- ❌ "vcpkg: command not found" → Sección 1.1
- ❌ "CMake can't find package" → Sección 3.2
- ❌ "Download failed" → Sección 5.1
- Si no resuelves: Pide ayuda en
#dependency-helpSlack
🔍 TROUBLESHOOTING¶
Diagnóstico Rápido¶
| Error | Causa Probable | Solución Rápida |
|---|---|---|
vcpkg: command not found |
vcpkg no instalado | ./install_all_dependencies.ps1 |
CMake can't find package |
Toolchain no configurado | Ver CMake Integration |
Download failed |
Network/proxy issue | Ver Troubleshooting - Network |
Version conflict |
Múltiples versiones | ./clean_dependencies.ps1 + reinstall |
Permission denied |
Scripts no ejecutables | chmod +x *.sh (Unix) |
Troubleshooting Completo¶
Ver: DEPENDENCY_TROUBLESHOOTING_GUIDE.md (876 líneas)
Incluye: - ✅ 50+ problemas comunes - ✅ Síntoma → Diagnóstico → Solución - ✅ Platform-specific issues - ✅ Advanced scenarios
📊 CASOS DE USO COMUNES¶
Caso 1: First-Time Setup (Team Member)¶
# 1. Clone repo
git clone https://github.com/audiolab/audio-lab.git
cd audio-lab
# 2. Install dependencies
cd "2 - FOUNDATION/03_INFRA/03_03_dependency_management"
./03_03_01_installation_scripts/install_all_dependencies.ps1
# 3. Verify
./03_03_01_installation_scripts/verify_installation.ps1
# 4. Build project
cd ../../..
./2\ -\ FOUNDATION/03_INFRA/03_02_build_infrastructure/03_02_03_build_scripts/build.sh
Caso 2: Agregar Nueva Dependencia¶
# 1. Instalar con vcpkg
vcpkg install new-library:x64-windows
# 2. Actualizar registry
./03_03_01_installation_scripts/update_registry.ps1
# 3. Agregar a CMake
# Editar: 03_03_02_cmake_integration/Dependencies.cmake
find_package(NewLibrary REQUIRED)
# 4. Commit registry
git add 03_03_00_package_manifests/_installed_registry/
git commit -m "Add new-library dependency"
Caso 3: Actualizar Dependencias¶
# 1. Ver versiones actuales
./03_03_01_installation_scripts/list_installed.ps1
# 2. Actualizar
./03_03_03_maintenance_scripts/update_dependencies.ps1
# 3. Verificar todo funciona
./03_03_01_installation_scripts/verify_installation.ps1
# 4. Actualizar registry
./03_03_01_installation_scripts/update_registry.ps1
# 5. Test build
cd ../../03_02_build_infrastructure/03_02_03_build_scripts
./build.sh
# 6. Commit si todo OK
git add ../03_03_00_package_manifests/_installed_registry/
git commit -m "Update dependencies to latest versions"
Caso 4: Clean Reinstall (Nuclear Option)¶
# 1. Limpiar TODO
./03_03_03_maintenance_scripts/clean_dependencies.ps1
# 2. Reinstalar desde cero
./03_03_01_installation_scripts/install_all_dependencies.ps1
# 3. Verificar
./03_03_01_installation_scripts/verify_installation.ps1
Caso 5: Generar License Attributions (Para Release)¶
# Antes de distribuir software
cd 03_03_04_license_management
./generate_attributions.ps1
# Genera: THIRD_PARTY_LICENSES.md
# Incluir en distribución
🔐 SECURITY & COMPLIANCE¶
Security Audits¶
License Compliance¶
# Generar attributions
./03_03_04_license_management/generate_attributions.ps1
# Review licenses
cat 03_03_04_license_management/THIRD_PARTY_LICENSES.md
Ver: License Management README
🎓 FILOSOFÍA DE AUDIOLAB DEPENDENCIES¶
Principios¶
- Reproducibilidad - Mismo setup en todos los dev machines
- Transparency - Registry tracking de todo instalado
- Automation - Scripts para everything
- Compliance - License tracking automático
- Minimalism - Solo dependencias necesarias
Vendor vs External¶
Ver: VENDOR_POLICY.md
TL;DR: - Vendor si modificamos el código o es muy estable - External (vcpkg) para libraries estándar que se actualizan
📖 RECURSOS¶
AudioLab Interno¶
- Build System: ../03_02_build_infrastructure/
- CMake Integration: 03_03_02_cmake_integration/README.md
- Troubleshooting: 03_03_09_troubleshooting/
Externos¶
Herramientas¶
🤝 CONTRIBUCIONES¶
Agregar Nueva Dependencia¶
- Evaluar si vendor o external (ver VENDOR_POLICY.md)
- Si external: Agregar a
vcpkg.jsonorequirements.txt - Ejecutar
install_all_dependencies.ps1 - Actualizar registry:
update_registry.ps1 - Agregar a
Dependencies.cmake - Commit registry + manifests
Reportar Issues¶
- Dependency que falla → Crear issue con logs
- Mejora a scripts → PR bienvenido
- Nueva dependencia → Proponer en
#dependenciesSlack
Maintainer: Dependency Management Team
Slack: #dependency-help
📝 MÉTRICAS DE ÉXITO¶
Sabrás que dominas el sistema cuando:
- Puedes instalar todas las dependencias desde cero
- Entiendes el sistema de registry
- Puedes agregar nuevas dependencias
- Sabes troubleshoot errores comunes
- Puedes actualizar dependencias safely
- Generas license attributions para releases
- Ayudas a otros con dependency issues
🎯 RESUMEN RÁPIDO¶
Para instalar (primera vez):
Para verificar qué tienes:
Para actualizar:
Para troubleshooting: - DEPENDENCY_CHEAT_SHEET.md - DEPENDENCY_TROUBLESHOOTING_GUIDE.md
Última actualización: 2025-10-09 Versión: 1.0.0
¡Bienvenido al sistema de gestión de dependencias de AudioLab! 📦
"Dependencies que funcionan = developers felices"