#!/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 [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"