110 lines
3.1 KiB
Bash
Executable File
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
|