All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 7s
143 lines
3.7 KiB
Bash
Executable File
143 lines
3.7 KiB
Bash
Executable File
#!/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
|