#!/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 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