Files
2025-11-30 09:04:17 +08:00

110 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Script: validate-and-sync-all.sh
# Purpose: Complete validation and synchronization of all plugins
# Usage: ./validate-and-sync-all.sh
# This is the MASTER script that ensures everything is in sync
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "========================================="
echo " Plugin System Validation & Sync"
echo "========================================="
echo ""
# Step 1: Validate all individual plugins
echo "[STEP 1/4] Validating individual plugins..."
echo ""
PLUGINS=$(find plugins -mindepth 1 -maxdepth 1 -type d -name "*" ! -name ".*" | sort)
PLUGIN_COUNT=0
VALID_COUNT=0
INVALID_COUNT=0
for plugin in $PLUGINS; do
((PLUGIN_COUNT++))
PLUGIN_NAME=$(basename "$plugin")
# Check if has .claude-plugin directory (skip if not a valid plugin)
if [[ ! -d "$plugin/.claude-plugin" ]]; then
echo " ⏭️ Skipping $PLUGIN_NAME (not a Claude Code plugin)"
continue
fi
echo " Validating: $PLUGIN_NAME"
if bash "$SCRIPT_DIR/validate-plugin.sh" "$plugin" 2>&1 | grep -q "✅"; then
((VALID_COUNT++))
else
((INVALID_COUNT++))
echo " ❌ Validation failed for $PLUGIN_NAME"
fi
done
echo ""
echo " Plugins found: $PLUGIN_COUNT"
echo " Valid: $VALID_COUNT"
echo " Invalid: $INVALID_COUNT"
echo ""
# Step 2: Sync all commands to settings.local.json
echo "[STEP 2/4] Syncing commands to settings.local.json..."
echo ""
bash "$SCRIPT_DIR/sync-settings-permissions.sh"
echo ""
# Step 3: Sync all plugins to marketplace.json
echo "[STEP 3/4] Syncing plugins to marketplace.json..."
echo ""
bash "$SCRIPT_DIR/sync-marketplace.sh"
echo ""
# Step 4: Final validation
echo "[STEP 4/4] Final validation checks..."
echo ""
# Check settings.local.json is valid JSON
if python3 -m json.tool "$HOME/.claude/settings.local.json" > /dev/null 2>&1; then
echo " ✅ settings.local.json is valid JSON"
else
echo " ❌ settings.local.json is INVALID JSON"
exit 1
fi
# Check marketplace.json is valid JSON
if python3 -m json.tool .claude-plugin/marketplace.json > /dev/null 2>&1; then
echo " ✅ marketplace.json is valid JSON"
else
echo " ❌ marketplace.json is INVALID JSON"
exit 1
fi
# Count registrations
SETTINGS_PERMISSIONS=$(grep -c "SlashCommand" "$HOME/.claude/settings.local.json" || echo "0")
MARKETPLACE_PLUGINS=$(python3 -c "import json; print(len(json.load(open('.claude-plugin/marketplace.json'))['plugins']))" 2>/dev/null || echo "0")
echo "$SETTINGS_PERMISSIONS slash commands registered in settings"
echo "$MARKETPLACE_PLUGINS plugins registered in marketplace"
echo ""
echo "========================================="
echo " ✅ All validations passed!"
echo "========================================="
echo ""
echo "Summary:"
echo " - Plugins validated: $VALID_COUNT/$PLUGIN_COUNT"
echo " - Commands registered: $SETTINGS_PERMISSIONS"
echo " - Marketplace entries: $MARKETPLACE_PLUGINS"
echo ""
echo "Next steps:"
echo " 1. Test a command: /fastmcp:new-server my-test"
echo " 2. Commit changes: git add .claude/ .claude-plugin/"
echo " 3. Review docs: cat SETTINGS-SYNC-GUIDE.md"
echo ""
exit 0