#!/bin/bash # FetchApply Validation Script # Validates the FetchApply repository structure and configuration set -euo pipefail ERRORS=0 WARNINGS=0 # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color pass() { echo -e "${GREEN}✓${NC} $1" } fail() { echo -e "${RED}✗${NC} $1" ((ERRORS++)) } warn() { echo -e "${YELLOW}!${NC} $1" ((WARNINGS++)) } echo "=== FetchApply Repository Validation ===" echo "" # Check required top-level files echo "Checking top-level files..." for file in variables classes/server/initializers classes/server/roles; do if [[ -f "$file" ]]; then pass "$file exists" else fail "$file missing" fi done # Check roles directory echo "" echo "Checking roles..." for role in security monitoring; do if [[ -f "roles/$role" ]]; then pass "roles/$role exists" else fail "roles/$role missing" fi done # Check initializers echo "" echo "Checking initializers..." INITIALIZERS=$(grep -v '^#' classes/server/initializers | grep -v '^$') for init in $INITIALIZERS; do # Skip role references if [[ "$init" == "security" ]] || [[ "$init" == "monitoring" ]]; then continue fi if [[ -d "initializers/$init" ]]; then if [[ -x "initializers/$init/apply" ]]; then pass "initializers/$init/apply is executable" else warn "initializers/$init/apply exists but not executable" fi # Check for configs or scripts directories if [[ -d "initializers/$init/configs" ]]; then config_count=$(find "initializers/$init/configs" -type f | wc -l) pass "initializers/$init has configs/ ($config_count files)" fi if [[ -d "initializers/$init/scripts" ]]; then script_count=$(find "initializers/$init/scripts" -type f | wc -l) pass "initializers/$init has scripts/ ($script_count files)" fi else fail "initializers/$init directory missing" fi done # Check for bash syntax in apply scripts echo "" echo "Checking apply script syntax..." for init in $INITIALIZERS; do if [[ -f "initializers/$init/apply" ]]; then if bash -n "initializers/$init/apply" 2>/dev/null; then pass "initializers/$init/apply has valid bash syntax" else fail "initializers/$init/apply has syntax errors" fi fi done # Check for path consistency in apply scripts echo "" echo "Checking path consistency in apply scripts..." for init in $INITIALIZERS; do apply_file="initializers/$init/apply" if [[ -f "$apply_file" ]]; then # Check for ./configs/ references (excluding comments) if grep -v '^[[:space:]]*#' "$apply_file" | grep -q './configs/'; then if [[ ! -d "initializers/$init/configs" ]]; then fail "$apply_file references ./configs/ but no configs/ directory exists" fi fi # Check for ./scripts/ references (excluding comments) if grep -v '^[[:space:]]*#' "$apply_file" | grep -q './scripts/'; then if [[ ! -d "initializers/$init/scripts" ]]; then fail "$apply_file references ./scripts/ but no scripts/ directory exists" fi fi # Check for ConfigFiles references (deprecated pattern) if grep -v '^[[:space:]]*#' "$apply_file" | grep -q 'ConfigFiles'; then warn "$apply_file contains 'ConfigFiles' reference - should use direct paths" fi fi done # Summary echo "" echo "=== Validation Summary ===" echo -e "Errors: ${RED}$ERRORS${NC}" echo -e "Warnings: ${YELLOW}$WARNINGS${NC}" if [[ $ERRORS -gt 0 ]]; then echo -e "${RED}Validation FAILED${NC}" exit 1 else echo -e "${GREEN}Validation PASSED${NC}" if [[ $WARNINGS -gt 0 ]]; then echo "Please review warnings above" fi exit 0 fi