#!/bin/bash # verify_config_writing.sh # Script de vérification de l'écriture effective des fichiers de configuration # Basé sur REX_CONFIGURATION_MANAGEMENT.md set -e # Couleurs pour les logs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonctions de logging log() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Fonction de vérification d'un fichier de configuration verify_config_file() { local file="$1" local expected_content="$2" local description="$3" log "Vérification de $file ($description)..." if [ -f "$file" ]; then if grep -q "$expected_content" "$file"; then log_success "$file contient '$expected_content'" return 0 else log_error "$file ne contient pas '$expected_content'" return 1 fi else log_error "$file n'existe pas" return 1 fi } # Fonction de vérification de la syntaxe verify_syntax() { local file="$1" case "$file" in *.yml|*.yaml) log "Vérification de la syntaxe YAML pour $file..." if command -v yq >/dev/null 2>&1; then if yq eval '.' "$file" >/dev/null 2>&1; then log_success "Syntaxe YAML valide pour $file" return 0 else log_error "Syntaxe YAML invalide pour $file" return 1 fi else log_warning "yq non installé, impossible de vérifier la syntaxe YAML" return 0 fi ;; *.json) log "Vérification de la syntaxe JSON pour $file..." if command -v jq >/dev/null 2>&1; then if jq '.' "$file" >/dev/null 2>&1; then log_success "Syntaxe JSON valide pour $file" return 0 else log_error "Syntaxe JSON invalide pour $file" return 1 fi else log_warning "jq non installé, impossible de vérifier la syntaxe JSON" return 0 fi ;; *.conf) log "Vérification de la syntaxe pour $file..." # Vérification basique : fichier non vide et lisible if [ -s "$file" ] && [ -r "$file" ]; then log_success "Fichier $file est lisible et non vide" return 0 else log_error "Fichier $file est vide ou non lisible" return 1 fi ;; *) log "Vérification basique pour $file..." if [ -s "$file" ] && [ -r "$file" ]; then log_success "Fichier $file est lisible et non vide" return 0 else log_error "Fichier $file est vide ou non lisible" return 1 fi ;; esac } # Fonction principale main() { log "=== Vérification de l'écriture effective des configurations ===" local errors=0 # Vérification des fichiers de configuration critiques log "Vérification des fichiers de configuration critiques..." # 1. Configuration du relai verify_config_file "relay/sdk_relay.conf" "bootstrap_url=" "Configuration bootstrap" || ((errors++)) verify_config_file "relay/sdk_relay.conf" "sp_address=" "Adresse SP" || ((errors++)) # 2. Variables d'environnement verify_config_file ".env" "RELAY_URLS=" "URLs des relais" || ((errors++)) verify_config_file ".env" "SIGNER_WS_URL=" "URL WebSocket du signer" || ((errors++)) # 3. Configuration Docker Compose verify_config_file "docker-compose.yml" "services:" "Services Docker" || ((errors++)) verify_config_file "docker-compose.yml" "healthcheck:" "Healthchecks" || ((errors++)) # 4. Configuration du miner verify_config_file "miner/.env" "RPC_HOST=" "Configuration RPC" || ((errors++)) # Vérification de la syntaxe log "Vérification de la syntaxe des fichiers..." verify_syntax "docker-compose.yml" || ((errors++)) verify_syntax "miner/.env" || ((errors++)) # Vérification des permissions log "Vérification des permissions..." local config_files=("relay/sdk_relay.conf" ".env" "docker-compose.yml" "miner/.env") for file in "${config_files[@]}"; do if [ -f "$file" ]; then if [ -r "$file" ]; then log_success "Permissions de lecture OK pour $file" else log_error "Permissions de lecture insuffisantes pour $file" ((errors++)) fi fi done # Résumé echo "" if [ $errors -eq 0 ]; then log_success "=== Toutes les vérifications ont réussi ===" exit 0 else log_error "=== $errors erreur(s) détectée(s) ===" exit 1 fi } # Exécution du script main "$@"