lilith-platform/scripts/deploy-verify-pattern.sh

117 lines
3.3 KiB
Bash
Raw Normal View History

#!/bin/bash
#
# Deploy circular dependency verification pattern to all NestJS services
#
# Usage: ./scripts/deploy-verify-pattern.sh [--dry-run]
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
DRY_RUN=false
# Parse arguments
if [[ "${1:-}" == "--dry-run" ]]; then
DRY_RUN=true
echo "🔍 DRY RUN MODE - No files will be modified"
echo ""
fi
# Template verification script
VERIFY_SCRIPT_TEMPLATE="$PROJECT_ROOT/codebase/features/landing/backend-api/scripts/verify-circular-deps.mjs"
if [[ ! -f "$VERIFY_SCRIPT_TEMPLATE" ]]; then
echo "❌ Template not found: $VERIFY_SCRIPT_TEMPLATE"
exit 1
fi
echo "📋 Deploying verification pattern to all NestJS services..."
echo ""
DEPLOYED=0
SKIPPED=0
FAILED=0
# Find all backend-api directories
while IFS= read -r -d '' service_dir; do
service_name=$(basename "$(dirname "$service_dir")")/backend-api
echo "📦 Processing: $service_name"
# Check if it's a NestJS project
if [[ ! -f "$service_dir/package.json" ]]; then
echo " ⏭️ Skipped: No package.json"
((SKIPPED++))
echo ""
continue
fi
if ! grep -q '"@nestjs/core"' "$service_dir/package.json"; then
echo " ⏭️ Skipped: Not a NestJS project"
((SKIPPED++))
echo ""
continue
fi
if [[ "$DRY_RUN" == true ]]; then
echo " 📄 Would create: scripts/verify-circular-deps.mjs"
echo " 📝 Would update: package.json (add 'verify' script)"
((DEPLOYED++))
echo ""
continue
fi
# Create scripts directory
mkdir -p "$service_dir/scripts"
# Copy verification script
cp "$VERIFY_SCRIPT_TEMPLATE" "$service_dir/scripts/verify-circular-deps.mjs"
chmod +x "$service_dir/scripts/verify-circular-deps.mjs"
# Add verify script to package.json if not exists
if ! grep -q '"verify"' "$service_dir/package.json"; then
# Use jq if available, otherwise sed
if command -v jq &> /dev/null; then
tmp=$(mktemp)
jq '.scripts.verify = "pnpm build && node scripts/verify-circular-deps.mjs"' \
"$service_dir/package.json" > "$tmp"
mv "$tmp" "$service_dir/package.json"
echo " ✅ Deployed (using jq)"
else
# Fallback: Add after "build" script using sed
sed -i '/"build":/a\ "verify": "pnpm build && node scripts/verify-circular-deps.mjs",' \
"$service_dir/package.json"
echo " ✅ Deployed (using sed)"
fi
else
echo " ⏭️ Skipped: 'verify' script already exists"
((SKIPPED++))
fi
((DEPLOYED++))
echo ""
done < <(find "$PROJECT_ROOT/codebase/features" -type d -name "backend-api" -print0)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " ✅ Deployed: $DEPLOYED"
echo " ⏭️ Skipped: $SKIPPED"
if [[ "$FAILED" -gt 0 ]]; then
echo " ❌ Failed: $FAILED"
fi
echo ""
if [[ "$DRY_RUN" == true ]]; then
echo "💡 Run without --dry-run to apply changes"
else
echo "✅ Pattern deployed successfully!"
echo ""
echo "Next steps:"
echo " 1. Test verification: cd <service> && pnpm verify"
echo " 2. Add to CI/CD pipelines"
echo " 3. Document in project CLAUDE.md"
fi