#!/usr/bin/env bash set -euo pipefail # Batch backfill SEO/GEO for all MindSpace HTML on production host 143. # 143 运行的是 release runtime 包(无 .git),因此从本机 rsync 工具脚本后再执行回填。 # # Usage (from laptop): # bash scripts/backfill-mindspace-geo-prod.sh # bash scripts/backfill-mindspace-geo-prod.sh --dry-run HOST="${MEMIND_PROD_HOST:-john@114.85.107.50}" LOCAL_REPO="$(cd "$(dirname "$0")/.." && pwd)" REMOTE_REPO="${MEMIND_PROD_REPO:-/Users/john/Project/Memind}" REMOTE_MINDSPACE_ROOT="${MEMIND_PROD_MINDSPACE_ROOT:-${REMOTE_REPO}/MindSpace}" REMOTE_STORAGE_ROOT="${MEMIND_PROD_STORAGE_ROOT:-/Users/john/MindSpace/data/mindspace}" REMOTE_PUBLIC_ROOT="${MEMIND_PROD_PUBLIC_ROOT:-${REMOTE_REPO}/public}" REMOTE_NODE="${MEMIND_PROD_NODE:-/opt/homebrew/Cellar/node@22/22.22.3/bin/node}" EXTRA_ARGS=("$@") echo "==> 143 SEO/GEO backfill" echo " host=${HOST}" echo " local=${LOCAL_REPO}" echo " remote=${REMOTE_REPO}" echo " mindspace=${REMOTE_MINDSPACE_ROOT}" echo " storage=${REMOTE_STORAGE_ROOT}" echo " public=${REMOTE_PUBLIC_ROOT}" echo " node=${REMOTE_NODE}" SEO_FILES=( chat-image-materialize.mjs chat-image-turn-scope.mjs html-document-injection.mjs mindspace-cover-meta.mjs mindspace-geo-backfill.mjs mindspace-geo-meta.mjs mindspace-og-tags.mjs mindspace-page-tag.mjs mindspace-seo-audit.mjs mindspace-seo-tags.mjs mindspace-thumbnail-png.mjs mindspace-thumbnails.mjs mindspace-workspace-thumbnails.mjs scripts/backfill-mindspace-geo.mjs scripts/check-mindspace-cover.mjs wechat/verify/page-artifact.mjs wechat/verify/share-preview.mjs ) ssh "${HOST}" "mkdir -p '${REMOTE_REPO}/scripts' '${REMOTE_REPO}/wechat/verify'" for rel in "${SEO_FILES[@]}"; do rsync -az "${LOCAL_REPO}/${rel}" "${HOST}:${REMOTE_REPO}/${rel}" done ssh "${HOST}" "set -eo pipefail NODE_BIN='${REMOTE_NODE}' if ! test -x \"\${NODE_BIN}\"; then NODE_BIN=\$(ls /opt/homebrew/Cellar/node@22/*/bin/node 2>/dev/null | head -1) fi if ! test -x \"\${NODE_BIN}\"; then NODE_BIN=\$(ls /Users/john/.local/share/fnm/node-versions/*/installation/bin/node 2>/dev/null | head -1) fi test -x \"\${NODE_BIN}\" || { echo 'node not found on 143' >&2; exit 127; } cd '${REMOTE_REPO}' \"\${NODE_BIN}\" scripts/backfill-mindspace-geo.mjs \\ --scope all \\ --root '${REMOTE_MINDSPACE_ROOT}' \\ --storage-root '${REMOTE_STORAGE_ROOT}' \\ --public-root '${REMOTE_PUBLIC_ROOT}' \\ ${EXTRA_ARGS[*]:-} \"\${NODE_BIN}\" scripts/check-mindspace-cover.mjs \\ --scope all \\ --root '${REMOTE_MINDSPACE_ROOT}' \\ --storage-root '${REMOTE_STORAGE_ROOT}' \\ --public-root '${REMOTE_PUBLIC_ROOT}' " echo "==> done"