From a8d1c7a130b70c24dfa9012dd1897bdf1022f7a9 Mon Sep 17 00:00:00 2001 From: giles Date: Tue, 24 Feb 2026 20:09:18 +0000 Subject: [PATCH] Add local deploy script for quick testing Builds and restarts individual services without going through CI. Supports explicit app names, --all, or auto-detection from git diff. Co-Authored-By: Claude Opus 4.6 --- deploy.sh | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..c671696 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +set -euo pipefail + +REGISTRY="registry.rose-ash.com:5000" +APPS="blog market cart events federation account" + +usage() { + echo "Usage: deploy.sh [app ...]" + echo " deploy.sh blog # rebuild + restart blog only" + echo " deploy.sh blog market # rebuild + restart blog and market" + echo " deploy.sh --all # rebuild + restart all apps" + echo " deploy.sh # auto-detect changed apps via git" + exit 1 +} + +cd "$(dirname "$0")" + +# Determine which apps to build +if [ $# -eq 0 ]; then + # Auto-detect: uncommitted changes + last commit + CHANGED=$(git diff --name-only HEAD 2>/dev/null; git diff --name-only HEAD~1 HEAD 2>/dev/null || true) + BUILD=() + if echo "$CHANGED" | grep -q "^shared/"; then + BUILD=($APPS) + else + for app in $APPS; do + if echo "$CHANGED" | grep -q "^$app/"; then + BUILD+=("$app") + fi + done + fi + if [ ${#BUILD[@]} -eq 0 ]; then + echo "No app changes detected. Pass app names or --all." + exit 0 + fi +elif [ "$1" = "--all" ]; then + BUILD=($APPS) +elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + usage +else + BUILD=("$@") +fi + +echo "Building: ${BUILD[*]}" +echo "" + +for app in "${BUILD[@]}"; do + echo "=== $app ===" + docker build -f "$app/Dockerfile" -t "$REGISTRY/$app:latest" . + docker push "$REGISTRY/$app:latest" + docker service update --force "coop_$app" 2>/dev/null \ + || echo " (service coop_$app not running — will start on next stack deploy)" + echo "" +done + +echo "Done."