66 lines
1.6 KiB
PowerShell
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
|