08_14_00 - Packaging Configuration¶
Sistema de configuración de empaquetado para AudioLab plugins.
Componentes¶
AssetInclusionRules¶
Gestión de reglas de inclusión/exclusión de assets con soporte de wildcards.
Características:
- Patrones glob: *.wav, presets/**/*.json, bin/**
- Filtrado por plataforma (Windows/macOS/Linux)
- Filtrado por quality tier (Draft/Pro/Ultra)
- Priorización de reglas (higher priority = procesado primero)
- Inclusión/exclusión flexible
Ejemplo:
AssetInclusionRules rules;
// Incluir todos los presets
rules.addRule({"presets/**/*.json", true});
// Excluir archivos temporales (alta prioridad)
rules.addRule({"temp/**", false, Platform::All, QualityTier::All, 10});
// Solo para Windows
rules.addRule({"*.dll", true, Platform::Windows});
// Solo para Ultra tier
rules.addRule({"samples/**/*.wav", true, Platform::All, QualityTier::Ultra});
// Seleccionar assets
auto assets = rules.selectAssets("/path/to/project", Platform::Windows, QualityTier::Pro);
PlatformSpecificAssets¶
Gestión de assets específicos por plataforma.
Características: - Bundles por plataforma con required/optional assets - Extensiones de archivo platform-aware (.dll/.dylib/.so) - Transformación de paths entre plataformas - Validación de assets existentes - Estimación de tamaños
Ejemplo:
PlatformSpecificAssets assets;
// Windows bundle
PlatformBundle winBundle(Platform::Windows);
winBundle.requiredAssets = {"plugin.dll", "config.json"};
winBundle.optionalAssets = {"manual.pdf"};
winBundle.estimatedSize = 2 * 1024 * 1024; // 2MB
assets.addPlatformAssets(Platform::Windows, winBundle);
// Validar que existan
auto result = assets.validateAssets(Platform::Windows, "/build/output");
if (!result.valid) {
for (const auto& missing : result.missingAssets) {
std::cout << "Missing: " << missing << "\n";
}
}
// Transformar path cross-platform
std::string macPath = assets.transformPath("bin/plugin.dll",
Platform::Windows, Platform::MacOS);
// Result: "bin/plugin.dylib"
InstallerConfiguration¶
Configuración de instaladores por plataforma.
Características: - Soporte NSIS/WiX (Windows), PKG/DMG (macOS), DEB/RPM (Linux) - Paths de instalación por defecto - Metadata del producto (nombre, versión, publisher, GUID) - Configuración de licencias/EULA - Generación de scripts de instalador - Validación de configuraciones
Ejemplo:
InstallerConfiguration installer;
// Configuración Windows
Configuration winConfig;
winConfig.type = InstallerType::NSIS;
winConfig.metadata.productName = "TS_Compressor";
winConfig.metadata.version = "1.0.0";
winConfig.metadata.publisher = "AudioLab";
winConfig.metadata.guid = "{12345678-1234-1234-1234-123456789012}";
winConfig.paths = InstallPaths::getDefaultPaths(Platform::Windows);
winConfig.license.eulaFile = "LICENSE.txt";
winConfig.license.requireAcceptance = true;
installer.setConfiguration(Platform::Windows, winConfig);
// Validar
auto validation = installer.validate(Platform::Windows);
if (!validation.valid) {
for (const auto& error : validation.errors) {
std::cerr << "Error: " << error << "\n";
}
}
// Generar script NSIS
auto script = installer.generateInstallerScript(Platform::Windows);
std::ofstream out(script.filename);
out << script.content;
JSON Schema¶
El archivo schemas/packaging_config.json define la estructura JSON para configuración:
{
"product": "TS_Compressor",
"version": "1.0.0",
"platforms": {
"windows": {
"installer": "NSIS",
"assets": [
{"pattern": "bin/**/*.dll", "tier": "all"},
{"pattern": "samples/**/*.wav", "tier": "ultra"}
]
}
},
"tiers": {
"draft": {
"include": ["bin/**", "presets/factory/*.json"],
"exclude": ["docs/**", "samples/**"],
"maxSize": 10485760
},
"ultra": {
"include": ["**"],
"additionalAssets": ["samples/high_quality/**"]
}
}
}
Build¶
cd tests
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
./test_packaging_config.exe
Integration¶
# En tu CMakeLists.txt
add_subdirectory(08_14_00_packaging_config)
target_link_libraries(your_target PRIVATE packaging_config)
#include "AssetInclusionRules.hpp"
#include "PlatformSpecificAssets.hpp"
#include "InstallerConfiguration.hpp"
using namespace audiolab::plugins::packaging;
Tests¶
Los tests cubren:
- ✅ Pattern matching con wildcards (**, *, ?)
- ✅ Filtrado por platform/tier
- ✅ Priorización de reglas
- ✅ Conversiones string ↔ enum
- ✅ Platform-specific extensions
- ✅ Path transformations
- ✅ Installer configuration & validation
- ✅ Script generation (NSIS/PKG/DEB)
Uso Típico¶
Workflow completo:
// 1. Configurar reglas de inclusión
AssetInclusionRules rules;
rules.addRule({"**/*.json", true});
rules.addRule({"**/*.dll", true, Platform::Windows});
rules.addRule({"temp/**", false, Platform::All, QualityTier::All, 10});
// 2. Seleccionar assets
auto selectedAssets = rules.selectAssets(
"/build/output",
Platform::Windows,
QualityTier::Pro
);
// 3. Configurar platform bundle
PlatformSpecificAssets platformAssets;
PlatformBundle bundle(Platform::Windows);
bundle.requiredAssets = selectedAssets;
platformAssets.addPlatformAssets(Platform::Windows, bundle);
// 4. Validar assets
auto validation = platformAssets.validateAssets(Platform::Windows, "/build/output");
// 5. Configurar instalador
InstallerConfiguration installer;
Configuration config;
config.type = InstallerType::NSIS;
config.metadata.productName = "MyPlugin";
config.metadata.version = "1.0.0";
config.paths = InstallPaths::getDefaultPaths(Platform::Windows);
installer.setConfiguration(Platform::Windows, config);
// 6. Generar script
auto script = installer.generateInstallerScript(Platform::Windows);
Dependencies¶
- C++20
- STL filesystem
- Catch2 (tests only)