OmniNX/scripts/build-all.ps1
niklascfw 1088935618
Scripts: add PowerShell build script
Replace umlauts with ae/oe/ue in build scripts.
2026-04-09 22:33:08 +02:00

174 lines
6.9 KiB
PowerShell

#Requires -Version 5.1
$ErrorActionPreference = 'Stop'
$ScriptDir = $PSScriptRoot
$ProjectRoot = (Resolve-Path (Join-Path $ScriptDir '..')).Path
$OutputDir = Join-Path $ProjectRoot 'output'
$StagingDir = Join-Path $ProjectRoot 'staging'
$VariantsDir = Join-Path $ProjectRoot 'variants'
$Version = (Get-Content (Join-Path $ProjectRoot 'VERSION') -Raw).Trim()
function Test-ZipExcludedPath {
param(
[Parameter(Mandatory)]
[string] $FullPath
)
$name = [System.IO.Path]::GetFileName($FullPath)
if ($name -eq '.DS_Store') { return $true }
if ($FullPath -match '(?i)[\\/]__MACOSX[\\/]|(?i)^__MACOSX[\\/]') { return $true }
if ($name -match '^\._') { return $true }
return $false
}
function New-ZipFromDirectory {
param(
[Parameter(Mandatory)]
[string] $SourceDirectory,
[Parameter(Mandatory)]
[string] $DestinationZip
)
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
$sourceResolved = (Resolve-Path -LiteralPath $SourceDirectory).Path.TrimEnd('\', '/')
if (Test-Path -LiteralPath $DestinationZip) {
Remove-Item -LiteralPath $DestinationZip -Force
}
$parent = Split-Path -Parent $DestinationZip
if (-not (Test-Path -LiteralPath $parent)) {
New-Item -ItemType Directory -Path $parent -Force | Out-Null
}
$zipStream = [System.IO.File]::Open(
$DestinationZip,
[System.IO.FileMode]::CreateNew,
[System.IO.FileAccess]::ReadWrite,
[System.IO.FileShare]::None
)
try {
$zip = [System.IO.Compression.ZipArchive]::new($zipStream, [System.IO.Compression.ZipArchiveMode]::Create)
try {
Get-ChildItem -LiteralPath $sourceResolved -Recurse -Force -File -ErrorAction SilentlyContinue | ForEach-Object {
$full = $_.FullName
if (Test-ZipExcludedPath -FullPath $full) { return }
$relative = $full.Substring($sourceResolved.Length).TrimStart('\', '/').Replace('\', '/')
[void][System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $full, $relative)
}
} finally {
$zip.Dispose()
}
} finally {
$zipStream.Dispose()
}
}
function Clear-OutputDirectory {
Write-Host 'Loesche Output-Verzeichnis...'
if (Test-Path -LiteralPath $OutputDir) {
Remove-Item -LiteralPath $OutputDir -Recurse -Force
}
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
Write-Host 'Output-Verzeichnis geloescht.'
}
function Update-ManifestVersion {
param(
[Parameter(Mandatory)]
[string] $BuildDir,
[Parameter(Mandatory)]
[string] $VariantFolderName
)
$base = Join-Path $BuildDir $VariantFolderName
$manifestPath = Join-Path $base 'config\omninx\manifest.ini'
$themePath = Join-Path $base 'config\sphaira\themes\omninx.ini'
foreach ($path in @($manifestPath, $themePath)) {
if (Test-Path -LiteralPath $path) {
$lines = Get-Content -LiteralPath $path -Encoding UTF8
$lines = $lines | ForEach-Object {
if ($_ -match '^version=') { "version=$Version" } else { $_ }
}
$lines | Set-Content -LiteralPath $path -Encoding UTF8
}
}
}
function Copy-VariantTree {
param(
[Parameter(Mandatory)]
[string] $FromVariant,
[Parameter(Mandatory)]
[string] $ToFolder
)
$src = Join-Path $VariantsDir $FromVariant
if (-not (Test-Path -LiteralPath $src)) {
throw "Variant path not found: $src"
}
Get-ChildItem -LiteralPath $src -Force | Copy-Item -Destination $ToFolder -Recurse -Force
}
function New-BuildTempDir {
$tmp = Join-Path ([System.IO.Path]::GetTempPath()) ("omninx-build-" + [Guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $tmp -Force | Out-Null
return $tmp
}
function Build-Light {
$buildDir = New-BuildTempDir
try {
Write-Host 'Baue OmniNX Light...'
Get-ChildItem -LiteralPath $StagingDir -Force | Copy-Item -Destination $buildDir -Recurse -Force
$variantPath = Join-Path $buildDir 'OmniNX Light'
New-Item -ItemType Directory -Path $variantPath -Force | Out-Null
Copy-VariantTree -FromVariant 'light' -ToFolder $variantPath
Update-ManifestVersion -BuildDir $buildDir -VariantFolderName 'OmniNX Light'
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
$zipPath = Join-Path $OutputDir "OmniNX-Light-$Version.zip"
New-ZipFromDirectory -SourceDirectory $buildDir -DestinationZip $zipPath
} finally {
Remove-Item -LiteralPath $buildDir -Recurse -Force -ErrorAction SilentlyContinue
}
}
function Build-Standard {
$buildDir = New-BuildTempDir
try {
Write-Host 'Baue OmniNX Standard...'
Get-ChildItem -LiteralPath $StagingDir -Force | Copy-Item -Destination $buildDir -Recurse -Force
$variantPath = Join-Path $buildDir 'OmniNX Standard'
New-Item -ItemType Directory -Path $variantPath -Force | Out-Null
Copy-VariantTree -FromVariant 'light' -ToFolder $variantPath
Copy-VariantTree -FromVariant 'standard' -ToFolder $variantPath
Update-ManifestVersion -BuildDir $buildDir -VariantFolderName 'OmniNX Standard'
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
$zipPath = Join-Path $OutputDir "OmniNX-Standard-$Version.zip"
New-ZipFromDirectory -SourceDirectory $buildDir -DestinationZip $zipPath
} finally {
Remove-Item -LiteralPath $buildDir -Recurse -Force -ErrorAction SilentlyContinue
}
}
function Build-Oc {
$buildDir = New-BuildTempDir
try {
Write-Host 'Baue OmniNX OC...'
Get-ChildItem -LiteralPath $StagingDir -Force | Copy-Item -Destination $buildDir -Recurse -Force
$variantPath = Join-Path $buildDir 'OmniNX OC'
New-Item -ItemType Directory -Path $variantPath -Force | Out-Null
Copy-VariantTree -FromVariant 'light' -ToFolder $variantPath
Copy-VariantTree -FromVariant 'standard' -ToFolder $variantPath
Copy-VariantTree -FromVariant 'oc' -ToFolder $variantPath
Update-ManifestVersion -BuildDir $buildDir -VariantFolderName 'OmniNX OC'
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
$zipPath = Join-Path $OutputDir "OmniNX-OC-$Version.zip"
New-ZipFromDirectory -SourceDirectory $buildDir -DestinationZip $zipPath
} finally {
Remove-Item -LiteralPath $buildDir -Recurse -Force -ErrorAction SilentlyContinue
}
}
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
Clear-OutputDirectory
Build-Light
Build-Standard
Build-Oc
Write-Host 'Alle Varianten gebaut.'