Skip to content

Commit 7bf8d6a

Browse files
committed
chore: Add dev-watch.sh script for continuous development monitoring.
1 parent 7822dab commit 7bf8d6a

1 file changed

Lines changed: 103 additions & 0 deletions

File tree

scripts/dev-watch.sh

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#!/usr/bin/env bash
2+
# dev-watch.sh — Kaynak değişikliklerini izler, otomatik build alır ve uygulamayı yeniden başlatır.
3+
# Kullanım: ./scripts/dev-watch.sh
4+
# Gereksinim: sudo dnf install inotify-tools
5+
6+
set -euo pipefail
7+
8+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}"]/.." && pwd)"
9+
BUILD_DIR="${BUILD_DIR:-$ROOT_DIR/build}"
10+
BINARY="$BUILD_DIR/ro-control"
11+
APP_PID=""
12+
13+
# ─── Renk tanımları ──────────────────────────────────────────────────────────
14+
RED='\033[0;31m'
15+
GREEN='\033[0;32m'
16+
YELLOW='\033[1;33m'
17+
CYAN='\033[0;36m'
18+
BOLD='\033[1m'
19+
RESET='\033[0m'
20+
21+
log() { echo -e "${CYAN}[dev-watch]${RESET} $*"; }
22+
ok() { echo -e "${GREEN}[dev-watch]${RESET} $*"; }
23+
warn() { echo -e "${YELLOW}[dev-watch]${RESET} $*"; }
24+
err() { echo -e "${RED}[dev-watch]${RESET} $*"; }
25+
26+
# ─── Bağımlılık kontrolü ─────────────────────────────────────────────────────
27+
if ! command -v inotifywait &>/dev/null; then
28+
err "inotify-tools bulunamadı. Kurmak için:"
29+
err " sudo dnf install inotify-tools"
30+
exit 1
31+
fi
32+
33+
if [[ ! -d "$BUILD_DIR" || ! -f "$BUILD_DIR/CMakeCache.txt" ]]; then
34+
warn "Build dizini yok veya cmake yapılandırılmamış."
35+
warn "Önce şunu çalıştır: ./scripts/fedora-bootstrap.sh"
36+
exit 1
37+
fi
38+
39+
# ─── Uygulama durdurma ───────────────────────────────────────────────────────
40+
stop_app() {
41+
if [[ -n "$APP_PID" ]] && kill -0 "$APP_PID" 2>/dev/null; then
42+
log "Uygulama durduruluyor (PID: $APP_PID)..."
43+
kill "$APP_PID" 2>/dev/null || true
44+
wait "$APP_PID" 2>/dev/null || true
45+
APP_PID=""
46+
fi
47+
}
48+
49+
# ─── Build + başlat ──────────────────────────────────────────────────────────
50+
build_and_run() {
51+
echo ""
52+
log "${BOLD}Incremental build başlıyor...${RESET}"
53+
if cmake --build "$BUILD_DIR" -j"$(nproc)" 2>&1; then
54+
ok "✓ Build başarılı"
55+
stop_app
56+
log "Uygulama başlatılıyor: $BINARY"
57+
"$BINARY" &
58+
APP_PID=$!
59+
ok "✓ ro-control çalışıyor (PID: $APP_PID)"
60+
else
61+
err "✗ Build hatası — bekleniyor..."
62+
fi
63+
echo ""
64+
}
65+
66+
# ─── Temiz çıkış ─────────────────────────────────────────────────────────────
67+
cleanup() {
68+
echo ""
69+
warn "Çıkış sinyali alındı."
70+
stop_app
71+
exit 0
72+
}
73+
trap cleanup SIGINT SIGTERM
74+
75+
# ─── İlk build ve başlangıç ──────────────────────────────────────────────────
76+
echo -e "${BOLD}${CYAN}"
77+
echo "╔══════════════════════════════════════════╗"
78+
echo "║ ro-Control dev-watch modu ║"
79+
echo "╚══════════════════════════════════════════╝"
80+
echo -e "${RESET}"
81+
log "İzlenen dizin: $ROOT_DIR/src"
82+
log "Build dizini: $BUILD_DIR"
83+
log "Çıkmak için: Ctrl+C"
84+
echo ""
85+
86+
build_and_run
87+
88+
# ─── Değişiklik izleme döngüsü ───────────────────────────────────────────────
89+
inotifywait -m -r \
90+
--include '\.(cpp|h|qml|js|ts)$' \
91+
-e modify,create,delete,moved_to \
92+
--format "%w%f [%e]" \
93+
"$ROOT_DIR/src" "$ROOT_DIR/i18n" 2>/dev/null \
94+
| while IFS= read -r line; do
95+
# Birden fazla hızlı değişikliği birleştir (debounce 800ms)
96+
log "Değişiklik algılandı: $line"
97+
sleep 0.8
98+
99+
# Kuyruktaki diğer olayları boşalt
100+
while IFS= read -t 0.1 -r _extra; do :; done <&0 2>/dev/null || true
101+
102+
build_and_run
103+
done

0 commit comments

Comments
 (0)