198 lines
8.2 KiB
Bash
Executable File
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"
|