← back to Ga Allsites

gate2_rollback.sh

147 lines

#!/usr/bin/env bash
# gate2_rollback.sh — Restore all files modified by gate2_inject.sh
# Finds every .bak-ga-* file written by the inject run and restores it.
# Then reloads affected pm2 processes.
#
# Run from Mac2:
#   ! ssh root@45.61.58.125 'bash -s' < ~/Projects/ga-allsites/gate2_rollback.sh
# ---------------------------------------------------------------------------
set -uo pipefail

ssh root@45.61.58.125 'bash -s' <<'REMOTE'
set -uo pipefail
ID="G-J2SL8P5KDL"

echo ""
echo "========================================================"
echo " GATE-2 ROLLBACK — restoring .bak-ga-* files"
echo "========================================================"
echo ""

# Find every .bak file this inject run created (pattern: <original>.bak-ga-YYYYMMDD-HHMMSS)
BAK_FILES=()
for f in \
  /root/Projects/wolfgordon-site/public/index.html.bak-ga-* \
  /root/Projects/artmura-site/public/index.html.bak-ga-* \
  /root/Projects/carnegie-site/public/index.html.bak-ga-* \
  /root/Projects/thibaut-site/public/index.html.bak-ga-* \
  /root/Projects/elitis-site/public/index.html.bak-ga-* \
  /root/Projects/romo-site/public/index.html.bak-ga-* \
  /root/Projects/la-walls-site/public/index.html.bak-ga-* \
  /root/Projects/british-walls-site/public/index.html.bak-ga-* \
  /root/Projects/leed-walls-site/public/index.html.bak-ga-* \
  /root/Projects/surface-stick-site/public/index.html.bak-ga-* \
  /root/Projects/coleandson-site/public/index.html.bak-ga-* \
  /root/Projects/fallingstar-site/public/index.html.bak-ga-* \
  /root/Projects/philipjeffries-site/public/index.html.bak-ga-* \
  /root/Projects/primo-leathers-site/public/index.html.bak-ga-* \
  /root/Projects/quadrille-house-site/public/index.html.bak-ga-* \
  "/var/www/fabricut.designerwallcoverings.com/public/index.html.bak-ga-*" \
  /root/Projects/fentucci-site/public/index.html.bak-ga-* \
  "/root/Projects/Designer-Wallcoverings/DW-Websites/Fentucci/public/index.html.bak-ga-*"
do
  [ -f "$f" ] && BAK_FILES+=("$f")
done

if [ ${#BAK_FILES[@]} -eq 0 ]; then
  echo "  Nothing to roll back — no .bak-ga-* files found for any of the 17 target paths."
  echo "  (Either gate2_inject.sh was never run, or all files were already skipped as no-op.)"
  exit 0
fi

N_RESTORED=0
N_FAILED=0
TOUCHED_PM2=()

restore_file() {
  local bak="$1"
  # Original file is everything before .bak-ga-
  local orig="${bak%.bak-ga-*}"

  echo "  Restoring: $orig"
  echo "       from: $bak"

  if cp -a "$bak" "$orig"; then
    echo "       status: RESTORED"
    (( N_RESTORED++ )) || true
    # Track for pm2 reload
    TOUCHED_PM2+=("$orig")
  else
    echo "       status: FAIL — could not copy bak"
    (( N_FAILED++ )) || true
  fi
}

for bak in "${BAK_FILES[@]}"; do
  restore_file "$bak"
  echo ""
done

# ─── Reload pm2 processes for restored files ────────────────────────────────
echo "Reloading pm2 processes..."

# If wolfgordon shared template was restored, reload all 30 wolf processes
wolf_restored=0
for orig in "${TOUCHED_PM2[@]}"; do
  [[ "$orig" == *wolfgordon-site/public/index.html ]] && wolf_restored=1
done

if [ "$wolf_restored" -eq 1 ]; then
  echo "  wolfgordon-site shared template — reloading all 30 processes..."
  WOLF_PROCS=(
    anna-french-site brunschwig-fils-site coordonne-site designers-guild-site
    designtex-site gp-j-baker-site groundworks-site harlequin-site knoll-site
    koroseal-site kravet-site lee-jofa-site maharam-site maya-romanoff-site
    mulberry-site nina-campbell-site nobilis-site osborne-little-site
    phillip-jeffries-site pierre-frey-site ralph-lauren-site rebel-walls-site
    sancar-site sandberg-site scalamandre-site threads-site william-morris-site
    wolf-gordon-site wolfgordon-site zoffany-site
  )
  ok=0; fail=0
  for p in "${WOLF_PROCS[@]}"; do
    pm2 reload "$p" >/dev/null 2>&1 && (( ok++ )) || (( fail++ )) || true
  done
  echo "    reloaded ${ok}/30 OK (${fail} failed)"
fi

# Map standalone paths to pm2 names
declare -A PATH_PM2
PATH_PM2["/root/Projects/artmura-site/public/index.html"]="artmura-site"
PATH_PM2["/root/Projects/carnegie-site/public/index.html"]="carnegie-site"
PATH_PM2["/root/Projects/thibaut-site/public/index.html"]="thibaut-site"
PATH_PM2["/root/Projects/elitis-site/public/index.html"]="elitis-site"
PATH_PM2["/root/Projects/romo-site/public/index.html"]="romo-site"
PATH_PM2["/root/Projects/la-walls-site/public/index.html"]="la-walls-site"
PATH_PM2["/root/Projects/british-walls-site/public/index.html"]="british-walls-site"
PATH_PM2["/root/Projects/leed-walls-site/public/index.html"]="leed-walls-site"
PATH_PM2["/root/Projects/surface-stick-site/public/index.html"]="surface-stick-site"
PATH_PM2["/root/Projects/coleandson-site/public/index.html"]="coleandson-site"
PATH_PM2["/root/Projects/fallingstar-site/public/index.html"]="fallingstar-site"
PATH_PM2["/root/Projects/philipjeffries-site/public/index.html"]="philipjeffries-site"
PATH_PM2["/root/Projects/primo-leathers-site/public/index.html"]="primo-leathers-site"
PATH_PM2["/root/Projects/quadrille-house-site/public/index.html"]="quadrille-house-site"
PATH_PM2["/var/www/fabricut.designerwallcoverings.com/public/index.html"]="fabricut-landing"
PATH_PM2["/root/Projects/fentucci-site/public/index.html"]="fentucci-site"
PATH_PM2["/root/Projects/Designer-Wallcoverings/DW-Websites/Fentucci/public/index.html"]="fentucci-website"

for orig in "${TOUCHED_PM2[@]}"; do
  [[ "$orig" == *wolfgordon-site/public/index.html ]] && continue  # already handled above
  pname="${PATH_PM2[$orig]:-}"
  if [ -n "$pname" ]; then
    pm2 reload "$pname" >/dev/null 2>&1 && echo "  reloaded $pname" || echo "  WARN: reload $pname failed"
  fi
done

# ────────────────────────────────────────────────────────────────────────────
echo ""
echo "========================================================"
echo " ROLLBACK SUMMARY"
echo "========================================================"
echo "  Restored : $N_RESTORED files"
echo "  Failed   : $N_FAILED files"
echo ""
echo "NOTE: .bak files are preserved at their original .bak-ga-* paths."
echo "      Verify with: grep -l 'G-J2SL8P5KDL' <any restored file> (should return nothing)"
echo "========================================================"
REMOTE