Files
mmd-pdf/build/bundle-source.ps1
T

59 lines
2.5 KiB
PowerShell

# Called automatically by the csproj after Publish.
# Produces <AppName>-<Version>-src.zip inside the publish folder.
# PS 5.1 / PS 7 compatible. Uses git to list tracked files so bin/obj/.vs never ship.
param(
[Parameter(Mandatory)][string]$ProjectDir,
[Parameter(Mandatory)][string]$Version,
[Parameter(Mandatory)][string]$AppName,
[Parameter(Mandatory)][string]$PublishDir
)
$ErrorActionPreference = 'Stop'
$projectDirFull = (Resolve-Path $ProjectDir).Path
$publishDirFull = if ([System.IO.Path]::IsPathRooted($PublishDir)) {
$PublishDir
} else {
Join-Path $projectDirFull $PublishDir
}
if (-not (Test-Path $publishDirFull)) {
New-Item -ItemType Directory -Force -Path $publishDirFull | Out-Null
}
$zip = Join-Path $publishDirFull "$AppName-$Version-src.zip"
if (Test-Path $zip) { Remove-Item $zip -Force }
$staging = Join-Path $env:TEMP "$AppName-src-$([guid]::NewGuid())"
try {
New-Item -ItemType Directory -Force -Path $staging | Out-Null
Push-Location $projectDirFull
try {
# Exclude the landing site: it is a separate deployable, not app source, and a
# release's own exe hash can never live correctly inside the source it is built
# from (circular). Keeps the bundle buildable-app-only and free of stale site info.
$files = @(& git ls-files 2>$null | Where-Object { $_ -notlike 'pdf-landing/*' })
if ($LASTEXITCODE -ne 0 -or $files.Count -eq 0) {
Write-Warning "Source bundle skipped: git ls-files returned no tracked files (is git installed and is this a repo?)."
return
}
foreach ($f in $files) {
# A file can be tracked in git but deleted on disk (removed without `git rm`).
# Skip it instead of aborting the whole bundle.
if (-not (Test-Path $f)) { Write-Warning "Skipping tracked file missing on disk: $f"; continue }
$dst = Join-Path $staging $f
$parent = Split-Path $dst -Parent
if (-not (Test-Path $parent)) { New-Item -ItemType Directory -Force -Path $parent | Out-Null }
Copy-Item $f $dst -Force
}
$rootLicense = Join-Path $projectDirFull 'LICENSE'
if (Test-Path $rootLicense) { Copy-Item $rootLicense (Join-Path $staging 'LICENSE') -Force }
} finally {
Pop-Location
}
Compress-Archive -Path (Join-Path $staging '*') -DestinationPath $zip -Force
Write-Host "Source bundle: $zip" -ForegroundColor Green
} finally {
Remove-Item $staging -Recurse -Force -ErrorAction SilentlyContinue
}