feat: add automated deployment ZIP creation with PowerShell script

- Add create-deployment-zip.ps1 script for automated ZIP packaging
- Include npm scripts: build:deploy and create-zip for streamlined deployment
- Fix PowerShell encoding issues by replacing emojis with text labels
- Automatically package production-ready files: .next, public, .env.production, server.js, etc.
- ZIP filename uses package.json name and version (e.g., nodemap-1.1.305.zip)
- Add file existence validation and detailed logging for deployment process
- Clean temporary files after ZIP creation

The script creates a complete deployment package (84MB) containing all necessary
files for production deployment, streamlining the build and packaging workflow.
This commit is contained in:
ISA
2025-07-29 08:35:13 +02:00
parent 4755cefdd7
commit 6d33be56c0
6 changed files with 112 additions and 5 deletions

View File

@@ -0,0 +1,105 @@
# PowerShell Script to create deployment ZIP after successful build
param(
[string]$ProjectRoot = $PSScriptRoot + "\.."
)
# Read package.json to get name and version
$packageJsonPath = Join-Path $ProjectRoot "package.json"
$packageJson = Get-Content $packageJsonPath | ConvertFrom-Json
$projectName = $packageJson.name
$version = $packageJson.version
# Create ZIP filename
$zipFileName = "${projectName}-${version}.zip"
$zipPath = Join-Path $ProjectRoot $zipFileName
# Remove existing ZIP if it exists
if (Test-Path $zipPath) {
Remove-Item $zipPath -Force
Write-Host "[DELETE] Removed existing ZIP: $zipFileName" -ForegroundColor Yellow
}
# Define files and directories to include
$itemsToInclude = @(
".next",
"public",
".env.production",
"server.js",
"nssm.exe",
"nssm.exe Installation.md",
"package.json",
"package-lock.json",
"Start-Dev.ps1",
"StartNodeApp.bat"
)
# Check which items exist
$existingItems = @()
foreach ($item in $itemsToInclude) {
$itemPath = Join-Path $ProjectRoot $item
if (Test-Path $itemPath) {
$existingItems += $item
Write-Host "[FOUND] $item" -ForegroundColor Green
} else {
Write-Host "[MISSING] $item" -ForegroundColor Yellow
}
}
if ($existingItems.Count -eq 0) {
Write-Host "[ERROR] No items found to include in ZIP!" -ForegroundColor Red
exit 1
}
# Create temporary directory for ZIP contents
$tempDir = Join-Path $ProjectRoot "temp-deployment"
if (Test-Path $tempDir) {
Remove-Item $tempDir -Recurse -Force
}
New-Item -ItemType Directory -Path $tempDir | Out-Null
# Copy items to temporary directory
foreach ($item in $existingItems) {
$sourcePath = Join-Path $ProjectRoot $item
$destPath = Join-Path $tempDir $item
if (Test-Path $sourcePath -PathType Container) {
# It's a directory
Copy-Item $sourcePath $destPath -Recurse -Force
Write-Host "[COPY DIR] $item" -ForegroundColor Cyan
} else {
# It's a file
Copy-Item $sourcePath $destPath -Force
Write-Host "[COPY FILE] $item" -ForegroundColor Cyan
}
}
# Create ZIP file
try {
Write-Host "[CREATE] Creating ZIP: $zipFileName..." -ForegroundColor Blue
# Use .NET compression to create ZIP
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($tempDir, $zipPath)
# Get ZIP file size
$zipSize = (Get-Item $zipPath).Length
$zipSizeMB = [math]::Round($zipSize / 1MB, 2)
Write-Host "[SUCCESS] Successfully created deployment ZIP!" -ForegroundColor Green
Write-Host "[FILE] $zipFileName" -ForegroundColor White
Write-Host "[SIZE] $zipSizeMB MB" -ForegroundColor White
Write-Host "[LOCATION] $zipPath" -ForegroundColor White
} catch {
Write-Host "[ERROR] Failed to create ZIP: $($_.Exception.Message)" -ForegroundColor Red
exit 1
} finally {
# Clean up temporary directory
if (Test-Path $tempDir) {
Remove-Item $tempDir -Recurse -Force
Write-Host "[CLEANUP] Cleaned up temporary files" -ForegroundColor Gray
}
}
Write-Host ""
Write-Host "[COMPLETE] Deployment ZIP ready for production deployment!" -ForegroundColor Green