Files
proxmox/scripts/run-all-operator-tasks-from-lan.sh

198 lines
8.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run operator tasks from a host on LAN. Always loads dotenv (PRIVATE_KEY, NPM_PASSWORD, etc.) from repo .env and smom-dbis-138/.env.
# Optional: contract deploy, Blockscout verify, backup, Proxmox VM/container creation.
#
# Usage:
# ./scripts/run-all-operator-tasks-from-lan.sh [--dry-run] [--skip-backup] [--skip-verify]
# ./scripts/run-all-operator-tasks-from-lan.sh [--dry-run] --deploy # + contract deploy (phases + TransactionMirror if needed)
# ./scripts/run-all-operator-tasks-from-lan.sh [--dry-run] --create-vms # + create DBIS Core / missing containers
# ./scripts/run-all-operator-tasks-from-lan.sh [--dry-run] --deploy --create-vms # all
#
# Requires: LAN access to 192.168.11.x; smom-dbis-138/.env with PRIVATE_KEY for deploy.
# For create-vms: SSH to PROXMOX_HOST (default 192.168.11.10).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# shellcheck source=./scripts/lib/run-summary.sh
source "$SCRIPT_DIR/lib/run-summary.sh"
RUN_STARTED_AT="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
SECONDS=0
# Always load dotenv so Operator/LAN has NPM_PASSWORD, PRIVATE_KEY, RPC, etc.
if [[ -f "$SCRIPT_DIR/lib/load-project-env.sh" ]]; then
# shellcheck source=./scripts/lib/load-project-env.sh
source "$SCRIPT_DIR/lib/load-project-env.sh"
fi
DRY_RUN=false
SKIP_BACKUP=false
SKIP_VERIFY=false
DO_DEPLOY=false
DO_CREATE_VMS=false
JSON_OUT=""
format_duration() {
local total="$1"
printf '%02dm:%02ds' "$((total / 60))" "$((total % 60))"
}
for a in "$@"; do
case "$a" in
--dry-run) DRY_RUN=true ;;
--skip-backup) SKIP_BACKUP=true ;;
--skip-verify) SKIP_VERIFY=true ;;
--deploy) DO_DEPLOY=true ;;
--create-vms) DO_CREATE_VMS=true ;;
--json-out)
JSON_OUT_NEXT=true
;;
-h|--help)
echo "Usage: $0 [--dry-run] [--skip-backup] [--skip-verify] [--deploy] [--create-vms] [--json-out PATH]"
echo " --dry-run Print steps only, do not run."
echo " --skip-backup Skip NPMplus backup."
echo " --skip-verify Skip Blockscout contract verification."
echo " --deploy Also run contract deployment (smom-dbis-138 phased + TransactionMirror if needed)."
echo " --create-vms Also create Proxmox containers (DBIS Core 6 containers; requires SSH to PROXMOX_HOST)."
echo " --json-out Write a machine-readable run summary JSON."
echo "See: docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md"
exit 0
;;
*)
if [[ "${JSON_OUT_NEXT:-false}" == true ]]; then
JSON_OUT="$a"
JSON_OUT_NEXT=false
else
echo "Unknown argument: $a" >&2
exit 1
fi
;;
esac
done
if [[ "${JSON_OUT_NEXT:-false}" == true ]]; then
echo "Missing value for --json-out" >&2
exit 1
fi
RUN_STATUS="failed"
run_summary_init "run-all-operator-tasks-from-lan.sh" "$RUN_STARTED_AT" "$JSON_OUT"
trap 'run_summary_write "$RUN_STATUS" "$SECONDS" "$([[ "$DRY_RUN" == true ]] && echo dry-run || echo run)"; run_summary_cleanup' EXIT
log_info() { echo -e "\033[0;34m[INFO]\033[0m $1"; }
log_ok() { echo -e "\033[0;32m[✓]\033[0m $1"; }
log_warn() { echo -e "\033[0;33m[⚠]\033[0m $1"; }
log_err() { echo -e "\033[0;31m[✗]\033[0m $1"; }
echo ""
echo "=== Run all operator tasks (from LAN) ==="
echo " started=$RUN_STARTED_AT"
echo " dry-run=$DRY_RUN skip-backup=$SKIP_BACKUP skip-verify=$SKIP_VERIFY deploy=$DO_DEPLOY create-vms=$DO_CREATE_VMS"
echo ""
# 1) Wave 0: NPMplus RPC fix + backup
if [[ "$DRY_RUN" == true ]]; then
run_summary_record_step "1" "Wave 0: NPMplus RPC fix + backup" "planned" "0"
echo "[DRY-RUN] Would run: run-wave0-from-lan.sh (NPMplus RPC fix + backup)"
else
STEP_STARTED=$SECONDS
WAVE0_ARGS=()
if [[ "$SKIP_BACKUP" == true ]]; then
WAVE0_ARGS+=(--skip-backup)
fi
bash "$SCRIPT_DIR/run-wave0-from-lan.sh" "${WAVE0_ARGS[@]}"
run_summary_record_step "1" "Wave 0: NPMplus RPC fix + backup" "success" "$((SECONDS - STEP_STARTED))"
echo " Completed in $(format_duration "$((SECONDS - STEP_STARTED))")"
fi
echo ""
# 2) Blockscout verification
if [[ "$SKIP_VERIFY" != true ]]; then
if [[ "$DRY_RUN" == true ]]; then
run_summary_record_step "2" "Blockscout verification" "planned" "0"
echo "[DRY-RUN] Would run: ./scripts/verify/run-contract-verification-with-proxy.sh (dotenv already loaded)"
else
STEP_STARTED=$SECONDS
log_info "Blockscout source verification..."
(bash "$SCRIPT_DIR/verify/run-contract-verification-with-proxy.sh") || log_warn "Blockscout verify skipped (env or script failed)"
run_summary_record_step "2" "Blockscout verification" "success" "$((SECONDS - STEP_STARTED))"
echo " Completed in $(format_duration "$((SECONDS - STEP_STARTED))")"
fi
echo ""
else
run_summary_record_step "2" "Blockscout verification" "skipped" "0"
fi
# 3) Optional: contract deployment (PRIVATE_KEY from dotenv already loaded above)
if [[ "$DO_DEPLOY" == true ]]; then
if [[ "$DRY_RUN" == true ]]; then
run_summary_record_step "3" "Contract deployment (phased + TransactionMirror)" "planned" "0"
echo "[DRY-RUN] Would run: smom-dbis-138 deploy-all-phases.sh (and deploy-transaction-mirror-chain138.sh if needed)"
else
if [[ -n "${PRIVATE_KEY:-}" ]]; then
STEP_STARTED=$SECONDS
log_info "Contract deployment (phased)..."
if (cd smom-dbis-138 && ./scripts/deployment/deploy-all-phases.sh); then
log_ok "Phased deploy done"
else
log_warn "Phased deploy failed (may already be deployed)"
fi
log_info "TransactionMirror (if needed)..."
if bash "$SCRIPT_DIR/deployment/deploy-transaction-mirror-chain138.sh" 2>/dev/null; then
log_ok "TransactionMirror deployed"
else
log_warn "TransactionMirror skipped or failed (add TRANSACTION_MIRROR_ADDRESS to .env if deployed)"
fi
run_summary_record_step "3" "Contract deployment (phased + TransactionMirror)" "success" "$((SECONDS - STEP_STARTED))"
echo " Completed in $(format_duration "$((SECONDS - STEP_STARTED))")"
else
run_summary_record_step "3" "Contract deployment (phased + TransactionMirror)" "skipped" "0"
log_warn "PRIVATE_KEY not set; set in smom-dbis-138/.env or .env and re-run"
fi
fi
echo ""
else
run_summary_record_step "3" "Contract deployment (phased + TransactionMirror)" "skipped" "0"
fi
# 4) Optional: create Proxmox containers (DBIS Core)
if [[ "$DO_CREATE_VMS" == true ]]; then
if [[ "$DRY_RUN" == true ]]; then
run_summary_record_step "4" "Create DBIS Core containers" "planned" "0"
echo "[DRY-RUN] Would run: dbis_core/scripts/deployment/create-dbis-core-containers.sh"
else
if [[ -f dbis_core/scripts/deployment/create-dbis-core-containers.sh ]]; then
STEP_STARTED=$SECONDS
log_info "Creating DBIS Core containers (if missing)..."
if NON_INTERACTIVE=1 bash dbis_core/scripts/deployment/create-dbis-core-containers.sh 2>/dev/null; then
log_ok "DBIS Core containers done"
else
log_warn "DBIS Core create failed or skipped (check PROXMOX_HOST SSH)"
fi
run_summary_record_step "4" "Create DBIS Core containers" "success" "$((SECONDS - STEP_STARTED))"
echo " Completed in $(format_duration "$((SECONDS - STEP_STARTED))")"
else
run_summary_record_step "4" "Create DBIS Core containers" "skipped" "0"
log_warn "create-dbis-core-containers.sh not found; skipping"
fi
fi
echo ""
else
run_summary_record_step "4" "Create DBIS Core containers" "skipped" "0"
fi
echo "=== Next steps (manual if needed) ==="
echo " sendCrossChain: ./scripts/bridge/run-send-cross-chain.sh <amount_eth> [recipient] # omit --dry-run for real send; needs LINK"
echo " SSH keys: ./scripts/security/setup-ssh-key-auth.sh [--apply]"
echo " Firewall 8006: ./scripts/security/firewall-proxmox-8006.sh [--apply] [CIDR]"
echo " Backup cron: bash scripts/maintenance/schedule-npmplus-backup-cron.sh --install"
echo " Daily/weekly: bash scripts/maintenance/schedule-daily-weekly-cron.sh --install"
echo " Full steps list: docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md"
echo ""
echo "Total elapsed: $(format_duration "$SECONDS")"
RUN_STATUS="success"