web_aku / dev.ps1
ikhsanmlnn's picture
first commit
2c38fa9
Raw
History Blame Contribute Delete
3.11 kB
$ErrorActionPreference = 'Stop'
# Paths (relative to this script location)
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
$Backend = Join-Path $Root 'backend'
$Frontend = Join-Path $Root 'frontend'
$VenvDir = Join-Path $Backend '.venv'
$VenvPy = Join-Path $VenvDir 'Scripts/python.exe'
function Resolve-PythonLauncher {
# First, try the py launcher without version specifier
$pyCmd = Get-Command py -ErrorAction SilentlyContinue
if ($pyCmd) {
try {
& py -c "import sys; exit(0 if sys.version_info >= (3, 10) else 1)" 2>$null
if ($LASTEXITCODE -eq 0) {
return "py"
}
} catch {}
}
# Try python command directly
$pythonCmd = Get-Command python -ErrorAction SilentlyContinue
if ($pythonCmd) {
try {
& python -c "import sys; exit(0 if sys.version_info >= (3, 10) else 1)" 2>$null
if ($LASTEXITCODE -eq 0) {
return "python"
}
} catch {}
}
throw "Python tidak ditemukan di PATH. Install Python 3.10+ dan centang 'Install launcher for all users / Add to PATH'."
}
$PyLauncher = Resolve-PythonLauncher
Write-Host "[DEV] Python launcher yang digunakan: $PyLauncher" -ForegroundColor Cyan
Write-Host "[DEV] Root: $Root" -ForegroundColor Cyan
# 1) Ensure Python venv exists (Python 3.12 recommended)
if (-not (Test-Path $VenvPy)) {
Write-Host "[DEV] Membuat virtualenv backend (.venv)" -ForegroundColor Yellow
pushd $Backend
Invoke-Expression "$PyLauncher -m venv .venv"
popd
}
# 2) Sinkronisasi dependency backend setiap menjalankan dev
Write-Host "[DEV] Memastikan dependency backend terpasang (pip install -r requirements.txt)" -ForegroundColor Yellow
& $VenvPy -m pip install --upgrade pip | Out-Null
& $VenvPy -m pip install -r (Join-Path $Backend 'requirements.txt')
# 3) Start backend in a new PowerShell window (blok terpisah)
Write-Host "[DEV] Menjalankan backend (uvicorn)..." -ForegroundColor Green
$BackendProc = Start-Process -FilePath $VenvPy `
-ArgumentList @('-m','uvicorn','backend.main:app','--reload','--port','8000') `
-WorkingDirectory $Root `
-WindowStyle Normal `
-PassThru
# 3b) Wait for backend health
$healthy = $false
for ($i = 0; $i -lt 20; $i++) {
try {
$res = Invoke-WebRequest -Uri 'http://localhost:8000/health' -UseBasicParsing -TimeoutSec 2
if ($res.StatusCode -eq 200) { $healthy = $true; break }
} catch { }
Start-Sleep -Milliseconds 800
}
if (-not $healthy) {
Write-Host "[DEV][WARN] Backend belum merespons di http://localhost:8000/health" -ForegroundColor Yellow
Write-Host " Jika jendela backend menutup sendiri, coba jalankan manual:" -ForegroundColor Yellow
Write-Host " cd `"$Backend`"; .\\.venv\\Scripts\\Activate.ps1; python -m uvicorn backend.main:app --reload --port 8000" -ForegroundColor Yellow
}
# 4) Start frontend dev server in current window
Write-Host "[DEV] Menjalankan frontend (Vite 5175)" -ForegroundColor Green
pushd $Frontend
# Install deps frontend setiap kali
Write-Host "[DEV] Menginstal / menyelaraskan dependency frontend (npm install)" -ForegroundColor Yellow
npm install
npm run dev:5175
popd