#!/usr/bin/env bash # Pull the latest LLeMbas into the deployment and restart the service. # # Run this after pushing. It fetches, hard-resets the deployment checkout to the # remote branch, reinstalls dependencies if they changed, and restarts. Nothing # is ever edited in place under the deployment prefix, so a hard reset is safe # and avoids merge conflicts from a dirty tree. set -euo pipefail SERVICE_USER="${SERVICE_USER:-lembas}" PREFIX="${PREFIX:-/srv/lembas}" BRANCH="${LEMBAS_BRANCH:-main}" APP="$PREFIX/app" VENV="$PREFIX/venv" if [[ ! -d "$APP/.git" ]]; then echo "No deployment at $APP. Run deploy/install.sh first." >&2 exit 1 fi git_as() { sudo -u "$SERVICE_USER" git -C "$APP" "$@"; } before=$(git_as rev-parse HEAD) echo "== fetching ==" git_as fetch --quiet origin "$BRANCH" git_as reset --hard --quiet "origin/$BRANCH" after=$(git_as rev-parse HEAD) if [[ "$before" == "$after" ]]; then echo " already at ${after:0:7}, nothing to pull" else echo " ${before:0:7} -> ${after:0:7}" git_as --no-pager log --oneline "$before..$after" | sed 's/^/ /' fi # Cheap and idempotent; catches a dependency added since the last deploy. echo "== dependencies ==" sudo -u "$SERVICE_USER" "$VENV/bin/pip" install --quiet -e "$APP" echo "== restart ==" sudo systemctl restart lembas sleep 2 if systemctl is-active --quiet lembas; then echo " lembas is running" else echo " lembas FAILED to start:" >&2 sudo journalctl -u lembas -n 30 --no-pager >&2 exit 1 fi