176 lines
6.8 KiB
Bash
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 "================================================"
|