Skip to content

Commit aedf6e7

Browse files
committed
feat: [SHRL-1464] add cosmovisor setup script
1 parent 2b617d1 commit aedf6e7

1 file changed

Lines changed: 146 additions & 0 deletions

File tree

script/setup_cosmovisor_mac.sh

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
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

Comments
 (0)