CluPilotCloud/bin/clupilot

65 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# CluPilot dev helper — wraps docker compose so all tooling runs INSIDE the
# container (R8). Run from anywhere; it cd's into the project dir itself.
set -euo pipefail
# Resolve the project root from the script's own location (follows the symlink
# in ~/.local/bin), so this works for any checkout / user / CI — not a fixed path.
SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
PROJECT_DIR="$(cd "$(dirname "$SCRIPT_PATH")/.." && pwd)"
cd "$PROJECT_DIR"
# tooling runs as the configured host UID/GID (from .env), falling back to the
# invoking user — so bind-mounted files keep the right owner on any host (R8).
_huid="$(sed -n 's/^HOST_UID=//p' .env 2>/dev/null | head -1)"; _huid="${_huid:-$(id -u)}"
_hgid="$(sed -n 's/^HOST_GID=//p' .env 2>/dev/null | head -1)"; _hgid="${_hgid:-$(id -g)}"
UIDGID="${_huid}:${_hgid}"
RUN=(docker compose run --rm --no-deps -u "$UIDGID" -e HOME=/tmp app)
usage() {
cat <<'USAGE'
CluPilot helper — Docker-first dev commands
clupilot up Stack starten (-d)
clupilot down Stack stoppen
clupilot restart Alle Container neu starten
clupilot restart <svc> Einen Service neu starten (app|reverb|queue|scheduler|mariadb|redis)
clupilot rebuild App-Image neu bauen + Stack neu hoch
clupilot ps Status aller Container
clupilot logs [svc] Logs folgen (alle oder ein Service)
clupilot health Kurzer Health-Check (HTTP + Services)
clupilot artisan <...> php artisan <...> im Container
clupilot composer <...> composer <...> im Container
clupilot npm <...> npm <...> im Container
clupilot tinker php artisan tinker
clupilot migrate php artisan migrate
clupilot fresh php artisan migrate:fresh (ACHTUNG: leert DB)
clupilot shell bash im laufenden app-Container
USAGE
}
cmd="${1:-help}"; shift || true
case "$cmd" in
up) docker compose up -d ;;
down) docker compose down ;;
restart)
if [[ $# -gt 0 ]]; then docker compose restart "$@"; else docker compose restart; fi ;;
rebuild) docker compose build app && docker compose up -d ;;
ps) docker compose ps ;;
logs) if [[ $# -gt 0 ]]; then docker compose logs -f "$@"; else docker compose logs -f; fi ;;
health)
_aport="$(sed -n 's/^APP_PORT=//p' .env 2>/dev/null | head -1)"; _aport="${_aport:-80}"
printf 'HTTP : '; curl -sS -o /dev/null -w '%{http_code}\n' "http://localhost:${_aport}/" || true
docker compose ps ;;
artisan) docker compose exec -u "$UIDGID" app php artisan "$@" ;;
composer) "${RUN[@]}" composer "$@" ;;
npm) "${RUN[@]}" npm "$@" ;;
tinker) docker compose exec -u "$UIDGID" app php artisan tinker ;;
migrate) docker compose exec -u "$UIDGID" app php artisan migrate "$@" ;;
fresh) docker compose exec -u "$UIDGID" app php artisan migrate:fresh "$@" ;;
shell) docker compose exec -u "$UIDGID" app bash ;;
help|-h|--help) usage ;;
*) echo "Unbekannt: $cmd"; echo; usage; exit 1 ;;
esac