|
| 1 | +#!/usr/bin/env bash |
| 2 | +# macOS local Cosmovisor upgrade setup for ShareLedger |
| 3 | +set -euo pipefail |
| 4 | + |
| 5 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 6 | +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
| 7 | + |
| 8 | +HOME_DIR="${HOME_DIR:-$HOME/.shareledger}" |
| 9 | +CHAIN_ID="${CHAIN_ID:-ShareRing-VoyagerNet}" |
| 10 | + |
| 11 | +CURRENT_BIN="${CURRENT_BIN:-$HOME/go/bin/shareledger}" |
| 12 | +NEW_BIN="${NEW_BIN:-$REPO_ROOT/build/shareledger}" |
| 13 | + |
| 14 | +UPGRADE_NAME="${UPGRADE_NAME:-v3}" |
| 15 | + |
| 16 | +INIT_SCRIPT="${INIT_SCRIPT:-$REPO_ROOT/script/init_dev_mac.sh}" |
| 17 | + |
| 18 | +COSMOVISOR_BIN="${COSMOVISOR_BIN:-cosmovisor}" |
| 19 | + |
| 20 | +DAEMON_NAME_DEFAULT="shareledger" |
| 21 | +# IMPORTANT: |
| 22 | +# - If your shell already has DAEMON_NAME set (e.g. from another chain), we *ignore* it by default. |
| 23 | +# - Override explicitly via DAEMON_NAME_OVERRIDE=... (recommended). |
| 24 | +# - Or keep inherited DAEMON_NAME by setting ALLOW_INHERIT_DAEMON_NAME=1. |
| 25 | +if [ -n "${DAEMON_NAME_OVERRIDE:-}" ]; then |
| 26 | + DAEMON_NAME="$DAEMON_NAME_OVERRIDE" |
| 27 | +elif [ -n "${DAEMON_NAME:-}" ] && [ "$DAEMON_NAME" != "$DAEMON_NAME_DEFAULT" ] && [ "${ALLOW_INHERIT_DAEMON_NAME:-0}" != "1" ]; then |
| 28 | + echo "Warning: DAEMON_NAME is already set to '$DAEMON_NAME' in your shell; ignoring it for this script." |
| 29 | + echo "- To override explicitly: DAEMON_NAME_OVERRIDE=shareledger" |
| 30 | + echo "- To keep your current value: ALLOW_INHERIT_DAEMON_NAME=1" |
| 31 | + DAEMON_NAME="$DAEMON_NAME_DEFAULT" |
| 32 | +else |
| 33 | + DAEMON_NAME="${DAEMON_NAME:-$DAEMON_NAME_DEFAULT}" |
| 34 | +fi |
| 35 | + |
| 36 | +COSMOVISOR_HOME="$HOME_DIR/cosmovisor" |
| 37 | +GENESIS_BIN_DIR="$COSMOVISOR_HOME/genesis/bin" |
| 38 | +UPGRADE_BIN_DIR="$COSMOVISOR_HOME/upgrades/$UPGRADE_NAME/bin" |
| 39 | + |
| 40 | +print_env () { |
| 41 | + cat <<EOF |
| 42 | +export DAEMON_HOME="$HOME_DIR" |
| 43 | +export DAEMON_NAME="$DAEMON_NAME" |
| 44 | +export DAEMON_ALLOW_DOWNLOAD_BINARIES="${DAEMON_ALLOW_DOWNLOAD_BINARIES:-false}" |
| 45 | +export DAEMON_RESTART_AFTER_UPGRADE="${DAEMON_RESTART_AFTER_UPGRADE:-true}" |
| 46 | +export DAEMON_LOG_BUFFER_SIZE="${DAEMON_LOG_BUFFER_SIZE:-512}" |
| 47 | +EOF |
| 48 | +} |
| 49 | + |
| 50 | +usage () { |
| 51 | + cat <<EOF |
| 52 | +Usage: |
| 53 | + $0 [--print-env] |
| 54 | +
|
| 55 | +Examples: |
| 56 | + # Setup cosmovisor directories/binaries: |
| 57 | + $0 |
| 58 | +
|
| 59 | + # Apply env vars to your current shell: |
| 60 | + eval "\$($0 --print-env)" |
| 61 | + # or: $0 (writes env file) && source "$HOME_DIR/cosmovisor.env" |
| 62 | +
|
| 63 | +Environment overrides: |
| 64 | + HOME_DIR=... (default: $HOME/.shareledger) |
| 65 | + UPGRADE_NAME=... (default: v3) |
| 66 | + DAEMON_NAME_OVERRIDE=... (recommended override) |
| 67 | + ALLOW_INHERIT_DAEMON_NAME=1 (use existing DAEMON_NAME if set) |
| 68 | +EOF |
| 69 | +} |
| 70 | + |
| 71 | +case "${1:-}" in |
| 72 | + --print-env) |
| 73 | + print_env |
| 74 | + exit 0 |
| 75 | + ;; |
| 76 | + -h|--help) |
| 77 | + usage |
| 78 | + exit 0 |
| 79 | + ;; |
| 80 | + "") |
| 81 | + ;; |
| 82 | + *) |
| 83 | + echo "Unknown arg: $1" >&2 |
| 84 | + usage >&2 |
| 85 | + exit 2 |
| 86 | + ;; |
| 87 | +esac |
| 88 | + |
| 89 | +echo "Effective config:" |
| 90 | +echo "- HOME_DIR: $HOME_DIR" |
| 91 | +echo "- CHAIN_ID: $CHAIN_ID" |
| 92 | +echo "- DAEMON_NAME: $DAEMON_NAME" |
| 93 | +echo "- UPGRADE_NAME: $UPGRADE_NAME" |
| 94 | +echo "- CURRENT_BIN: $CURRENT_BIN" |
| 95 | +echo "- NEW_BIN: $NEW_BIN" |
| 96 | + |
| 97 | +echo "Checking binaries exist..." |
| 98 | +test -f "$CURRENT_BIN" || { echo "Current binary not found: $CURRENT_BIN"; exit 1; } |
| 99 | +test -f "$NEW_BIN" || { echo "New binary not found: $NEW_BIN"; exit 1; } |
| 100 | + |
| 101 | +echo "Creating Cosmovisor directories..." |
| 102 | +mkdir -p "$GENESIS_BIN_DIR" |
| 103 | +mkdir -p "$UPGRADE_BIN_DIR" |
| 104 | + |
| 105 | +echo "Installing genesis binary into Cosmovisor..." |
| 106 | +cp -f "$CURRENT_BIN" "$GENESIS_BIN_DIR/$DAEMON_NAME" |
| 107 | +chmod +x "$GENESIS_BIN_DIR/$DAEMON_NAME" |
| 108 | + |
| 109 | +echo "Installing upgrade binary into Cosmovisor for upgrade name: $UPGRADE_NAME" |
| 110 | +cp -f "$NEW_BIN" "$UPGRADE_BIN_DIR/$DAEMON_NAME" |
| 111 | +chmod +x "$UPGRADE_BIN_DIR/$DAEMON_NAME" |
| 112 | + |
| 113 | +echo "Optional: writing upgrade-info.json (some tooling expects it)" |
| 114 | +cat > "$COSMOVISOR_HOME/upgrades/$UPGRADE_NAME/upgrade-info.json" <<EOF |
| 115 | +{ |
| 116 | + "name": "$UPGRADE_NAME", |
| 117 | + "info": "local cosmovisor test upgrade" |
| 118 | +} |
| 119 | +EOF |
| 120 | + |
| 121 | +if [ "${RESET_HOME:-0}" = "1" ]; then |
| 122 | + echo "RESET_HOME=1 set. Removing $HOME_DIR" |
| 123 | + rm -rf "$HOME_DIR" |
| 124 | +fi |
| 125 | + |
| 126 | +if [ ! -d "$HOME_DIR/config" ] || [ ! -f "$HOME_DIR/config/genesis.json" ]; then |
| 127 | + echo "No existing chain home found. Running init script: $INIT_SCRIPT" |
| 128 | + bash "$INIT_SCRIPT" |
| 129 | +else |
| 130 | + echo "Chain home already initialized at: $HOME_DIR" |
| 131 | +fi |
| 132 | + |
| 133 | +# Write an env file so you can 'source' it (since ./script/... can't modify your current shell environment). |
| 134 | +ENV_FILE="$HOME_DIR/cosmovisor.env" |
| 135 | +mkdir -p "$HOME_DIR" |
| 136 | +print_env > "$ENV_FILE" |
| 137 | + |
| 138 | +echo "" |
| 139 | +echo "Cosmovisor env written to: $ENV_FILE" |
| 140 | +echo "Apply it to your current shell with:" |
| 141 | +echo " source \"$ENV_FILE\"" |
| 142 | +echo "Or:" |
| 143 | +echo " eval \"\$($0 --print-env)\"" |
| 144 | + |
| 145 | +echo "" |
| 146 | +echo "Note: running '$0' cannot persist exports into your current shell; use one of the commands above." |
0 commit comments