Files
smom-dbis-138/scripts/deployment/validate-deployment-config.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

351 lines
11 KiB
Bash
Executable File

#!/usr/bin/env bash
# Validate Deployment Configuration
# This script checks all deployment configurations for misconfigurations and gaps
set -e
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
ERRORS=0
WARNINGS=0
log_info "=== Deployment Configuration Validation ==="
# Function to check file exists
check_file() {
local file=$1
local description=$2
if [ -f "$file" ]; then
log_success "${description}: ${file}"
return 0
else
log_error "${description}: ${file} (MISSING)"
((ERRORS++))
return 1
fi
}
# Function to check value in file
check_value() {
local file=$1
local pattern=$2
local expected=$3
local description=$4
if [ ! -f "$file" ]; then
log_error "${description}: File not found"
((ERRORS++))
return 1
fi
local value=$(grep -E "$pattern" "$file" | head -1 | sed 's/.*://' | tr -d ' ,"' || echo "")
if [ -z "$value" ]; then
log_warn "⚠️ ${description}: Value not found"
((WARNINGS++))
return 1
fi
if [ "$value" = "$expected" ]; then
log_success "${description}: ${value} (correct)"
return 0
else
log_error "${description}: ${value} (expected: ${expected})"
((ERRORS++))
return 1
fi
}
# Function to check if value exists (any value)
check_value_exists() {
local file=$1
local pattern=$2
local description=$3
if [ ! -f "$file" ]; then
log_error "${description}: File not found"
((ERRORS++))
return 1
fi
if grep -qE "$pattern" "$file"; then
local value=$(grep -E "$pattern" "$file" | head -1)
log_success "${description}: Found"
return 0
else
log_error "${description}: Not found"
((ERRORS++))
return 1
fi
}
log_info "=== 1. Genesis Configuration ==="
check_file "config/genesis.json" "Genesis file"
if [ -f "config/genesis.json" ]; then
# Check Chain ID
CHAIN_ID=$(grep -oE '"chainId"[[:space:]]*:[[:space:]]*[0-9]+' config/genesis.json | grep -oE '[0-9]+' || echo "")
if [ "$CHAIN_ID" = "138" ]; then
log_success "✅ Chain ID: 138 (correct)"
else
log_error "❌ Chain ID: ${CHAIN_ID} (expected: 138)"
((ERRORS++))
fi
# Check IBFT configuration
if grep -q "ibft2" config/genesis.json || grep -q "ibft" config/genesis.json; then
log_success "✅ IBFT consensus configured"
else
log_error "❌ IBFT consensus not found in genesis"
((ERRORS++))
fi
# Check validators
VALIDATOR_COUNT=$(grep -oE '"validators"' config/genesis.json | wc -l || echo "0")
if [ "$VALIDATOR_COUNT" -gt 0 ]; then
log_success "✅ Validators configured"
else
log_error "❌ No validators found in genesis"
((ERRORS++))
fi
fi
log_info "=== 2. Terraform Configuration ==="
check_file "terraform/main.tf" "Terraform main file"
check_file "terraform/variables.tf" "Terraform variables file"
check_file "terraform/terraform.tfvars" "Terraform variables values"
if [ -f "terraform/terraform.tfvars" ]; then
# Check environment
check_value_exists "terraform/terraform.tfvars" "environment" "Environment setting"
# Check location
check_value_exists "terraform/terraform.tfvars" "location" "Location setting"
# Check cluster name
check_value_exists "terraform/terraform.tfvars" "cluster_name" "Cluster name"
fi
log_info "=== 3. Kubernetes/Helm Configuration ==="
check_file "helm/besu-network/Chart.yaml" "Helm Chart"
check_file "helm/besu-network/values.yaml" "Helm base values"
check_file "helm/besu-network/values-validators.yaml" "Helm validators values"
check_file "helm/besu-network/values-sentries.yaml" "Helm sentries values"
check_file "helm/besu-network/values-rpc.yaml" "Helm RPC values"
check_file "k8s/base/namespace.yaml" "Kubernetes namespace"
# Check Helm values for Chain ID
if [ -f "helm/besu-network/values-validators.yaml" ]; then
HELM_CHAIN_ID=$(grep -E "chainId|chain-id|CHAIN_ID" helm/besu-network/values-validators.yaml | grep -oE '[0-9]+' | head -1 || echo "")
if [ -n "$HELM_CHAIN_ID" ] && [ "$HELM_CHAIN_ID" = "138" ]; then
log_success "✅ Helm Chain ID: 138 (correct)"
elif [ -n "$HELM_CHAIN_ID" ]; then
log_error "❌ Helm Chain ID: ${HELM_CHAIN_ID} (expected: 138)"
((ERRORS++))
else
log_warn "⚠️ Helm Chain ID: Not explicitly set (may use default)"
((WARNINGS++))
fi
fi
log_info "=== 4. Key Management ==="
if [ -d "keys/validators" ]; then
VALIDATOR_KEY_COUNT=$(find keys/validators -name "key.priv" 2>/dev/null | wc -l || echo "0")
if [ "$VALIDATOR_KEY_COUNT" -gt 0 ]; then
log_success "✅ Validator keys found: ${VALIDATOR_KEY_COUNT}"
else
log_error "❌ No validator keys found"
((ERRORS++))
fi
else
log_error "❌ Validator keys directory not found"
((ERRORS++))
fi
if [ -d "keys/oracle" ]; then
ORACLE_KEY_COUNT=$(find keys/oracle -name "key.priv" 2>/dev/null | wc -l || echo "0")
if [ "$ORACLE_KEY_COUNT" -gt 0 ]; then
log_success "✅ Oracle keys found: ${ORACLE_KEY_COUNT}"
else
log_warn "⚠️ No oracle keys found"
((WARNINGS++))
fi
else
log_warn "⚠️ Oracle keys directory not found"
((WARNINGS++))
fi
log_info "=== 5. Environment Configuration ==="
if [ -f ".env" ]; then
log_success "✅ .env file exists"
# Check required variables
if grep -q "^PRIVATE_KEY=" .env; then
log_success "✅ PRIVATE_KEY configured"
else
log_error "❌ PRIVATE_KEY not configured"
((ERRORS++))
fi
if grep -q "^RPC_URL=" .env; then
RPC_URL=$(grep "^RPC_URL=" .env | cut -d'=' -f2- | tr -d '"' | tr -d "'")
if [ -n "$RPC_URL" ]; then
log_success "✅ RPC_URL configured: ${RPC_URL}"
else
log_warn "⚠️ RPC_URL is empty"
((WARNINGS++))
fi
else
log_warn "⚠️ RPC_URL not configured"
((WARNINGS++))
fi
else
log_error "❌ .env file not found"
((ERRORS++))
fi
log_info "=== 6. Deployment Scripts ==="
check_file "scripts/deployment/deploy-all-ordered.sh" "Deployment script"
check_file "scripts/deployment/check-deployment-status.sh" "Status check script"
check_file "scripts/deployment/check-rpc-status.sh" "RPC status script"
check_file "scripts/deployment/start-local-testnet.sh" "Local testnet script"
log_info "=== 7. Contract Deployment Scripts ==="
check_file "script/DeployWETH.s.sol" "WETH deployment script"
check_file "script/DeployWETH10.s.sol" "WETH10 deployment script"
check_file "script/DeployCCIPRouter.s.sol" "CCIP Router deployment script"
check_file "script/DeployCCIPWETH9Bridge.s.sol" "CCIPWETH9Bridge deployment script"
check_file "script/DeployCCIPWETH10Bridge.s.sol" "CCIPWETH10Bridge deployment script"
check_file "script/DeployOracle.s.sol" "Oracle deployment script"
check_file "script/DeployMockLinkToken.s.sol" "Mock LINK Token deployment script"
log_info "=== 8. Network Configuration Files ==="
if [ -f "config/static-nodes.json" ]; then
log_success "✅ static-nodes.json found"
NODE_COUNT=$(grep -c "enode://" config/static-nodes.json 2>/dev/null || echo "0")
if [ "$NODE_COUNT" -gt 0 ]; then
log_success "✅ Static nodes configured: ${NODE_COUNT}"
else
log_warn "⚠️ No static nodes configured"
((WARNINGS++))
fi
else
log_warn "⚠️ static-nodes.json not found"
((WARNINGS++))
fi
if [ -f "config/permissions-nodes.toml" ]; then
log_success "✅ permissions-nodes.toml found"
else
log_warn "⚠️ permissions-nodes.toml not found (optional)"
((WARNINGS++))
fi
log_info "=== 9. Besu Configuration ==="
# Check for Besu-specific configuration
BESU_CONFIG_FILES=(
"config/besu-config.toml"
"config/besu.toml"
"helm/besu-network/templates/configmap.yaml"
)
for config_file in "${BESU_CONFIG_FILES[@]}"; do
if [ -f "$config_file" ]; then
log_success "✅ Found: ${config_file}"
# Check for RPC configuration
if grep -q "rpc-http" "$config_file" || grep -q "rpc-http-enabled" "$config_file"; then
log_success " ✅ RPC HTTP configuration found"
fi
# Check for P2P configuration
if grep -q "p2p" "$config_file" || grep -q "discovery" "$config_file"; then
log_success " ✅ P2P configuration found"
fi
fi
done
log_info "=== 10. Consistency Checks ==="
# Check Chain ID consistency
CHAIN_IDS=()
if [ -f "config/genesis.json" ]; then
GENESIS_CHAIN_ID=$(grep -oE '"chainId"[[:space:]]*:[[:space:]]*[0-9]+' config/genesis.json | grep -oE '[0-9]+' || echo "")
if [ -n "$GENESIS_CHAIN_ID" ]; then
CHAIN_IDS+=("genesis: $GENESIS_CHAIN_ID")
fi
fi
if [ -f "helm/besu-network/values-validators.yaml" ]; then
HELM_CHAIN_ID=$(grep -E "chainId|chain-id|CHAIN_ID" helm/besu-network/values-validators.yaml | grep -oE '[0-9]+' | head -1 || echo "")
if [ -n "$HELM_CHAIN_ID" ]; then
CHAIN_IDS+=("helm: $HELM_CHAIN_ID")
fi
fi
if [ ${#CHAIN_IDS[@]} -gt 1 ]; then
UNIQUE_CHAIN_IDS=$(printf '%s\n' "${CHAIN_IDS[@]}" | cut -d' ' -f2 | sort -u | wc -l)
if [ "$UNIQUE_CHAIN_IDS" -eq 1 ]; then
log_success "✅ Chain ID consistent across configurations"
else
log_error "❌ Chain ID mismatch detected:"
for id in "${CHAIN_IDS[@]}"; do
log_error " - ${id}"
done
((ERRORS++))
fi
fi
log_info "=== 11. Missing Configuration Check ==="
# Check for missing critical files
MISSING_FILES=()
if [ ! -f "terraform/backend.tf" ] && [ ! -f "terraform/backend.tf.example" ]; then
MISSING_FILES+=("terraform/backend.tf (Terraform backend configuration)")
fi
if [ ! -f "k8s/gateway/nginx-config.yaml" ]; then
MISSING_FILES+=("k8s/gateway/nginx-config.yaml (API Gateway configuration)")
fi
if [ ! -f "monitoring/k8s/prometheus.yaml" ]; then
MISSING_FILES+=("monitoring/k8s/prometheus.yaml (Prometheus configuration)")
fi
if [ ${#MISSING_FILES[@]} -gt 0 ]; then
log_warn "⚠️ Missing optional configuration files:"
for file in "${MISSING_FILES[@]}"; do
log_warn " - ${file}"
((WARNINGS++))
done
else
log_success "✅ All critical configuration files present"
fi
log_info "=== 12. Documentation ==="
check_file "docs/DEPLOYMENT_ORDER.md" "Deployment order documentation"
check_file "docs/DEPLOYMENT.md" "Deployment guide"
check_file "docs/ARCHITECTURE.md" "Architecture documentation"
check_file "docs/DEPLOYMENT_COMPLETE_GUIDE.md" "Complete deployment guide"
log_info "=== Summary ==="
log_success "Errors: ${ERRORS}"
log_warn "Warnings: ${WARNINGS}"
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
log_success "✅ All configurations validated successfully!"
exit 0
elif [ $ERRORS -eq 0 ]; then
log_warn "⚠️ Configuration validated with warnings"
log_warn " Review warnings above and address as needed"
exit 0
else
log_error "❌ Configuration validation failed"
log_error " Please fix ${ERRORS} error(s) before deployment"
exit 1
fi