#!/bin/bash SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PARENT_DIR="$(dirname "$SCRIPT_DIR")" EXAMPLES_DIR="$SCRIPT_DIR/examples" PROJECT_NAME="$(basename "$PARENT_DIR")" case "$1" in init) echo "โœจ === Elemes Quick Start === โœจ" echo "" # .env if [ -f "$PARENT_DIR/.env" ]; then echo "โœ… [Skip] .env sudah ada" else cp "$EXAMPLES_DIR/../.env.example" "$PARENT_DIR/.env" echo "๐Ÿ“ [Buat] .env (pastikan untuk edit sesuai kebutuhanmu)" fi # content/ if [ -d "$PARENT_DIR/content" ] && [ "$(ls -A "$PARENT_DIR/content" 2>/dev/null)" ]; then echo "โœ… [Skip] Folder content/ sudah ada" else mkdir -p "$PARENT_DIR/content" cp -n "$EXAMPLES_DIR/content/"*.md "$PARENT_DIR/content/" echo "๐Ÿ“ [Buat] Folder content/ ($(ls "$PARENT_DIR/content/"*.md 2>/dev/null | wc -l) materi contoh ditambahkan)" fi # assets/ if [ -d "$PARENT_DIR/assets" ]; then echo "โœ… [Skip] Folder assets/ sudah ada" else mkdir -p "$PARENT_DIR/assets" echo "๐Ÿ“ [Buat] Folder assets/ (untuk menyimpan file gambar/media)" fi # state/ (untuk Tailscale tun/state) if [ -d "$PARENT_DIR/state" ]; then echo "โœ… [Skip] Folder state/ sudah ada" else mkdir -p "$PARENT_DIR/state" echo "๐Ÿ” [Buat] Folder state/ (untuk Tailscale credentials & state)" fi # tokens if [ -f "$PARENT_DIR/tokens_siswa.csv" ]; then echo "โœ… [Skip] tokens_siswa.csv sudah ada" else cp "$EXAMPLES_DIR/tokens_siswa.csv" "$PARENT_DIR/tokens_siswa.csv" echo "๐Ÿ‘ฅ [Buat] tokens_siswa.csv (edit untuk menambah data siswa asli)" fi echo "" echo "๐ŸŽฏ Selesai! Langkah selanjutnya yang direkomendasikan:" echo " ๐Ÿ‘‰ 1. Edit file ../.env sesuai dengan kebutuhan environment-mu" echo " ๐Ÿ‘‰ 2. Edit ../content/home.md untuk menyusun daftar materi" echo " ๐Ÿ‘‰ 3. Edit ../tokens_siswa.csv untuk mendaftarkan akun siswa" echo " ๐Ÿš€ 4. Jalankan: ./elemes.sh runbuild" echo "" ;; stop | run | runbuild | runclearbuild) echo "๐Ÿ›‘ Menghentikan container yang sedang berjalan..." podman-compose -p "$PROJECT_NAME" --env-file ../.env down ;;& stop) echo "โœ… Container berhasil dihentikan." ;; runclearbuild) echo "๐Ÿงน Membersihkan container dan image (prune)..." podman image prune -f echo "๐Ÿ—๏ธ Membangun ulang container dari awal (no-cache)..." podman-compose -p "$PROJECT_NAME" --env-file ../.env build --no-cache ;;& runbuild) echo "๐Ÿ—๏ธ Membangun container..." podman-compose -p "$PROJECT_NAME" --env-file ../.env build ;;& runbuild | runclearbuild) echo "๐Ÿš€ Menjalankan container di background..." podman-compose -p "$PROJECT_NAME" --env-file ../.env up --force-recreate -d echo "โœ… Elemes berhasil dijalankan!" ;; run) echo "๐Ÿš€ Menjalankan container..." podman-compose -p "$PROJECT_NAME" --env-file ../.env up -d echo "โœ… Elemes berhasil dijalankan!" ;; generatetoken) echo "๐Ÿ”„ Melakukan sinkronisasi tokens_siswa.csv dari materi yang ada..." python3 "$SCRIPT_DIR/generate_tokens.py" ;; exportall) echo "๐Ÿ“ฆ === Mengekspor Semua Image (Pre-Compiled Bundle) ===" TAR_FILE="lms-c-precompiled.tar" echo "๐Ÿ—๏ธ 1. Mem-build Backend Elemes..." podman build -t lms-c-backend -f Dockerfile . echo "๐Ÿ—๏ธ 2. Mem-build Frontend Elemes (SvelteKit)..." podman build -t lms-c-frontend -f frontend/Dockerfile frontend echo "๐Ÿ—๏ธ 3. Mem-build Velxio Simulator..." podman build -t lms-c-velxio -f velxio/Dockerfile.standalone --build-arg ENABLE_ESP32=${ENABLE_ESP32:-0} velxio echo "๐Ÿ’พ Menyatukan semua image menjadi 1 file tar: $TAR_FILE..." podman save -o $TAR_FILE lms-c-backend lms-c-frontend lms-c-velxio if [ $? -eq 0 ]; then echo "โœ… Selesai! File '$TAR_FILE' siap di-upload ke VPS." echo " Di VPS, jalankan: podman load -i $TAR_FILE" echo " (Jangan lupa set image di podman-compose.yml VPS sesuai nama image di atas)" else echo "โŒ Export gagal." fi ;; importall) echo "๐Ÿ“ฆ === Mengimpor Semua Image (Pre-Compiled Bundle) ===" TAR_FILE="lms-c-precompiled.tar" echo "๐Ÿ’พ Mengimpor image dari file $TAR_FILE..." podman load -i $TAR_FILE echo "โœ… Selesai! Image berhasil diimpor." ;; loadtest) echo "๐Ÿ“Š === Elemes Load Testing ===" cd "$SCRIPT_DIR/load-test" || exit if [ ! -d "env" ]; then echo "โš™๏ธ Membuat Python Virtual Environment (env/)..." python3 -m venv env fi echo "โš™๏ธ Mengaktifkan environment & menginstall requirements..." source env/bin/activate pip install -r requirements.txt > /dev/null 2>&1 echo "โš™๏ธ Mempersiapkan Test Data & menginjeksi akun Bot..." python3 content_parser.py --num-tokens 50 echo "" echo "๐Ÿš€ Memulai Locust Test Suite..." echo "๐Ÿ‘‰ Buka http://localhost:8089 di browser web milikmu." echo "๐Ÿ‘‰ Masukkan URL backend Elemes sebagai Host (contoh: http://localhost:5000)" echo "๐Ÿ‘‰ Tekan CTRL+C di terminal ini untuk menghentikan test." echo "" locust -f locustfile.py ;; *) echo "๐Ÿ’ก Cara Penggunaan elemes.sh:" echo " ./elemes.sh init # Inisialisasi konfigurasi, folder, & data tokens" echo " ./elemes.sh run # Menjalankan container LMS yang sudah ada" echo " ./elemes.sh runbuild # Build image lalu jalankan container" echo " ./elemes.sh runclearbuild # Bersihkan cache, Re-build total, lalu jalankan" echo " ./elemes.sh stop # Menghentikan container yang sedang berjalan" echo " ./elemes.sh generatetoken # Sinkronisasi kolom tokens CSV sesuai file markdown" echo " ./elemes.sh exportall # Build & Export semua image LMS (Backend, Frontend, Velxio) jadi satu file tar" echo " ./elemes.sh loadtest # Menjalankan utilitas simulasi Load Test (Locust)" ;; esac