Files
shopify-ai-backup/chat/templates/Changelog Plugin/scripts/validate-wordpress-plugin.sh

233 lines
5.8 KiB
Bash

#!/bin/bash
#
# WordPress Plugin Validation Script
# Validates PHP syntax and checks plugin header for WordPress.org compliance
#
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Plugin root directory
PLUGIN_DIR="${1:-.}"
# Counters
TOTAL_FILES=0
ERROR_COUNT=0
WARNING_COUNT=0
echo "================================================"
echo "WordPress Plugin Validation Script"
echo "================================================"
echo ""
echo "Validating plugin: $PLUGIN_DIR"
echo ""
# Function to check PHP syntax
check_php_syntax() {
local file="$1"
local result=$(php -l "$file" 2>&1)
if echo "$result" | grep -q "No syntax errors detected"; then
echo -e "${GREEN}[PASS]${NC} $file"
return 0
else
echo -e "${RED}[FAIL]${NC} $file"
echo "$result"
return 1
fi
}
# Function to check plugin header
check_plugin_header() {
local file="$1"
local dir=$(dirname "$file")
local basename=$(basename "$dir")
# Check for required plugin header fields
if ! grep -q "Plugin Name:" "$file"; then
echo -e "${RED}[MISSING]${NC} Plugin Name header in $file"
return 1
fi
if ! grep -q "Version:" "$file"; then
echo -e "${RED}[MISSING]${NC} Version header in $file"
return 1
fi
if ! grep -q "Text Domain:" "$file"; then
echo -e "${YELLOW}[WARNING]${NC} Text Domain header missing in $file"
return 2
fi
echo -e "${GREEN}[OK]${NC} Plugin header in $file"
return 0
}
# Function to validate file structure
validate_structure() {
local plugin_file="$1"
local plugin_dir=$(dirname "$plugin_file")
local plugin_slug=$(basename "$plugin_file" .php)
echo ""
echo "Checking plugin structure..."
echo ""
# Check for required files
local required_files=(
"pc-changelog-manager-abc123.php"
"uninstall.php"
)
local required_dirs=(
"includes"
"admin"
"public"
)
local missing=0
for file in "${required_files[@]}"; do
if [ ! -f "$plugin_dir/$file" ]; then
echo -e "${RED}[MISSING]${NC} Required file: $file"
missing=1
else
echo -e "${GREEN}[FOUND]${NC} $file"
fi
TOTAL_FILES=$((TOTAL_FILES + 1))
done
for dir in "${required_dirs[@]}"; do
if [ ! -d "$plugin_dir/$dir" ]; then
echo -e "${RED}[MISSING]${NC} Required directory: $dir"
missing=1
else
echo -e "${GREEN}[FOUND]${NC} $dir/"
fi
done
if [ $missing -eq 1 ]; then
return 1
fi
return 0
}
# Function to find all PHP files
find_php_files() {
local dir="$1"
find "$dir" -name "*.php" -type f
}
# Main execution
main() {
# Check if plugin directory exists
if [ ! -d "$PLUGIN_DIR" ]; then
echo -e "${RED}[ERROR]${NC} Directory not found: $PLUGIN_DIR"
exit 1
fi
# Find the main plugin file
local main_file=""
local plugin_slug=""
# Look for PHP files with plugin header
for file in $(find_php_files "$PLUGIN_DIR"); do
if grep -q "Plugin Name:" "$file" && grep -q "Version:" "$file"; then
main_file="$file"
plugin_slug=$(basename "$file" .php)
break
fi
done
if [ -z "$main_file" ]; then
echo -e "${RED}[ERROR]${NC} No plugin main file found in $PLUGIN_DIR"
exit 1
fi
echo "Main plugin file: $main_file"
echo "Plugin slug: $plugin_slug"
echo ""
# Validate structure
validate_structure "$main_file"
struct_result=$?
if [ $struct_result -ne 0 ]; then
ERROR_COUNT=$((ERROR_COUNT + 1))
fi
# Check main plugin header
check_plugin_header "$main_file"
header_result=$?
if [ $header_result -eq 1 ]; then
ERROR_COUNT=$((ERROR_COUNT + 1))
elif [ $header_result -eq 2 ]; then
WARNING_COUNT=$((WARNING_COUNT + 1))
fi
# Find and check all PHP files
echo ""
echo "Validating PHP syntax..."
echo ""
while IFS= read -r file; do
TOTAL_FILES=$((TOTAL_FILES + 1))
check_php_syntax "$file"
result=$?
if [ $result -ne 0 ]; then
ERROR_COUNT=$((ERROR_COUNT + 1))
fi
done < <(find_php_files "$PLUGIN_DIR")
# Check for common issues
echo ""
echo "Checking for common issues..."
echo ""
# Check for debug statements
debug_patterns=("var_dump" "print_r" "console.log" "error_log")
for pattern in "${debug_patterns[@]}"; do
if grep -rq "$pattern" "$PLUGIN_DIR" --include="*.php" | grep -v "uninstall.php" | grep -v ".git"; then
echo -e "${YELLOW}[WARNING]${NC} Potential debug statement found: $pattern"
WARNING_COUNT=$((WARNING_COUNT + 1))
fi
done
# Check for proper escaping
if grep -rq "echo \$" "$PLUGIN_DIR" --include="*.php" | grep -v "esc_html\|esc_attr\|esc_url\|esc_textarea"; then
echo -e "${YELLOW}[WARNING]${NC} Potential missing escaping found"
WARNING_COUNT=$((WARNING_COUNT + 1))
fi
# Summary
echo ""
echo "================================================"
echo "Validation Summary"
echo "================================================"
echo ""
echo "Total files checked: $TOTAL_FILES"
echo -e "Errors: ${RED}$ERROR_COUNT${NC}"
echo -e "Warnings: ${YELLOW}$WARNING_COUNT${NC}"
echo ""
if [ $ERROR_COUNT -gt 0 ]; then
echo -e "${RED}Validation FAILED${NC}"
echo "Please fix the errors above."
exit 1
elif [ $WARNING_COUNT -gt 0 ]; then
echo -e "${YELLOW}Validation PASSED with warnings${NC}"
echo "Review the warnings above."
exit 0
else
echo -e "${GREEN}Validation PASSED${NC}"
echo "Plugin is ready for use."
exit 0
fi
}
# Run main function
main