|
|
@@ -0,0 +1,102 @@
|
|
|
+#!/bin/bash
|
|
|
+set -euo pipefail
|
|
|
+
|
|
|
+ICON="🐳"
|
|
|
+PROJECT_DIR="$HOME/src/github.com/hungryroot/hungryroot"
|
|
|
+JUST_CMD="docker-run"
|
|
|
+
|
|
|
+# Containers that belong to this stack (from your docker ps)
|
|
|
+STACK_CONTAINERS=("mysql" "nginx" "redis")
|
|
|
+
|
|
|
+# Paths (SwiftBar PATH can be limited)
|
|
|
+DOCKER="/opt/homebrew/bin/docker"
|
|
|
+[[ -x "$DOCKER" ]] || DOCKER="/usr/local/bin/docker"
|
|
|
+JUST="/opt/homebrew/bin/just"
|
|
|
+[[ -x "$JUST" ]] || JUST="/usr/local/bin/just"
|
|
|
+command -v docker >/dev/null 2>&1 && DOCKER="$(command -v docker)" || true
|
|
|
+command -v just >/dev/null 2>&1 && JUST="$(command -v just)" || true
|
|
|
+
|
|
|
+docker_ok() {
|
|
|
+ "$DOCKER" info >/dev/null 2>&1
|
|
|
+}
|
|
|
+
|
|
|
+any_running() {
|
|
|
+ local name
|
|
|
+ for name in "${STACK_CONTAINERS[@]}"; do
|
|
|
+ if "$DOCKER" ps --format '{{.Names}}' 2>/dev/null | /usr/bin/grep -Fxq "$name"; then
|
|
|
+ return 0
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ return 1
|
|
|
+}
|
|
|
+
|
|
|
+running_list() {
|
|
|
+ local name out=()
|
|
|
+ for name in "${STACK_CONTAINERS[@]}"; do
|
|
|
+ if "$DOCKER" ps --format '{{.Names}}' 2>/dev/null | /usr/bin/grep -Fxq "$name"; then
|
|
|
+ out+=("$name")
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ printf "%s\n" "${out[@]:-}"
|
|
|
+}
|
|
|
+
|
|
|
+# --- Menu bar title ---
|
|
|
+if docker_ok && any_running; then
|
|
|
+ echo "$ICON 🟢"
|
|
|
+else
|
|
|
+ echo "$ICON 🔴"
|
|
|
+fi
|
|
|
+
|
|
|
+echo "---"
|
|
|
+
|
|
|
+echo "Open http://127.0.0.1:8000 | href=http://127.0.0.1:8000"
|
|
|
+echo "Run: just $JUST_CMD | bash='$0' param1=up terminal=true refresh=true"
|
|
|
+echo "Stop Hungryroot stack (mysql/nginx/redis) | bash='$0' param1=down terminal=true refresh=true"
|
|
|
+echo "---"
|
|
|
+echo "docker ps (filtered) | bash='$0' param1=ps terminal=true"
|
|
|
+echo "Open project dir | bash='/usr/bin/open' param1='$PROJECT_DIR' terminal=false"
|
|
|
+
|
|
|
+ACTION="${1:-}"
|
|
|
+case "$ACTION" in
|
|
|
+up)
|
|
|
+ echo "== Checking Docker =="
|
|
|
+ if ! docker_ok; then
|
|
|
+ echo "Docker engine not reachable."
|
|
|
+ echo "If you use Colima: run 'colima start' first."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ echo "OK ✅"
|
|
|
+ echo
|
|
|
+ echo "== Running: just $JUST_CMD =="
|
|
|
+ cd "$PROJECT_DIR"
|
|
|
+ "$JUST" "$JUST_CMD"
|
|
|
+ ;;
|
|
|
+down)
|
|
|
+ echo "== Stopping Hungryroot stack containers =="
|
|
|
+ if ! docker_ok; then
|
|
|
+ echo "Docker engine not reachable."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ RUNNING="$(running_list || true)"
|
|
|
+ if [[ -z "${RUNNING:-}" ]]; then
|
|
|
+ echo "(none of mysql/nginx/redis are running)"
|
|
|
+ exit 0
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "$RUNNING" | /usr/bin/xargs -n 10 "$DOCKER" stop
|
|
|
+ echo "Done ✅"
|
|
|
+ ;;
|
|
|
+ps)
|
|
|
+ if ! docker_ok; then
|
|
|
+ echo "Docker engine not reachable."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ echo "== Running (stack) =="
|
|
|
+ running_list || true
|
|
|
+ echo
|
|
|
+ echo "== docker ps =="
|
|
|
+ "$DOCKER" ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' |
|
|
|
+ /usr/bin/grep -E '^(NAMES|mysql|nginx|redis)\b' || true
|
|
|
+ ;;
|
|
|
+esac
|