Rustelo/config/scripts/demo-config.sh

294 lines
9.4 KiB
Bash
Raw Normal View History

2025-07-07 23:13:01 +01:00
#!/bin/bash
# Configuration System Demonstration Script
# Shows the new modular configuration system in action
# Usage: ./demo-config.sh
set -e
# Script configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_DIR="$(dirname "$SCRIPT_DIR")"
PROJECT_ROOT="$(dirname "$CONFIG_DIR")"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color
# Print functions
print_header() {
echo -e "\n${BOLD}${BLUE}================================${NC}"
echo -e "${BOLD}${BLUE}$1${NC}"
echo -e "${BOLD}${BLUE}================================${NC}\n"
}
print_section() {
echo -e "\n${BOLD}${CYAN}--- $1 ---${NC}"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# Main demonstration
main() {
print_header "Rustelo Configuration System Demo"
echo "This demonstration shows the new modular configuration system"
echo "that separates features into environment-specific configurations."
echo ""
echo "The system provides:"
echo " • Environment-specific settings (dev, prod, example)"
echo " • Feature-based configuration modules"
echo " • Automatic configuration building and validation"
echo " • Backup and management utilities"
print_section "Configuration Structure"
echo "Current configuration directory structure:"
echo ""
tree "$CONFIG_DIR" -I "__pycache__|*.pyc|*.backup*" 2>/dev/null || {
find "$CONFIG_DIR" -type f -name "*.toml" -o -name "*.sh" -o -name "*.py" | head -20
}
print_section "Available Features"
echo "Features configured in the system:"
echo ""
local features_dir="$CONFIG_DIR/features"
if [ -d "$features_dir" ]; then
for feature_dir in "$features_dir"/*; do
if [ -d "$feature_dir" ]; then
local feature_name=$(basename "$feature_dir")
local env_count=0
local env_list=""
for env_file in "$feature_dir"/*.toml; do
if [ -f "$env_file" ]; then
env_count=$((env_count + 1))
local env_name=$(basename "$env_file" .toml)
env_list="$env_list $env_name"
fi
done
printf " %-12s → %d environments (%s)\n" "$feature_name" "$env_count" "$env_list"
fi
done
fi
print_section "Building Development Configuration"
echo "Building configuration for development environment..."
echo ""
local dev_config="demo_config_dev.toml"
if "$SCRIPT_DIR/build-config.sh" dev "$dev_config"; then
print_success "Development configuration built successfully"
# Show some statistics
local file_size=$(du -h "$dev_config" | cut -f1)
local line_count=$(wc -l < "$dev_config")
local section_count=$(grep -c "^\[.*\]" "$dev_config")
echo ""
echo "Development Configuration Stats:"
echo " • File size: $file_size"
echo " • Lines: $line_count"
echo " • Sections: $section_count"
echo ""
echo "Sample configuration sections:"
echo ""
grep "^\[.*\]" "$dev_config" | head -10 | sed 's/^/ /'
else
print_error "Failed to build development configuration"
fi
print_section "Building Production Configuration"
echo "Building configuration for production environment..."
echo ""
local prod_config="demo_config_prod.toml"
if "$SCRIPT_DIR/build-config.sh" prod "$prod_config"; then
print_success "Production configuration built successfully"
# Show some statistics
local file_size=$(du -h "$prod_config" | cut -f1)
local line_count=$(wc -l < "$prod_config")
local section_count=$(grep -c "^\[.*\]" "$prod_config")
echo ""
echo "Production Configuration Stats:"
echo " • File size: $file_size"
echo " • Lines: $line_count"
echo " • Sections: $section_count"
else
print_error "Failed to build production configuration"
fi
print_section "Configuration Comparison"
echo "Comparing development vs production configurations:"
echo ""
if [ -f "$dev_config" ] && [ -f "$prod_config" ]; then
echo "Environment Differences:"
echo ""
# Extract key differences
echo "Development specific settings:"
grep -E "(debug|log_level|localhost|127\.0\.0\.1)" "$dev_config" | head -5 | sed 's/^/ /'
echo ""
echo "Production specific settings:"
grep -E "(https|ssl|encryption|backup)" "$prod_config" | head -5 | sed 's/^/ /'
echo ""
echo "Size comparison:"
echo " • Dev config: $(wc -l < "$dev_config") lines"
echo " • Prod config: $(wc -l < "$prod_config") lines"
echo " • Difference: $(($(wc -l < "$prod_config") - $(wc -l < "$dev_config"))) lines"
fi
print_section "Feature Configuration Examples"
echo "Sample feature configurations:"
echo ""
# Show auth feature differences
if [ -f "$CONFIG_DIR/features/auth/dev.toml" ] && [ -f "$CONFIG_DIR/features/auth/prod.toml" ]; then
echo "Authentication Feature:"
echo " Development:"
grep -E "(max_login_attempts|lockout_duration)" "$CONFIG_DIR/features/auth/dev.toml" | head -2 | sed 's/^/ /'
echo " Production:"
grep -E "(max_login_attempts|lockout_duration)" "$CONFIG_DIR/features/auth/prod.toml" | head -2 | sed 's/^/ /'
echo ""
fi
# Show TLS feature differences
if [ -f "$CONFIG_DIR/features/tls/dev.toml" ] && [ -f "$CONFIG_DIR/features/tls/prod.toml" ]; then
echo "TLS Feature:"
echo " Development:"
grep -E "(tls = |enabled = )" "$CONFIG_DIR/features/tls/dev.toml" | head -2 | sed 's/^/ /'
echo " Production:"
grep -E "(tls = |enabled = )" "$CONFIG_DIR/features/tls/prod.toml" | head -2 | sed 's/^/ /'
echo ""
fi
print_section "Configuration Validation"
echo "Validating built configurations..."
echo ""
# Basic validation
local validation_passed=0
local validation_total=0
for config in "$dev_config" "$prod_config"; do
if [ -f "$config" ]; then
validation_total=$((validation_total + 1))
# Check for required sections
local required_sections=("server" "database" "app")
local config_name=$(basename "$config" .toml)
echo "Validating $config_name:"
local section_issues=0
for section in "${required_sections[@]}"; do
if grep -q "^\[${section}\]" "$config"; then
echo " ✓ Section [$section] present"
else
echo " ✗ Section [$section] missing"
section_issues=$((section_issues + 1))
fi
done
if [ $section_issues -eq 0 ]; then
validation_passed=$((validation_passed + 1))
print_success "$config_name validation passed"
else
print_error "$config_name validation failed"
fi
echo ""
fi
done
print_section "Build Information"
echo "Configuration build metadata:"
echo ""
if [ -f "$dev_config" ]; then
echo "Development build info:"
grep -A 5 "^\[build_info\]" "$dev_config" | sed 's/^/ /'
echo ""
fi
print_section "Usage Examples"
echo "How to use the configuration system:"
echo ""
echo "1. Build configuration for development:"
echo " ./config/scripts/build-config.sh dev"
echo ""
echo "2. Build configuration for production:"
echo " ./config/scripts/build-config.sh prod config.prod.toml"
echo ""
echo "3. Validate configuration:"
echo " ./config/scripts/manage-config.sh validate dev"
echo ""
echo "4. Compare configurations:"
echo " ./config/scripts/manage-config.sh diff dev prod"
echo ""
echo "5. Create new feature:"
echo " ./config/scripts/manage-config.sh template my_feature"
echo ""
echo "6. Show system status:"
echo " ./config/scripts/manage-config.sh status"
print_section "Cleanup"
echo "Cleaning up demo files..."
# Clean up demo files
rm -f "$dev_config" "$prod_config"
print_success "Demo files cleaned up"
print_header "Demo Complete"
echo "The new configuration system provides:"
echo ""
echo "✓ Environment-specific configurations"
echo "✓ Feature-based modularity"
echo "✓ Automatic building and validation"
echo "✓ Easy management and maintenance"
echo "✓ Backup and recovery capabilities"
echo ""
echo "For more information, see:"
echo " • config/README.md - Complete documentation"
echo " • config/scripts/ - Available management scripts"
echo " • config/features/ - Feature configuration modules"
echo ""
print_success "Configuration system is ready to use!"
}
# Check if we're in the right directory
if [ ! -d "$CONFIG_DIR" ]; then
print_error "Configuration directory not found: $CONFIG_DIR"
echo "Please run this script from the project root directory."
exit 1
fi
# Run the demonstration
main "$@"