#!/bin/bash set -e SCRIPT_DIR=$(dirname "$0") cd "$SCRIPT_DIR" function die() { echo "ERROR: $1" >&2 exit 1 } function info() { echo "INFO: $1" } function success() { echo -e "\033[32m✓ $1\033[0m" } function warning() { echo -e "\033[33m⚠ $1\033[0m" } # Check if ds command is available DS_AVAILABLE=false if command -v ds >/dev/null 2>&1; then DS_AVAILABLE=true info "Using dropshell validate for template validation" else warning "ds command not found - using basic validation only" fi # Get list of template directories (exclude hidden directories) TEMPLATES=$(find . -maxdepth 1 -type d ! -name ".*" ! -name "." | sed 's|^\./||' | grep -v ".gitea") if [ -z "$TEMPLATES" ]; then die "No templates found to test" fi info "Found templates to test: $(echo $TEMPLATES | tr '\n' ' ')" FAILED_TESTS="" SKIPPED_TESTS="" # Run validation tests for each template for TEMPLATE in $TEMPLATES; do echo "" info "Testing template: $TEMPLATE" # Check if template directory exists if [ ! -d "$TEMPLATE" ]; then warning "Template directory $TEMPLATE does not exist, skipping" SKIPPED_TESTS="$SKIPPED_TESTS $TEMPLATE" continue fi # Make scripts executable if needed for SCRIPT in $TEMPLATE/*.sh; do if [ -f "$SCRIPT" ] && [ ! -x "$SCRIPT" ]; then chmod +x "$SCRIPT" info "Made $SCRIPT executable" fi done if [ "$DS_AVAILABLE" = true ]; then # Use dropshell's validate command if ds validate "$TEMPLATE" 2>&1; then success "Template $TEMPLATE passed validation" else echo " ERROR: Template $TEMPLATE failed ds validate" FAILED_TESTS="$FAILED_TESTS $TEMPLATE" fi else # Fallback: basic validation when ds is not available # Check for required scripts REQUIRED_SCRIPTS="install.sh uninstall.sh status.sh" MISSING_SCRIPTS="" for SCRIPT in $REQUIRED_SCRIPTS; do if [ ! -f "$TEMPLATE/$SCRIPT" ]; then MISSING_SCRIPTS="$MISSING_SCRIPTS $SCRIPT" fi done if [ -n "$MISSING_SCRIPTS" ]; then echo " ERROR: Missing required scripts:$MISSING_SCRIPTS" FAILED_TESTS="$FAILED_TESTS $TEMPLATE" continue fi # Check for config directory and service.env if [ ! -d "$TEMPLATE/config" ]; then echo " ERROR: Missing config directory" FAILED_TESTS="$FAILED_TESTS $TEMPLATE" continue fi if [ ! -f "$TEMPLATE/config/service.env" ]; then echo " ERROR: Missing config/service.env file" FAILED_TESTS="$FAILED_TESTS $TEMPLATE" continue fi # Validate shell scripts for basic syntax errors SYNTAX_ERRORS="" for SCRIPT in $TEMPLATE/*.sh; do if [ -f "$SCRIPT" ]; then if ! bash -n "$SCRIPT" 2>/dev/null; then SCRIPT_NAME=$(basename "$SCRIPT") SYNTAX_ERRORS="$SYNTAX_ERRORS $SCRIPT_NAME" fi fi done if [ -n "$SYNTAX_ERRORS" ]; then echo " ERROR: Syntax errors in scripts:$SYNTAX_ERRORS" FAILED_TESTS="$FAILED_TESTS $TEMPLATE" continue fi success "Template $TEMPLATE passed basic validation" fi done echo "" echo "========================================" echo "Test Summary" echo "========================================" if [ -n "$SKIPPED_TESTS" ]; then warning "Skipped templates:$SKIPPED_TESTS" fi if [ -n "$FAILED_TESTS" ]; then echo -e "\033[31m✗ Failed templates:$FAILED_TESTS\033[0m" exit 1 else echo -e "\033[32m✓ All templates passed validation!\033[0m" exit 0 fi