#!/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 && pnpm verify" echo " 2. Add to CI/CD pipelines" echo " 3. Document in project CLAUDE.md" fi