Files
arisingmedia-web-sops/wp-divi-pipeline-to-am-stack/scripts/run_pipeline.sh
T
2026-06-09 18:31:59 +02:00

176 lines
6.8 KiB
Bash

#!/usr/bin/env bash
# run_pipeline.sh — AM WP+Divi to HTML pipeline master script
# Usage: bash run_pipeline.sh <domain>
# Example: bash run_pipeline.sh vibrantyou.yoga
set -euo pipefail
DOMAIN="${1:-}"
if [ -z "$DOMAIN" ]; then
echo "Usage: $0 <domain>"
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 '<title>' $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 "================================================"