Skip to content

Commit d57f2c7

Browse files
authored
cli: restart bridge tmux session before systemd restart (#128)
1 parent 2c88a83 commit d57f2c7

2 files changed

Lines changed: 72 additions & 0 deletions

File tree

bin/baudbot

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,16 @@ case "${1:-}" in
351351
shift
352352
require_root "restart"
353353
if has_systemd; then
354+
# Ensure any pre-existing detached bridge tmux session is torn down so
355+
# restart always boots a fresh bridge from currently deployed runtime files.
356+
AGENT_USER="${BAUDBOT_AGENT_USER:-baudbot_agent}"
357+
if command -v tmux >/dev/null 2>&1; then
358+
if command -v sudo >/dev/null 2>&1; then
359+
sudo -u "$AGENT_USER" tmux kill-session -t slack-bridge 2>/dev/null || true
360+
elif command -v runuser >/dev/null 2>&1; then
361+
runuser -u "$AGENT_USER" -- tmux kill-session -t slack-bridge 2>/dev/null || true
362+
fi
363+
fi
354364
exec systemctl restart baudbot "$@"
355365
else
356366
echo "systemd not available."

bin/baudbot.test.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,75 @@ EOF
130130
)
131131
}
132132

133+
test_restart_restarts_systemd_and_kills_bridge_tmux() {
134+
(
135+
set -euo pipefail
136+
local tmp fakebin log_file
137+
tmp="$(mktemp -d /tmp/baudbot-cli-test.XXXXXX)"
138+
trap 'rm -rf "$tmp"' EXIT
139+
140+
mkdir -p "$tmp/fakebin" "$tmp/bin/lib"
141+
fakebin="$tmp/fakebin"
142+
log_file="$tmp/calls.log"
143+
144+
printf '{"version":"1.2.3"}\n' > "$tmp/package.json"
145+
cat > "$tmp/bin/lib/baudbot-runtime.sh" <<'EOF'
146+
#!/bin/bash
147+
has_systemd() { return 0; }
148+
cmd_status() { :; }
149+
cmd_logs() { :; }
150+
cmd_sessions() { :; }
151+
cmd_attach() { :; }
152+
EOF
153+
154+
cat > "$fakebin/id" <<'EOF'
155+
#!/bin/bash
156+
if [ "${1:-}" = "-u" ]; then
157+
echo 0
158+
else
159+
/usr/bin/id "$@"
160+
fi
161+
EOF
162+
163+
cat > "$fakebin/sudo" <<'EOF'
164+
#!/bin/bash
165+
if [ "${1:-}" = "-u" ]; then
166+
user="$2"
167+
shift 2
168+
fi
169+
echo "sudo $*" >> "${BAUDBOT_TEST_LOG}"
170+
exec "$@"
171+
EOF
172+
173+
cat > "$fakebin/tmux" <<'EOF'
174+
#!/bin/bash
175+
echo "tmux $*" >> "${BAUDBOT_TEST_LOG}"
176+
exit 0
177+
EOF
178+
179+
cat > "$fakebin/systemctl" <<'EOF'
180+
#!/bin/bash
181+
echo "systemctl $*" >> "${BAUDBOT_TEST_LOG}"
182+
exit 0
183+
EOF
184+
185+
chmod +x "$fakebin/id" "$fakebin/sudo" "$fakebin/tmux" "$fakebin/systemctl"
186+
187+
PATH="$fakebin:$PATH" BAUDBOT_TEST_LOG="$log_file" BAUDBOT_ROOT="$tmp" bash "$CLI" restart
188+
189+
grep -q '^tmux kill-session -t slack-bridge$' "$log_file"
190+
grep -q '^systemctl restart baudbot$' "$log_file"
191+
)
192+
}
193+
133194
echo "=== baudbot cli tests ==="
134195
echo ""
135196

136197
run_test "version reads package.json" test_version_uses_package_json
137198
run_test "status dispatches via runtime module" test_status_dispatches_via_runtime_module
138199
run_test "attach requires root" test_attach_requires_root
139200
run_test "broker register requires root" test_broker_register_requires_root
201+
run_test "restart kills bridge tmux then restarts systemd" test_restart_restarts_systemd_and_kills_bridge_tmux
140202

141203
echo ""
142204
echo "=== $PASSED/$TOTAL passed, $FAILED failed ==="

0 commit comments

Comments
 (0)