# VibeFinance dev script (PowerShell) # Lokale development cyclus: bouwen, starten, stoppen en optioneel pushen # naar de dev-registry. Gebruikt altijd de -dev images en tags. # # Gebruik: # .\dev.ps1 # build + herstart containers # .\dev.ps1 build # alleen lokaal bouwen # .\dev.ps1 build -Target backend # alleen backend bouwen # .\dev.ps1 build -Target frontend # alleen frontend bouwen # .\dev.ps1 up # build + herstart containers # .\dev.ps1 up -Target backend # alleen backend bouwen + herstart # .\dev.ps1 up -Target frontend # alleen frontend bouwen + herstart # .\dev.ps1 down # containers stoppen en volumes verwijderen # .\dev.ps1 push # multi-platform build + push naar registry # .\dev.ps1 push -Target backend # alleen backend multi-platform pushen # .\dev.ps1 push -Target frontend # alleen frontend multi-platform pushen # # Vereisten: # - Docker Desktop actief # - Voor 'push': ingelogd op registry via: docker login # - Voor 'push': docker buildx builder actief (docker buildx create --use) # - root package.json bevat het versienummer (bijv. "1.0.0-dev") param( [ValidateSet("build","up","down","push")] [string]$Action = "up", [ValidateSet("both","frontend","backend")] [string]$Target = "both" ) $ErrorActionPreference = "Stop" # ============================================================================= # PROJECTCONFIGURATIE - pas alleen dit blok aan voor een nieuw project # ============================================================================= $appName = "VibeFinance" $registry = "10.0.3.108:3000/vibe" $backendImage = "vibefinance-backend" $frontendImage = "vibefinance-frontend" $apiUrl = "/api" # ============================================================================= # Versie uit root package.json $rootPkg = Get-Content (Join-Path $PSScriptRoot "package.json") -Raw | ConvertFrom-Json $appVersion = $rootPkg.version $repoUrl = if ($rootPkg.repository) { $rootPkg.repository } else { "" } $updateCheckUrl = if ($rootPkg.updateCheckUrl) { $rootPkg.updateCheckUrl } else { "" } if (-not $appVersion) { Write-Error "Kon versienummer niet lezen uit package.json" exit 1 } $env:VERSION = $appVersion $env:VITE_APP_VERSION = $appVersion if (-not $env:POSTGRES_PASSWORD) { $env:POSTGRES_PASSWORD = "devpassword" } # Versie synchroniseren naar frontend/package.json $frontendPkgPath = Join-Path $PSScriptRoot "frontend/package.json" $frontendPkg = Get-Content $frontendPkgPath -Raw | ConvertFrom-Json $updateUrl = if ($rootPkg.updateCheckUrl) { $rootPkg.updateCheckUrl } else { "" } if ($frontendPkg.version -ne $appVersion -or $frontendPkg.updateCheckUrl -ne $updateUrl) { $frontendPkg.version = $appVersion $frontendPkg.updateCheckUrl = $updateUrl [System.IO.File]::WriteAllText($frontendPkgPath, ($frontendPkg | ConvertTo-Json -Depth 10)) Write-Host "Versie gesynchroniseerd naar frontend: $appVersion" -ForegroundColor Green } # Registry tags $backendBase = "$registry/$backendImage" $frontendBase = "$registry/$frontendImage" $backendLatestDev = "$backendBase`:latest-dev" $frontendLatestDev = "$frontendBase`:latest-dev" $backendVersionDev = "$backendBase`:$appVersion" $frontendVersionDev= "$frontendBase`:$appVersion" # Pad naar compose file $devCompose = Join-Path $PSScriptRoot "docker-compose.dev.yml" Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host " $appName Dev" -ForegroundColor Cyan Write-Host " Versie : $appVersion" -ForegroundColor Green Write-Host " Actie : $Action" -ForegroundColor Green Write-Host " Target : $Target" -ForegroundColor Green Write-Host " Registry: $registry" -ForegroundColor Green Write-Host "========================================" -ForegroundColor Cyan Write-Host "" # Functies function Invoke-BackendPush { Write-Host "Backend bouwen en pushen..." -ForegroundColor White docker buildx build ` --platform linux/amd64,linux/arm64 ` --push ` -t $backendLatestDev ` -t $backendVersionDev ` --build-arg APP_VERSION=$appVersion ` (Join-Path $PSScriptRoot "backend") if ($LASTEXITCODE -ne 0) { throw "Backend build mislukt" } Write-Host "Gepusht: $backendVersionDev" -ForegroundColor Green } function Invoke-FrontendPush { Write-Host "Frontend bouwen en pushen..." -ForegroundColor White docker buildx build ` --platform linux/amd64,linux/arm64 ` --push ` -t $frontendLatestDev ` -t $frontendVersionDev ` --build-arg APP_VERSION=$appVersion ` --build-arg VITE_API_URL=$apiUrl ` --build-arg VITE_REPO_URL=$repoUrl ` --build-arg VITE_UPDATE_CHECK_URL=$updateCheckUrl ` (Join-Path $PSScriptRoot "frontend") if ($LASTEXITCODE -ne 0) { throw "Frontend build mislukt" } Write-Host "Gepusht: $frontendVersionDev" -ForegroundColor Green } function Invoke-Push { Write-Host "-- Multi-platform bouwen en pushen -------" -ForegroundColor Cyan if ($Target -eq "both" -or $Target -eq "backend") { Invoke-BackendPush } if ($Target -eq "both" -or $Target -eq "frontend") { Invoke-FrontendPush } } # Acties switch ($Action) { "build" { Write-Host "-- Lokaal bouwen -------------------------" -ForegroundColor Cyan $services = @(if ($Target -ne "both") { $Target }) docker compose --progress plain -f $devCompose build @services if ($LASTEXITCODE -ne 0) { throw "Build mislukt" } Write-Host "" Write-Host "Build klaar - $appVersion [$Target]" -ForegroundColor Green } "up" { if ($Target -eq "both") { docker compose -f $devCompose down -v docker compose --progress plain -f $devCompose up --build -d } else { docker compose -f $devCompose stop $Target docker compose --progress plain -f $devCompose up --build -d $Target } if ($LASTEXITCODE -ne 0) { throw "Opstarten mislukt" } Write-Host "" Write-Host "$appName gestart - $appVersion [$Target]" -ForegroundColor Green } "down" { docker compose -f $devCompose down -v Write-Host "" Write-Host "$appName gestopt" -ForegroundColor Yellow } "push" { Invoke-Push Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host " Dev images gepusht: $appVersion [$Target]" -ForegroundColor Green if ($Target -eq "both" -or $Target -eq "backend") { Write-Host " $backendVersionDev" -ForegroundColor White Write-Host " $backendLatestDev" -ForegroundColor White } if ($Target -eq "both" -or $Target -eq "frontend") { Write-Host " $frontendVersionDev" -ForegroundColor White Write-Host " $frontendLatestDev" -ForegroundColor White } Write-Host "========================================" -ForegroundColor Cyan } } Write-Host ""