diff --git a/test.sh b/test.sh index a394f5b..1637c3b 100755 --- a/test.sh +++ b/test.sh @@ -22,6 +22,15 @@ 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") @@ -34,97 +43,85 @@ info "Found templates to test: $(echo $TEMPLATES | tr '\n' ' ')" FAILED_TESTS="" SKIPPED_TESTS="" -# Run basic validation tests for each template +# 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 - - # Check for required scripts - REQUIRED_SCRIPTS="install.sh uninstall.sh start.sh stop.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 - - success "All required scripts present" - - # Check if scripts are executable - NON_EXECUTABLE="" + + # 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 - - # Check for config directory - if [ ! -d "$TEMPLATE/config" ]; then - echo " ERROR: Missing config directory" - FAILED_TESTS="$FAILED_TESTS $TEMPLATE" - continue - fi - - success "Config directory exists" - - # Check for service.env file - if [ ! -f "$TEMPLATE/config/service.env" ]; then - echo " ERROR: Missing config/service.env file" - FAILED_TESTS="$FAILED_TESTS $TEMPLATE" - continue - fi - - success "service.env file exists" - - # 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 "All scripts pass syntax check" - - # If we have the ds command available and we're in CI, we could run full tests - # For now, we'll skip integration tests in CI to avoid dependencies - if [ -n "$CI" ]; then - info "Skipping integration tests in CI environment" - else - if which ds >/dev/null 2>&1; then - info "ds command found, could run integration tests (skipping for safety)" - # Uncomment to enable integration tests: - # ./test_template.sh "$TEMPLATE" || FAILED_TESTS="$FAILED_TESTS $TEMPLATE" + + if [ "$DS_AVAILABLE" = true ]; then + # Use dropshell's validate command + if ds validate "$TEMPLATE" 2>&1; then + success "Template $TEMPLATE passed validation" else - info "ds command not found, skipping integration tests" + 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 - - success "Template $TEMPLATE passed all tests" done echo "" @@ -140,6 +137,6 @@ 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 tests!\033[0m" + echo -e "\033[32m✓ All templates passed validation!\033[0m" exit 0 -fi \ No newline at end of file +fi