#!/usr/bin/env bash # run_pipeline.sh — AM WP+Divi to HTML pipeline master script # Usage: bash run_pipeline.sh # Example: bash run_pipeline.sh vibrantyou.yoga set -euo pipefail DOMAIN="${1:-}" if [ -z "$DOMAIN" ]; then echo "Usage: $0 " echo " Example: $0 vibrantyou.yoga" exit 1 fi PROJECT="/home/sirdrez/arisingmedia-websites/$DOMAIN" SOPS="/home/sirdrez/arisingmedia-websites/.am-webdesign-sops" SCRIPTS="$SOPS/wp-divi-pipeline/scripts" WPRESS=$(ls "$PROJECT/.planning/"*.wpress 2>/dev/null | head -1) if [ -z "$WPRESS" ]; then echo "ERROR: No .wpress file found in $PROJECT/.planning/" exit 1 fi echo "================================================" echo " AM WP+Divi Pipeline" echo " Domain: $DOMAIN" echo " Archive: $(basename $WPRESS)" echo "================================================" echo "" # --------------------------------------------------------------------------- # Phase 0 — Directory structure # --------------------------------------------------------------------------- echo "[Phase 0] Creating directory structure..." mkdir -p "$PROJECT"/{src/{about,services,contact,blog,classes,components,assets/{css,js,images,svg,fonts}},build,infra,api} mkdir -p "$PROJECT/.planning"/{data/{content},scripts,wpress-extract} echo " OK: directories created" echo "" # --------------------------------------------------------------------------- # Phase 1 — Extract .wpress archive # --------------------------------------------------------------------------- EXTRACT_DIR="$PROJECT/.planning/wpress-extract" if [ -f "$EXTRACT_DIR/database.sql" ]; then echo "[Phase 1] Archive already extracted — skipping" echo " Found: $EXTRACT_DIR/database.sql" else echo "[Phase 1] Extracting archive (this may take a few minutes)..." python3 "$SCRIPTS/extract_wpress.py" "$WPRESS" "$EXTRACT_DIR" echo " OK: extraction complete" fi echo "" # --------------------------------------------------------------------------- # Phase 2 — Database analysis # --------------------------------------------------------------------------- DATA_DIR="$PROJECT/.planning/data" echo "[Phase 2] Analyzing database..." python3 "$SCRIPTS/analyze_db.py" "$EXTRACT_DIR" "$DATA_DIR" PAGE_COUNT=$(python3 -c "import json; print(len(json.load(open('$DATA_DIR/pages.json'))))" 2>/dev/null || echo 0) echo " OK: $PAGE_COUNT pages extracted" echo "" # --------------------------------------------------------------------------- # Phase 3 — Content extraction (Divi 5) # --------------------------------------------------------------------------- echo "[Phase 3] Extracting Divi 5 content..." python3 "$SCRIPTS/extract_divi5.py" \ "$DATA_DIR/pages.json" \ "$DATA_DIR/content/" echo " OK: content JSON files written" echo "" # --------------------------------------------------------------------------- # Phase 4 — Design system (manual step) # --------------------------------------------------------------------------- echo "[Phase 4] Design system (MANUAL STEP REQUIRED)" echo " Read: $DATA_DIR/design-system.json" echo " Write: $PROJECT/src/assets/css/main.css" echo " Ref: $SOPS/wp-divi-pipeline/04-design-system-extraction.md" echo "" # --------------------------------------------------------------------------- # Phase 5 — Media migration # --------------------------------------------------------------------------- UPLOADS_DIR="$EXTRACT_DIR/uploads" IMAGES_DIR="$PROJECT/src/assets/images" if [ -d "$UPLOADS_DIR" ]; then echo "[Phase 5] Migrating media..." # Catalog originals (skip WP-generated size variants) find "$UPLOADS_DIR" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" -o -name "*.webp" \) \ | grep -v -E "\-[0-9]+x[0-9]+\.(jpg|jpeg|png|webp|gif)$" \ | sort > "$DATA_DIR/media-originals.txt" MEDIA_COUNT=$(wc -l < "$DATA_DIR/media-originals.txt") echo " Found: $MEDIA_COUNT original images" # Copy to src/assets/images/ while IFS= read -r src_img; do fname=$(basename "$src_img") cp "$src_img" "$IMAGES_DIR/$fname" done < "$DATA_DIR/media-originals.txt" # Convert to WebP if cwebp available if command -v cwebp &>/dev/null; then echo " Converting to WebP..." cd "$IMAGES_DIR" for img in *.jpg *.jpeg *.png; do [ -f "$img" ] || continue base="${img%.*}" cwebp -q 82 "$img" -o "${base}.webp" 2>/dev/null && rm "$img" done WEBP_COUNT=$(ls *.webp 2>/dev/null | wc -l) echo " WebP files: $WEBP_COUNT" cd "$PROJECT" else echo " WARN: cwebp not found — images copied as-is (convert manually)" fi echo " OK: media migrated to $IMAGES_DIR" else echo "[Phase 5] No uploads/ directory found — skipping media migration" fi echo "" # --------------------------------------------------------------------------- # Phase 6 — HTML build (manual step) # --------------------------------------------------------------------------- echo "[Phase 6] HTML Build (MANUAL STEP REQUIRED)" echo " Ref: $SOPS/wp-divi-pipeline/05-content-migration.md" echo " Build order:" echo " 1. src/assets/css/main.css" echo " 2. src/assets/css/components.css" echo " 3. src/components/header.html" echo " 4. src/components/footer.html" echo " 5. src/assets/js/components.js" echo " 6. src/assets/js/main.js" echo " 7. src/index.html (home — design system anchor)" echo " 8. Remaining pages" echo "" # --------------------------------------------------------------------------- # Phase 7 — SEO audit # --------------------------------------------------------------------------- echo "[Phase 7] SEO audit (run after HTML build):" echo " grep -rL '' $PROJECT/src --include='*.html' | grep -v _template" echo " grep -rL 'canonical' $PROJECT/src --include='*.html' | grep -v _template" echo " grep -rL 'ld+json' $PROJECT/src --include='*.html' | grep -v _template" echo " grep -r '{{' $PROJECT/src --include='*.html'" echo "" # --------------------------------------------------------------------------- # Phase 8 — Infra # --------------------------------------------------------------------------- echo "[Phase 8] Infra setup:" echo " Copy Dockerfile + docker-compose.yml from vibrantyoucoaching.com" echo " Update server_name in infra/nginx.conf to: $DOMAIN" echo " Run: docker compose up -d --build" echo "" # --------------------------------------------------------------------------- # Phase 9 — Protection check # --------------------------------------------------------------------------- echo "[Phase 9] After deploy, run:" echo " bash $SOPS/tools/verify-protection.sh https://$DOMAIN" echo "" echo "================================================" echo " Pipeline setup complete." echo " Phases 0-3 + 5 executed automatically." echo " Phases 4, 6, 7, 8, 9 require manual steps." echo " See $SOPS/wp-divi-pipeline/ for all SOPs." echo "================================================"