summaryrefslogtreecommitdiff
path: root/scripts/deploy
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/deploy')
-rwxr-xr-xscripts/deploy35
1 files changed, 33 insertions, 2 deletions
diff --git a/scripts/deploy b/scripts/deploy
index 6579839..5ec6175 100755
--- a/scripts/deploy
+++ b/scripts/deploy
@@ -32,6 +32,9 @@ rsync -av --delete web/static/ ${SITE_DIR}/public/
rsync -av --delete web/templates/ ${SITE_DIR}/templates/
# Sync migrations
rsync -av --delete migrations/ ${SITE_DIR}/migrations/
+# Sync operational scripts so the health-check timer runs the current version
+# from a stable path rather than whatever happens to be in a source checkout.
+rsync -av --delete scripts/ ${SITE_DIR}/app-scripts/
echo "==> Swapping binary..."
mv app ${SITE_DIR}/app
@@ -71,9 +74,37 @@ for svc_bin in ${SITE_DIR}/services/*/app ${SITE_DIR}/bin/*; do
chmod +x "$svc_bin"
done
+# The synced operational scripts need to stay executable too — the health-check
+# timer ExecStarts one of them, and a non-executable ExecStart is the same
+# 203/EXEC failure this whole change exists to prevent.
+chmod +x ${SITE_DIR}/app-scripts/deploy \
+ ${SITE_DIR}/app-scripts/verify-deploy \
+ ${SITE_DIR}/app-scripts/health-check 2>/dev/null || true
+
echo "==> Starting service..."
systemctl start ${SERVICE}
-sleep 1
-systemctl status ${SERVICE} --no-pager -l
+sleep 2
+
+# Sub-services are separate units and are NOT restarted by deploying doot. If
+# one is sitting in `failed` after exhausting its restart limit, it stays down
+# through any number of successful deploys — bring them back here so a deploy
+# leaves the whole site healthy, not just the main app.
+echo "==> Ensuring sub-services are running..."
+for unit in scout.service hawaii.service claudomator@${FQDN}.service; do
+ systemctl list-unit-files "${unit}" >/dev/null 2>&1 || continue
+ if [ "$(systemctl is-active "${unit}" 2>/dev/null || true)" != "active" ]; then
+ echo " ${unit} is not active — restarting"
+ systemctl reset-failed "${unit}" 2>/dev/null || true
+ systemctl start "${unit}" || echo " WARNING: could not start ${unit}"
+ fi
+done
+sleep 3
+
+# Assert the outcome instead of printing a status block for a human to skim.
+# `systemctl status` exits zero whether or not anything works and says nothing
+# about the gateway's sub-services, so a deploy could report success while
+# /scout/ served 502s.
+echo "==> Verifying deploy..."
+"$(dirname "$0")/verify-deploy" "${BUILD_COMMIT}"
echo "==> Deploy complete!"