-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.sh
More file actions
98 lines (88 loc) 路 3.29 KB
/
Copy pathrun.sh
File metadata and controls
98 lines (88 loc) 路 3.29 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
#!/usr/bin/env sh
# MORPHO - launcher Linux/Mac. Detecta hardware + Compose y hace el build con una
# barra de progreso animada (sin dependencias). Logs ocultos por defecto.
# ./run.sh -> lindo (barra + %), logs escondidos
# ./run.sh -v -> muestra los logs completos del build (desplegar)
VERBOSE=0
[ "$1" = "-v" ] || [ "$1" = "--verbose" ] && VERBOSE=1
echo ""
# --- Detecta Compose v2 ("docker compose") vs v1 ("docker-compose") ---
if docker compose version >/dev/null 2>&1; then
DC="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
DC="docker-compose"
else
echo "Docker Compose no encontrado. Instala Docker."
exit 1
fi
# --- Barra de 24 chars segun porcentaje ---
_bar() {
filled=$(( $1 * 24 / 100 ))
b=''; n=0
while [ "$n" -lt 24 ]; do
if [ "$n" -lt "$filled" ]; then b="${b}#"; else b="${b}."; fi
n=$(( n + 1 ))
done
printf '%s' "$b"
}
# --- Build del backend con barra animada. $@ = args de compose (-f ...). ---
build_pretty() {
if [ "$VERBOSE" = "1" ]; then
$DC "$@" build backend || exit 1
return
fi
LOG=$(mktemp 2>/dev/null || echo /tmp/morpho_build.log)
( $DC "$@" build backend >"$LOG" 2>&1; echo "MORPHO_EXIT=$?" >>"$LOG" ) &
pid=$!
spin='|/-\'
i=0; start=$(date +%s); pct=0
while kill -0 "$pid" 2>/dev/null; do
# Solo backend -> tokens [M/N] monotonos. Tomamos el ultimo y nunca retrocede.
step=$(grep -oE '[0-9]+/[0-9]+\]' "$LOG" 2>/dev/null | tail -1)
if [ -n "$step" ]; then
m=${step%/*}; n=${step#*/}; n=${n%]}
if [ "$n" -gt 0 ] 2>/dev/null; then
new=$(( m * 100 / n ))
[ "$new" -gt "$pct" ] && pct=$new
fi
fi
el=$(( $(date +%s) - start ))
c=$(printf '%s' "$spin" | cut -c $(( i % 4 + 1 )))
printf '\r %s build [%s] %3d%% %ss ' "$c" "$(_bar "$pct")" "$pct" "$el"
i=$(( i + 1 )); sleep 0.2
done
printf '\r\033[K'
code=$(grep -oE 'MORPHO_EXIT=[0-9]+' "$LOG" | tail -1 | cut -d= -f2)
if [ "$code" = "0" ]; then
printf ' \033[32m鉁揬033[0m build completo (%ss)\n' "$(( $(date +%s) - start ))"
rm -f "$LOG"
else
printf ' \033[31m鉁梊033[0m el build fallo. Ultimas lineas:\n\n'
tail -25 "$LOG"
exit 1
fi
}
# Limpia contenedores previos (evita "container name already in use" y deja el
# front nuevo en uso). down por nombre de proyecto, sin importar con que -f se creo.
$DC down --remove-orphans >/dev/null 2>&1
# Frontend: trivial y rapido, sin barra.
printf ' preparando frontend...'
if $DC build frontend >/dev/null 2>&1; then printf '\r\033[K'; else printf '\n fallo el build del frontend\n'; exit 1; fi
echo "MORPHO - detectando hardware..."
# 1) NVIDIA 2) AMD ROCm (experimental, Linux) 3) CPU (lento)
if docker run --rm --gpus all hello-world >/dev/null 2>&1; then
echo " GPU NVIDIA detectada -> con GPU"
build_pretty -f docker-compose.yml -f docker-compose.gpu.yml
$DC -f docker-compose.yml -f docker-compose.gpu.yml up -d
elif [ -e /dev/kfd ]; then
echo " GPU AMD (ROCm, experimental) -> con GPU"
build_pretty -f docker-compose.yml -f docker-compose.amd.yml
$DC -f docker-compose.yml -f docker-compose.amd.yml up -d
else
echo " Sin GPU -> CPU (la generacion sera lenta)"
build_pretty
$DC up -d
fi
echo ""
echo "Abri -> http://localhost:8080"
echo "Logs -> $DC logs -f backend (ver build completo: ./run.sh -v)"