Files
logistics_support_tool/scripts/createZip.ps1

111 lines
3.8 KiB
PowerShell

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$rootDir = Join-Path $scriptDir ".."
$packageJsonPath = Join-Path $rootDir "package.json"
$env:GOOS = "windows"
$env:GOARCH = "amd64"
$keepReleases = 10
function Get-PackageVersion {
param (
[string]$packageJsonPath
)
if (-not (Test-Path $packageJsonPath)) {
Write-Warning "package.json not found at $packageJsonPath"
return $null
}
$jsonContent = Get-Content $packageJsonPath -Raw
try {
$json = $jsonContent | ConvertFrom-Json
return $json.version
}
catch {
Write-Warning "Failed to parse package.json: $_"
return $null
}
}
$version = Get-PackageVersion -packageJsonPath $packageJsonPath
Write-Host "Project version from package.json is: $version"
$buildNumberFile = Join-Path $rootDir "BUILD_NUMBER"
if (Test-Path $buildNumberFile) {
$buildNumber = Get-Content $buildNumberFile -Raw
$buildNumber = $buildNumber.Trim()
Write-Host "Current build number: $buildNumber"
} else {
Write-Warning "BUILD_NUMBER file not found at $buildNumberFile"
}
$releaseFolder = Join-Path $rootDir "releases"
$zipName = "release-v$version-$buildNumber.zip"
$zipPath = Join-Path $releaseFolder $zipName
if (-not (Test-Path $releaseFolder)) {
New-Item -ItemType Directory -Path $releaseFolder | Out-Null
}
# Remove zip if it already exists
if (Test-Path $zipPath) {
Write-Host "Removing existing zip: $zipPath"
Remove-Item $zipPath -Force
}
# Clean up older release files (keep only newest X)
$existingZips = Get-ChildItem -Path $releaseFolder -Filter "release-*.zip" | Sort-Object LastWriteTime -Descending
if ($existingZips.Count -gt $keepReleases) {
$toRemove = $existingZips | Select-Object -Skip $keepReleases
foreach ($file in $toRemove) {
Write-Host "Deleting old release: $($file.Name)"
Remove-Item $file.FullName -Force
}
}
Write-Host "`nPackaging release: $($zipName)"
# Create a temporary staging directory
$tempStageDir = New-Item -ItemType Directory -Path (Join-Path $env:TEMP "lst_staging") -Force
# Copy files to organized structure
$filesToCopy = @(
@{ Source = "backend\lst_backend.exe"; Destination = "app\lst_backend.exe" },
@{ Source = "backend\docs"; Destination = "app\docs\" },
@{ Source = "backend\frontend"; Destination = "app\frontend\" },
@{ Source = "LstWrapper\publish"; Destination = "lstwrapper\" },
#@{ Source = "frontend\.nitro"; Destination = "frontend\.nitro" },
#@{ Source = "frontend\.tanstack"; Destination = "frontend\.tanstack" },
#@{ Source = "frontend\.output"; Destination = "frontend\.output" },
#@{ Source = "frontend\public"; Destination = "frontend\public" },
@{ Source = "package.json"; Destination = "package.json" },
@{ Source = "CHANGELOG.md"; Destination = "CHANGELOG.md" },
@{ Source = "README.md"; Destination = "README.md" },
# scripts to be copied over
@{ Source = "scripts\tmp"; Destination = "tmp" }
@{ Source = "scripts\iisControls.ps1"; Destination = "scripts\iisControls.ps1" }
# docs
# @{ Source = "lst-docs\build"; Destination = "lst-docs\build" }
)
foreach ($file in $filesToCopy) {
$destPath = Join-Path $tempStageDir $file.Destination
New-Item -ItemType Directory -Path (Split-Path $destPath -Parent) -Force | Out-Null
Copy-Item -Path $file.Source -Destination $destPath -Recurse -Force
}
# Create the zip from the staged directory
Compress-Archive -Path "$tempStageDir\*" -DestinationPath $zipPath
# Clean up temporary directory
Remove-Item $tempStageDir -Recurse -Force
Write-Host "`nRelease package created at: $($zipPath)"
Write-Host "Organized structure:"
Write-Host "- backend/"
Write-Host "- frontend/"
Write-Host "- lstwrapper/"
Write-Host "- scripts/"
Write-Host "- CHANGELOG.md"
Write-Host "- README.md"