Files

85 lines
3.0 KiB
PowerShell

<#
.SYNOPSIS
Publiceert MijnBesluit.Web en pakt het resultaat in als één zip-bestand.
.DESCRIPTION
Draai dit op je ontwikkelmachine. Het resultaat is D:\MijnBesluit VS\MijnBesluitpublish\mijnbesluit.zip.
Dat bestand pak je op de server uit met Uitrollen.ps1.
.EXAMPLE
.\tools\Publiceren.ps1
.\tools\Publiceren.ps1 -Uitvoer 'D:\MijnBesluit VS\MijnBesluitpublish' -Configuratie Release
#>
[CmdletBinding()]
param(
# Map waarin de publicatie en het zip-bestand terechtkomen.
[string] $Uitvoer = 'D:\MijnBesluit VS\MijnBesluitpublish',
# Release voor de server, Debug alleen om iets te onderzoeken.
[ValidateSet('Release', 'Debug')]
[string] $Configuratie = 'Release',
# Sla het inpakken over als je de losse bestanden wilt hebben.
[switch] $GeenZip
)
$ErrorActionPreference = 'Stop'
# De projectmap is de map boven deze scriptmap.
$Project = Join-Path (Split-Path $PSScriptRoot -Parent) 'src\MijnBesluit.Web'
$DoelMap = Join-Path $Uitvoer 'mijnbesluit'
$ZipPad = Join-Path $Uitvoer 'mijnbesluit.zip'
if (-not (Test-Path $Project)) {
throw "Projectmap niet gevonden: $Project. Draai dit script vanuit de map tools van het project."
}
Write-Host ''
Write-Host 'MijnBesluit publiceren' -ForegroundColor Cyan
Write-Host " Project : $Project"
Write-Host " Configuratie : $Configuratie"
Write-Host " Uitvoer : $DoelMap"
Write-Host ''
# Schoon beginnen: anders blijven bestanden van een vorige versie achter die nu niet meer
# bestaan, en die worden dan mee uitgerold.
if (Test-Path $DoelMap) {
Write-Host 'Vorige publicatie opruimen...'
Remove-Item $DoelMap -Recurse -Force
}
Write-Host 'Publiceren...' -ForegroundColor Cyan
dotnet publish $Project -c $Configuratie -o $DoelMap --nologo
if ($LASTEXITCODE -ne 0) { throw 'Publiceren is mislukt. Zie de fouten hierboven.' }
# Controle: zonder deze twee bestanden start de site niet onder IIS.
foreach ($nodig in @('MijnBesluit.Web.dll', 'web.config')) {
if (-not (Test-Path (Join-Path $DoelMap $nodig))) {
throw "Er ontbreekt iets in de publicatie: $nodig"
}
}
# appsettings.Development.json hoort niet op een server thuis.
$ontwikkel = Join-Path $DoelMap 'appsettings.Development.json'
if (Test-Path $ontwikkel) {
Remove-Item $ontwikkel -Force
Write-Host 'appsettings.Development.json verwijderd uit de publicatie.'
}
if (-not $GeenZip) {
Write-Host 'Inpakken...' -ForegroundColor Cyan
if (Test-Path $ZipPad) { Remove-Item $ZipPad -Force }
Compress-Archive -Path (Join-Path $DoelMap '*') -DestinationPath $ZipPad -CompressionLevel Optimal
}
$grootte = if (Test-Path $ZipPad) { '{0:N1} MB' -f ((Get-Item $ZipPad).Length / 1MB) } else { '-' }
Write-Host ''
Write-Host 'Klaar.' -ForegroundColor Green
Write-Host " Map : $DoelMap"
if (-not $GeenZip) { Write-Host " Zip : $ZipPad ($grootte)" }
Write-Host ''
Write-Host 'Nu op de server, in een PowerShell-venster als administrator:' -ForegroundColor Yellow
Write-Host " .\Uitrollen.ps1 -Zip '\\tsclient\$($ZipPad.Substring(0,1))\$($ZipPad.Substring(3))'"
Write-Host ''