hungryroot-stack.10s.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/bin/bash
  2. set -euo pipefail
  3. ICON="🐳"
  4. PROJECT_DIR="$HOME/src/github.com/hungryroot/hungryroot"
  5. JUST_CMD="docker-run"
  6. # Containers that belong to this stack (from your docker ps)
  7. STACK_CONTAINERS=("mysql" "nginx" "redis")
  8. # Paths (SwiftBar PATH can be limited)
  9. DOCKER="/opt/homebrew/bin/docker"
  10. [[ -x "$DOCKER" ]] || DOCKER="/usr/local/bin/docker"
  11. JUST="/opt/homebrew/bin/just"
  12. [[ -x "$JUST" ]] || JUST="/usr/local/bin/just"
  13. command -v docker >/dev/null 2>&1 && DOCKER="$(command -v docker)" || true
  14. command -v just >/dev/null 2>&1 && JUST="$(command -v just)" || true
  15. docker_ok() {
  16. "$DOCKER" info >/dev/null 2>&1
  17. }
  18. any_running() {
  19. local name
  20. for name in "${STACK_CONTAINERS[@]}"; do
  21. if "$DOCKER" ps --format '{{.Names}}' 2>/dev/null | /usr/bin/grep -Fxq "$name"; then
  22. return 0
  23. fi
  24. done
  25. return 1
  26. }
  27. running_list() {
  28. local name out=()
  29. for name in "${STACK_CONTAINERS[@]}"; do
  30. if "$DOCKER" ps --format '{{.Names}}' 2>/dev/null | /usr/bin/grep -Fxq "$name"; then
  31. out+=("$name")
  32. fi
  33. done
  34. printf "%s\n" "${out[@]:-}"
  35. }
  36. # --- Menu bar title ---
  37. if docker_ok && any_running; then
  38. echo "$ICON 🟢"
  39. else
  40. echo "$ICON 🔴"
  41. fi
  42. echo "---"
  43. echo "Open http://127.0.0.1:8000 | href=http://127.0.0.1:8000"
  44. echo "Run: just $JUST_CMD | bash='$0' param1=up terminal=true refresh=true"
  45. echo "Stop Hungryroot stack (mysql/nginx/redis) | bash='$0' param1=down terminal=true refresh=true"
  46. echo "---"
  47. echo "docker ps (filtered) | bash='$0' param1=ps terminal=true"
  48. echo "Open project dir | bash='/usr/bin/open' param1='$PROJECT_DIR' terminal=false"
  49. ACTION="${1:-}"
  50. case "$ACTION" in
  51. up)
  52. echo "== Checking Docker =="
  53. if ! docker_ok; then
  54. echo "Docker engine not reachable."
  55. echo "If you use Colima: run 'colima start' first."
  56. exit 1
  57. fi
  58. echo "OK ✅"
  59. echo
  60. echo "== Running: just $JUST_CMD =="
  61. cd "$PROJECT_DIR"
  62. "$JUST" "$JUST_CMD"
  63. ;;
  64. down)
  65. echo "== Stopping Hungryroot stack containers =="
  66. if ! docker_ok; then
  67. echo "Docker engine not reachable."
  68. exit 1
  69. fi
  70. RUNNING="$(running_list || true)"
  71. if [[ -z "${RUNNING:-}" ]]; then
  72. echo "(none of mysql/nginx/redis are running)"
  73. exit 0
  74. fi
  75. echo "$RUNNING" | /usr/bin/xargs -n 10 "$DOCKER" stop
  76. echo "Done ✅"
  77. ;;
  78. ps)
  79. if ! docker_ok; then
  80. echo "Docker engine not reachable."
  81. exit 1
  82. fi
  83. echo "== Running (stack) =="
  84. running_list || true
  85. echo
  86. echo "== docker ps =="
  87. "$DOCKER" ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' |
  88. /usr/bin/grep -E '^(NAMES|mysql|nginx|redis)\b' || true
  89. ;;
  90. esac