Skip to content

Commit 94d03e1

Browse files
authored
deploy: refactor shared release/rollback helpers (#102)
1 parent 3801c32 commit 94d03e1

3 files changed

Lines changed: 56 additions & 97 deletions

File tree

bin/lib/release-common.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/bin/bash
2+
# Shared helpers for release/update/rollback scripts.
3+
4+
has_systemd() {
5+
command -v systemctl >/dev/null 2>&1 && [ -d /run/systemd/system ]
6+
}
7+
8+
verify_git_free_release() {
9+
local dir="$1"
10+
11+
[ -d "$dir" ] || return 1
12+
[ ! -d "$dir/.git" ] || return 1
13+
14+
if find "$dir" -type d -name .git -print -quit | grep -q .; then
15+
return 1
16+
fi
17+
18+
return 0
19+
}
20+
21+
atomic_symlink_swap() {
22+
local target="$1"
23+
local link_path="$2"
24+
local parent
25+
local tmp_link
26+
27+
parent="$(dirname "$link_path")"
28+
mkdir -p "$parent"
29+
30+
tmp_link="$parent/.tmp.$(basename "$link_path").$$"
31+
ln -s "$target" "$tmp_link"
32+
mv -Tf "$tmp_link" "$link_path"
33+
}
34+
35+
restart_baudbot_service_if_active() {
36+
if has_systemd && systemctl is-enabled baudbot >/dev/null 2>&1; then
37+
if systemctl is-active baudbot >/dev/null 2>&1; then
38+
log "restarting baudbot service"
39+
systemctl restart baudbot
40+
sleep 3
41+
systemctl is-active baudbot >/dev/null 2>&1 || die "service failed to restart"
42+
else
43+
log "service installed but not active; skipping restart"
44+
fi
45+
else
46+
log "systemd unavailable; skipping restart"
47+
fi
48+
}

bin/rollback-release.sh

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
set -euo pipefail
99

10+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11+
1012
BAUDBOT_RELEASE_ROOT="${BAUDBOT_RELEASE_ROOT:-/opt/baudbot}"
1113
BAUDBOT_RELEASES_DIR="${BAUDBOT_RELEASES_DIR:-$BAUDBOT_RELEASE_ROOT/releases}"
1214
BAUDBOT_CURRENT_LINK="${BAUDBOT_CURRENT_LINK:-$BAUDBOT_RELEASE_ROOT/current}"
@@ -37,36 +39,8 @@ Usage: $0 [previous|<sha>] [--release-root <path>] [--skip-restart]
3739
EOF
3840
}
3941

40-
has_systemd() {
41-
command -v systemctl >/dev/null 2>&1 && [ -d /run/systemd/system ]
42-
}
43-
44-
verify_git_free_release() {
45-
local dir="$1"
46-
47-
[ -d "$dir" ] || return 1
48-
[ ! -d "$dir/.git" ] || return 1
49-
50-
if find "$dir" -type d -name .git -print -quit | grep -q .; then
51-
return 1
52-
fi
53-
54-
return 0
55-
}
56-
57-
atomic_symlink_swap() {
58-
local target="$1"
59-
local link_path="$2"
60-
local parent
61-
local tmp_link
62-
63-
parent="$(dirname "$link_path")"
64-
mkdir -p "$parent"
65-
66-
tmp_link="$parent/.tmp.$(basename "$link_path").$$"
67-
ln -s "$target" "$tmp_link"
68-
mv -Tf "$tmp_link" "$link_path"
69-
}
42+
# shellcheck source=bin/lib/release-common.sh
43+
source "$SCRIPT_DIR/lib/release-common.sh"
7044

7145
TARGET_SPEC="${1:-previous}"
7246
if [ "$#" -gt 0 ]; then
@@ -153,30 +127,13 @@ run_deploy() {
153127
}
154128

155129
run_restart_and_health() {
156-
local was_active=0
157-
158130
if [ -n "$BAUDBOT_ROLLBACK_RESTART_CMD" ]; then
159131
log "running restart override"
160132
BAUDBOT_ROLLBACK_TARGET_RELEASE="$TARGET_RELEASE" bash -lc "$BAUDBOT_ROLLBACK_RESTART_CMD"
161133
elif [ "$BAUDBOT_ROLLBACK_SKIP_RESTART" = "1" ]; then
162134
log "skipping restart"
163135
else
164-
if has_systemd && systemctl is-enabled baudbot >/dev/null 2>&1; then
165-
if systemctl is-active baudbot >/dev/null 2>&1; then
166-
was_active=1
167-
fi
168-
169-
if [ "$was_active" -eq 1 ]; then
170-
log "restarting baudbot service"
171-
systemctl restart baudbot
172-
sleep 3
173-
systemctl is-active baudbot >/dev/null 2>&1 || die "service failed to restart"
174-
else
175-
log "service installed but not active; skipping restart"
176-
fi
177-
else
178-
log "systemd unavailable; skipping restart"
179-
fi
136+
restart_baudbot_service_if_active
180137
fi
181138

182139
if [ -n "$BAUDBOT_ROLLBACK_HEALTH_CMD" ]; then

bin/update-release.sh

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ die() {
5656
exit 1
5757
}
5858

59-
has_systemd() {
60-
command -v systemctl >/dev/null 2>&1 && [ -d /run/systemd/system ]
61-
}
59+
# shellcheck source=bin/lib/release-common.sh
60+
source "$SCRIPT_DIR/lib/release-common.sh"
6261

6362
cleanup() {
6463
if [ -n "$CHECKOUT_DIR" ] && [ -d "$CHECKOUT_DIR" ]; then
@@ -170,34 +169,6 @@ resolve_branch() {
170169
echo "main"
171170
}
172171

173-
verify_git_free_release() {
174-
local dir="$1"
175-
176-
if [ -d "$dir/.git" ]; then
177-
return 1
178-
fi
179-
180-
if find "$dir" -type d -name .git -print -quit | grep -q .; then
181-
return 1
182-
fi
183-
184-
return 0
185-
}
186-
187-
atomic_symlink_swap() {
188-
local target="$1"
189-
local link_path="$2"
190-
local parent
191-
local tmp_link
192-
193-
parent="$(dirname "$link_path")"
194-
mkdir -p "$parent"
195-
196-
tmp_link="$parent/.tmp.$(basename "$link_path").$$"
197-
ln -s "$target" "$tmp_link"
198-
mv -Tf "$tmp_link" "$link_path"
199-
}
200-
201172
save_source_metadata() {
202173
local repo_url="$1"
203174
local branch="$2"
@@ -303,30 +274,13 @@ run_deploy() {
303274
}
304275

305276
run_restart_and_health() {
306-
local was_active=0
307-
308277
if [ -n "$BAUDBOT_UPDATE_RESTART_CMD" ]; then
309278
log "running restart override"
310279
BAUDBOT_UPDATE_RELEASE_DIR="$RELEASE_DIR" BAUDBOT_UPDATE_CHECKOUT_DIR="$CHECKOUT_DIR" bash -lc "$BAUDBOT_UPDATE_RESTART_CMD"
311280
elif [ "$BAUDBOT_UPDATE_SKIP_RESTART" = "1" ]; then
312281
log "skipping restart"
313282
else
314-
if has_systemd && systemctl is-enabled baudbot >/dev/null 2>&1; then
315-
if systemctl is-active baudbot >/dev/null 2>&1; then
316-
was_active=1
317-
fi
318-
319-
if [ "$was_active" -eq 1 ]; then
320-
log "restarting baudbot service"
321-
systemctl restart baudbot
322-
sleep 3
323-
systemctl is-active baudbot >/dev/null 2>&1 || die "service failed to restart"
324-
else
325-
log "service installed but not active; skipping restart"
326-
fi
327-
else
328-
log "systemd unavailable; skipping restart"
329-
fi
283+
restart_baudbot_service_if_active
330284
fi
331285

332286
if [ -n "$BAUDBOT_UPDATE_HEALTH_CMD" ]; then

0 commit comments

Comments
 (0)