From 3d67cbc1c8023a06b049c566904a674d845b7260 Mon Sep 17 00:00:00 2001 From: Brummel Date: Mon, 4 May 2026 11:50:40 +0200 Subject: [PATCH] Add --force flag to deploy script Introduces a `--force` or `-f` flag to the `deploy-server.sh` script, allowing deployments even when the working tree is dirty. The script now also checks for a dirty working tree and exits with an error unless `--force` is provided. --- scripts/deploy-server.sh | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/scripts/deploy-server.sh b/scripts/deploy-server.sh index 7419531..b00f81b 100755 --- a/scripts/deploy-server.sh +++ b/scripts/deploy-server.sh @@ -2,14 +2,30 @@ # Deploy doctate-server to a remote Docker host (default: minerva.lan). # Idempotent: re-runs preserve operator-owned config, data, logs. # -# Usage: ./scripts/deploy-server.sh [host] -# host default: minerva.lan +# Usage: ./scripts/deploy-server.sh [--force|-f] [host] +# --force, -f build even if the working tree is dirty +# host default: minerva.lan # # See docs/deployment.md for first-time bootstrap. set -euo pipefail -HOST="${1:-minerva.lan}" +FORCE=0 +HOST="" +while [[ $# -gt 0 ]]; do + case "$1" in + --force|-f) FORCE=1 ;; + -h|--help) + sed -n '2,8p' "$0" | sed 's/^# \{0,1\}//' + exit 0 + ;; + -*) echo "Unknown flag: $1" >&2; exit 2 ;; + *) HOST="$1" ;; + esac + shift +done +HOST="${HOST:-minerva.lan}" + REMOTE="/opt/stacks/doctate-server" REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" GIT_SHA="$(cd "$REPO_ROOT" && git rev-parse --short HEAD)" @@ -19,13 +35,20 @@ IMAGE_TAGGED="doctate-server:$GIT_SHA" cd "$REPO_ROOT" # ─── Phase 0 ─── local pre-flight +if [[ -n "$(git -C "$REPO_ROOT" status --porcelain)" ]]; then + if (( FORCE )); then + echo " WARNING: working tree is dirty — building from on-disk state, not from $GIT_SHA (--force given)" >&2 + else + echo "ERROR: working tree is dirty. Commit/stash your changes, or pass --force to deploy anyway." >&2 + echo >&2 + git -C "$REPO_ROOT" status --short >&2 + exit 1 + fi +fi + echo ">>> [0/10] cargo fmt --check (server)" ( cd server && cargo fmt --check ) -if ! git -C "$REPO_ROOT" diff --quiet || ! git -C "$REPO_ROOT" diff --cached --quiet; then - echo " WARNING: working tree is dirty — building from on-disk state, not from $GIT_SHA" >&2 -fi - # ─── Phase 1 ─── remote bootstrap (idempotent) echo ">>> [1/10] Ensuring remote layout at $HOST:$REMOTE" ssh "$HOST" "mkdir -p $REMOTE/config $REMOTE/data $REMOTE/logs"