79 lines
3.2 KiB
PowerShell
79 lines
3.2 KiB
PowerShell
# This script builds the Angular project for the Portmaster application and packages it into a zip file.
|
|
# The script assumes that all necessary dependencies are installed and available.
|
|
# Output file: dist/portmaster.zip
|
|
|
|
[CmdletBinding()]
|
|
param (
|
|
[Parameter(Mandatory=$false)]
|
|
[Alias("d")]
|
|
[switch]$Development,
|
|
|
|
[Parameter(Mandatory=$false)]
|
|
[Alias("i")]
|
|
[switch]$Interactive
|
|
)
|
|
|
|
# Store original directory and find project root
|
|
$originalDir = Get-Location
|
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$projectRoot = (Get-Item $scriptDir).Parent.Parent.Parent.FullName
|
|
|
|
try {
|
|
# Create output directory
|
|
$outputDir = Join-Path $scriptDir "dist"
|
|
New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
|
|
|
|
# Navigate to Angular project
|
|
Set-Location (Join-Path $projectRoot "desktop\angular")
|
|
|
|
# npm install - always run in non-interactive mode, ask in interactive mode
|
|
if (!$Interactive -or (Read-Host "Run 'npm install'? (Y/N, default: Y)") -notmatch '^[Nn]$') {
|
|
npm install
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
}
|
|
|
|
# build libs - always run in non-interactive mode, ask in interactive mode
|
|
if (!$Interactive -or (Read-Host "Build shared libraries? (Y/N, default: Y)") -notmatch '^[Nn]$') {
|
|
if ($Development) {
|
|
Write-Host "Building shared libraries in development mode" -ForegroundColor Yellow
|
|
npm run build-libs:dev
|
|
} else {
|
|
Write-Host "Building shared libraries in production mode" -ForegroundColor Yellow
|
|
npm run build-libs
|
|
}
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
}
|
|
|
|
# Build Angular project
|
|
if ($Development) {
|
|
Write-Host "Building Angular project in development mode" -ForegroundColor Yellow
|
|
ng build --configuration development --base-href /ui/modules/portmaster/ portmaster
|
|
} else {
|
|
Write-Host "Building Angular project in production mode" -ForegroundColor Yellow
|
|
ng build --configuration production --base-href /ui/modules/portmaster/ portmaster
|
|
}
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
|
|
# Create zip archive
|
|
Write-Host "Creating zip archive" -ForegroundColor Yellow
|
|
Set-Location dist
|
|
$destinationZip = Join-Path $outputDir "portmaster.zip"
|
|
if ($PSVersionTable.PSVersion.Major -ge 5) {
|
|
# Option 1: Use .NET Framework directly (faster than Compress-Archive)
|
|
Write-Host "Using System.IO.Compression for faster archiving" -ForegroundColor Yellow
|
|
if (Test-Path $destinationZip) { Remove-Item $destinationZip -Force } # Remove existing zip if it exists
|
|
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
|
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
|
|
[System.IO.Compression.ZipFile]::CreateFromDirectory((Get-Location), $destinationZip, $compressionLevel, $false)
|
|
}
|
|
else {
|
|
# Fall back to Compress-Archive
|
|
Compress-Archive -Path * -DestinationPath $destinationZip -Force
|
|
}
|
|
|
|
Write-Host "Build completed successfully: $(Join-Path $outputDir "portmaster.zip")" -ForegroundColor Green
|
|
}
|
|
finally {
|
|
# Return to original directory - this will execute even if Ctrl+C is pressed
|
|
Set-Location $originalDir
|
|
} |