prvng_platform/scripts/validate-configs.nu
2025-10-07 10:59:52 +01:00

136 lines
4.7 KiB
Plaintext
Executable File

#!/usr/bin/env nu
# Platform Configuration Validation Script
# Validates all platform service configuration files
def check-config [path: string] {
if ($path | path exists) {
try {
open $path | ignore
true
} catch {
false
}
} else {
false
}
}
def main [] {
print "🔍 Validating Platform Service Configurations...\n"
let services = [
{ name: "Orchestrator", path: "orchestrator", configs: ["config.defaults.toml", "config.schema.toml"], backup: null }
{ name: "Control Center", path: "control-center", configs: ["config.defaults.toml", "config.schema.toml"], backup: "config.toml.backup" }
{ name: "MCP Server", path: "mcp-server", configs: ["config.defaults.toml", "config.schema.toml"], backup: null }
]
let config_checks = $services | each { |service|
print $"📦 Checking ($service.name)..."
let base_path = $"($env.PWD)/($service.path)"
let config_results = $service.configs | each { |config|
let config_path = $"($base_path)/($config)"
let exists = ($config_path | path exists)
let valid = (check-config $config_path)
if $exists {
if $valid {
print $" ✅ ($config) exists and is valid TOML"
} else {
print $" ❌ ($config) has invalid TOML syntax"
}
} else {
print $" ❌ ($config) NOT FOUND"
}
{config: $config, exists: $exists, valid: $valid}
}
let backup_ok = if $service.backup != null {
let backup_path = $"($base_path)/($service.backup)"
if ($backup_path | path exists) {
print $" ✅ Backup ($service.backup) exists"
true
} else {
print $" ❌ Backup ($service.backup) NOT FOUND"
false
}
} else {
true
}
print ""
let all_configs_ok = ($config_results | all { |x| $x.exists and $x.valid })
{service: $service.name, configs_ok: $all_configs_ok, backup_ok: $backup_ok, valid: ($all_configs_ok and $backup_ok)}
}
# Check orchestrator Rust integration
print "🔧 Checking Orchestrator Rust Integration..."
let config_rs_path = "orchestrator/src/config.rs"
let config_rs_exists = ($config_rs_path | path exists)
if $config_rs_exists {
let lines = (open $config_rs_path | lines | length)
print $" ✅ src/config.rs exists \(($lines) lines\)"
} else {
print $" ❌ src/config.rs NOT FOUND"
}
let cargo_toml_path = "orchestrator/Cargo.toml"
let has_toml_dep = (open --raw $cargo_toml_path | str contains "toml = {")
if $has_toml_dep {
print " ✅ toml dependency added to Cargo.toml"
} else {
print " ❌ toml dependency NOT in Cargo.toml"
}
let lib_rs_path = "orchestrator/src/lib.rs"
let has_config_mod = (open --raw $lib_rs_path | str contains "pub mod config;")
if $has_config_mod {
print " ✅ config module exported in lib.rs"
} else {
print " ❌ config module NOT exported in lib.rs"
}
print ""
let all_services_ok = ($config_checks | all { |x| $x.valid })
let rust_integration_ok = ($config_rs_exists and $has_toml_dep and $has_config_mod)
let all_valid = ($all_services_ok and $rust_integration_ok)
# Final result
if $all_valid {
print "✨ All platform configurations are valid!"
print ""
print "📋 Summary:"
print " - 3 services configured (Orchestrator, Control Center, MCP Server)"
print " - 6 config files created (2 per service)"
print " - 1 backup created (control-center/config.toml.backup)"
print " - Rust config module integrated (orchestrator/src/config.rs)"
print ""
print "🚀 Next Steps:"
print " 1. Update orchestrator/src/main.rs to use OrchestratorConfig::load()"
print " 2. Test config loading with: cd orchestrator && cargo test config::"
print " 3. Create config.user.toml.example files for user overrides"
} else {
print "❌ Configuration validation failed!"
print " Review errors above and fix missing/invalid files."
print ""
print "Failed checks:"
for check in $config_checks {
if not $check.valid {
print $" - ($check.service): configs_ok=($check.configs_ok), backup_ok=($check.backup_ok)"
}
}
if not $rust_integration_ok {
print $" - Rust integration: config.rs=($config_rs_exists), toml_dep=($has_toml_dep), module_export=($has_config_mod)"
}
}
}