MeshiTrack/deploy.ps1

66 lines
1.6 KiB
PowerShell

#Requires -Version 5.1
<#
.SYNOPSIS
Rebuild and redeploy MeshiTrack Docker images.
.PARAMETER Services
One or more services to rebuild. Defaults to 'api' and 'web'.
Valid values: api, web
.PARAMETER NoCache
Pass --no-cache to docker compose build.
.PARAMETER Target
Build target: 'development' (default) or 'production'.
.EXAMPLE
.\deploy.ps1
.\deploy.ps1 -Services api
.\deploy.ps1 -NoCache
.\deploy.ps1 -Target production -NoCache
#>
param(
[ValidateSet('api', 'web')]
[string[]]$Services = @('api', 'web'),
[switch]$NoCache,
[ValidateSet('development', 'production')]
[string]$Target = 'development'
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ComposeFile = Join-Path $PSScriptRoot 'docker\docker-compose.yml'
if (-not (Test-Path $ComposeFile)) {
Write-Error "docker-compose.yml not found at: $ComposeFile"
exit 1
}
$BuildArgs = @('compose', '-f', $ComposeFile, 'build', '--build-arg', "target=$Target")
if ($NoCache) {
$BuildArgs += '--no-cache'
}
$BuildArgs += $Services
Write-Host "Building: $($Services -join ', ') [target=$Target$(if ($NoCache) { ', no-cache' })]"
& docker @BuildArgs
if ($LASTEXITCODE -ne 0) {
Write-Error "docker compose build failed (exit $LASTEXITCODE)"
exit $LASTEXITCODE
}
$UpArgs = @('compose', '-f', $ComposeFile, 'up', '-d', '--force-recreate')
$UpArgs += $Services
Write-Host "Deploying: $($Services -join ', ')"
& docker @UpArgs
if ($LASTEXITCODE -ne 0) {
Write-Error "docker compose up failed (exit $LASTEXITCODE)"
exit $LASTEXITCODE
}
Write-Host "Done. Running containers:"
& docker compose -f $ComposeFile ps