82 lines
3.3 KiB
Bash
Executable File
82 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
HOST="${STUDIO_HOST:-58.38.22.103}"
|
|
STABLE_DIR="${STUDIO_REMOTE_ROOT:-/Users/john/Project}/Memind"
|
|
PORTAL_CANDIDATE_LABEL="cn.tkmind.memind-portal-candidate"
|
|
CANARY_PROXY_LABEL="cn.tkmind.memind-canary-proxy"
|
|
PORTAL_TUNNEL_LABEL="cn.tkmind.memind-portal-tunnel"
|
|
MEMIND_PORTAL_TUNNEL_HOST="${MEMIND_PORTAL_TUNNEL_HOST:-ssh105-public}"
|
|
MEMIND_PORTAL_TUNNEL_REMOTE_PORT="${MEMIND_PORTAL_TUNNEL_REMOTE_PORT:-19081}"
|
|
AUTO_YES=0
|
|
|
|
if [[ "${1:-}" == "--yes" || "${1:-}" == "-y" ]]; then
|
|
AUTO_YES=1
|
|
elif [[ $# -gt 0 ]]; then
|
|
echo "Usage: bash scripts/rollback-portal-canary-prod.sh [--yes]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${AUTO_YES}" -ne 1 ]]; then
|
|
echo "This restores the 105 tunnel to stable Portal 8081 and stops only canary services."
|
|
read -r -p "Continue with 103 canary rollback? [y/N] " confirm </dev/tty
|
|
[[ "${confirm}" =~ ^[Yy]$ ]] || exit 0
|
|
fi
|
|
|
|
ssh -o BatchMode=yes -o ConnectTimeout=15 "${HOST}" \
|
|
"STABLE_DIR='${STABLE_DIR}' \
|
|
PORTAL_CANDIDATE_LABEL='${PORTAL_CANDIDATE_LABEL}' \
|
|
CANARY_PROXY_LABEL='${CANARY_PROXY_LABEL}' \
|
|
PORTAL_TUNNEL_LABEL='${PORTAL_TUNNEL_LABEL}' \
|
|
MEMIND_PORTAL_TUNNEL_HOST='${MEMIND_PORTAL_TUNNEL_HOST}' \
|
|
MEMIND_PORTAL_TUNNEL_REMOTE_PORT='${MEMIND_PORTAL_TUNNEL_REMOTE_PORT}' \
|
|
/bin/bash" <<'REMOTE'
|
|
set -euo pipefail
|
|
|
|
LAUNCHD_GUI="gui/$(id -u)"
|
|
TUNNEL_PLIST="${HOME}/Library/LaunchAgents/${PORTAL_TUNNEL_LABEL}.plist"
|
|
|
|
cat > "${TUNNEL_PLIST}" <<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key><string>${PORTAL_TUNNEL_LABEL}</string>
|
|
<key>ProgramArguments</key>
|
|
<array><string>${STABLE_DIR}/scripts/memind-portal-tunnel.sh</string></array>
|
|
<key>EnvironmentVariables</key>
|
|
<dict>
|
|
<key>MEMIND_PORTAL_TUNNEL_HOST</key><string>${MEMIND_PORTAL_TUNNEL_HOST}</string>
|
|
<key>MEMIND_PORTAL_TUNNEL_LOCAL_PORT</key><string>8081</string>
|
|
<key>MEMIND_PORTAL_TUNNEL_REMOTE_PORT</key><string>${MEMIND_PORTAL_TUNNEL_REMOTE_PORT}</string>
|
|
</dict>
|
|
<key>RunAtLoad</key><true/>
|
|
<key>KeepAlive</key><true/>
|
|
<key>StandardOutPath</key><string>${HOME}/Library/Logs/memind-portal-tunnel.log</string>
|
|
<key>StandardErrorPath</key><string>${HOME}/Library/Logs/memind-portal-tunnel.log</string>
|
|
</dict>
|
|
</plist>
|
|
EOF
|
|
|
|
launchctl bootout "${LAUNCHD_GUI}/${PORTAL_TUNNEL_LABEL}" >/dev/null 2>&1 || true
|
|
launchctl bootstrap "${LAUNCHD_GUI}" "${TUNNEL_PLIST}" >/dev/null
|
|
launchctl kickstart -k "${LAUNCHD_GUI}/${PORTAL_TUNNEL_LABEL}" >/dev/null
|
|
launchctl bootout "${LAUNCHD_GUI}/${CANARY_PROXY_LABEL}" >/dev/null 2>&1 || true
|
|
launchctl bootout "${LAUNCHD_GUI}/${PORTAL_CANDIDATE_LABEL}" >/dev/null 2>&1 || true
|
|
/opt/homebrew/bin/docker rm -f goosed-prod-canary >/dev/null 2>&1 || true
|
|
rm -f "${STABLE_DIR}/.release-drain"
|
|
|
|
curl -fsS http://127.0.0.1:8081/api/status >/dev/null
|
|
sleep 2
|
|
remote_code="$(
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 "${MEMIND_PORTAL_TUNNEL_HOST}" \
|
|
"curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:${MEMIND_PORTAL_TUNNEL_REMOTE_PORT}/api/status" \
|
|
2>/dev/null || true
|
|
)"
|
|
[[ "${remote_code}" == "200" ]]
|
|
printf 'stable_port=8081\n'
|
|
printf 'remote_tunnel_status=%s\n' "${remote_code}"
|
|
REMOTE
|
|
|
|
echo "103 canary rollback completed; stable Portal remains active on 8081."
|