-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstart.sh
More file actions
executable file
·103 lines (93 loc) · 3.03 KB
/
Copy pathstart.sh
File metadata and controls
executable file
·103 lines (93 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DATA_DIR="${PROJECT_DIR}/data"
LOG_DIR="${PROJECT_DIR}/logs"
mkdir -p "$LOG_DIR"
DB_PID_FILE="${LOG_DIR}/surreal.pid"
DEV_PID_FILE="${LOG_DIR}/vite.pid"
# Freigegebene SurrealDB-Version (siehe docs/adr/ADR-001-surrealdb-version-pinning.md)
# Andere Versionen können das surrealkv-Manifest in data/ unlesbar machen (Vorfall 2026-07-08).
SURREAL_PINNED_VERSION="3.0.5"
check_surreal_version() {
if ! command -v surreal >/dev/null 2>&1; then
echo "❌ 'surreal' nicht im PATH. Installation via Nix Home-Manager (home.nix), siehe ADR-001."
exit 1
fi
local v
v="$(surreal version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)"
if [ "$v" != "$SURREAL_PINNED_VERSION" ]; then
echo "⚠️ SurrealDB ${v:-unbekannt} gefunden, freigegeben ist ${SURREAL_PINNED_VERSION}."
echo " Eine andere Version kann data/ (surrealkv-Manifest) beschädigen."
echo " Vor einem Upgrade: ./start.sh stop && surreal export (Backup), dann ADR-001 aktualisieren."
read -r -p " Trotzdem starten? [j/N] " answer
[[ "$answer" =~ ^[jJyY]$ ]] || exit 1
fi
}
wait_for_port() {
local port=$1 tries=${2:-30}
for ((i=1; i<=tries; i++)); do
if ss -tlnp 2>/dev/null | grep -qE ":${port}\b"; then
return 0
fi
sleep 1
done
return 1
}
start_db() {
check_surreal_version
echo "🗄️ Starte SurrealDB ..."
setsid surreal start --bind 127.0.0.1:8000 --user root --pass root "surrealkv://${DATA_DIR}" \
> "${LOG_DIR}/surreal.log" 2>&1 &
local PID=$!
disown $PID 2>/dev/null || true
echo $PID > "$DB_PID_FILE"
if wait_for_port 8000 30; then
echo "✅ SurrealDB läuft auf ws://localhost:8000"
else
echo "❌ SurrealDB konnte nicht gestartet werden. Logs: ${LOG_DIR}/surreal.log"
exit 1
fi
}
start_dev() {
echo "🚀 Starte Vite Dev-Server ..."
cd "$PROJECT_DIR"
setsid npm run dev > "${LOG_DIR}/vite.log" 2>&1 &
local PID=$!
disown $PID 2>/dev/null || true
echo $PID > "$DEV_PID_FILE"
echo "⏳ Vite startet (prüfe in 3-5 Sekunden auf http://localhost:5174/)"
echo " Logs: ${LOG_DIR}/vite.log"
}
stop_all() {
echo "🛑 Stoppe KAiOSS ..."
[ -f "$DB_PID_FILE" ] && { kill "$(cat "$DB_PID_FILE")" 2>/dev/null || true; rm -f "$DB_PID_FILE"; }
[ -f "$DEV_PID_FILE" ] && { kill "$(cat "$DEV_PID_FILE")" 2>/dev/null || true; rm -f "$DEV_PID_FILE"; }
fuser -k 5174/tcp 5175/tcp 5176/tcp 5177/tcp 5178/tcp 2>/dev/null || true
echo "✅ Gestoppt"
}
status() {
echo "--- KAiOSS Status ---"
ss -tlnp | grep -q ':8000' && echo "✅ SurrealDB: läuft (8000)" || echo "❌ SurrealDB: gestoppt"
ss -tlnp | grep -qE ':517[4-9]' && echo "✅ Vite: läuft" || echo "❌ Vite: gestoppt"
}
case "${1:-start}" in
start)
stop_all >/dev/null 2>&1 || true
start_db
start_dev
echo ""
echo "Logs: ${LOG_DIR}/"
echo "Stoppen: ${PROJECT_DIR}/start.sh stop"
;;
stop)
stop_all
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac