73 lines
3.4 KiB
PowerShell
73 lines
3.4 KiB
PowerShell
param(
|
|
[Parameter(Mandatory = $true)][string]$OutputArchive,
|
|
[Parameter(Mandatory = $true)][string]$ManifestPath
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path
|
|
$project = Join-Path $repoRoot "companion\src\Lumi.Companion.App\Lumi.Companion.App.csproj"
|
|
$outputArchive = [System.IO.Path]::GetFullPath($OutputArchive)
|
|
$manifest = [System.IO.Path]::GetFullPath($ManifestPath)
|
|
$workRoot = Join-Path ([System.IO.Path]::GetDirectoryName($outputArchive)) "work"
|
|
$publishRoot = Join-Path $workRoot "publish"
|
|
$stageRoot = Join-Path $workRoot "package"
|
|
|
|
if (!(Test-Path $manifest)) { throw "The development build manifest is missing." }
|
|
& (Join-Path $PSScriptRoot "generate-companion-icon.ps1")
|
|
Remove-Item $workRoot -Recurse -Force -ErrorAction SilentlyContinue
|
|
New-Item -ItemType Directory -Force -Path $publishRoot, $stageRoot | Out-Null
|
|
New-Item -ItemType Directory -Force -Path ([System.IO.Path]::GetDirectoryName($outputArchive)) | Out-Null
|
|
|
|
$localDotnet = Join-Path $HOME ".dotnet-sdk\dotnet.exe"
|
|
$dotnet = if (Test-Path $localDotnet) { $localDotnet } else { (Get-Command dotnet.exe -ErrorAction Stop).Source }
|
|
$arguments = @(
|
|
"publish", "`"$project`"",
|
|
"-c", "Release",
|
|
"-r", "win-x64",
|
|
"--self-contained", "true",
|
|
"--disable-build-servers",
|
|
"-o", "`"$publishRoot`"",
|
|
"-p:PublishSingleFile=true",
|
|
"-p:IncludeNativeLibrariesForSelfExtract=true",
|
|
"-p:DebugType=None"
|
|
)
|
|
$published = Start-Process -FilePath $dotnet -ArgumentList $arguments -NoNewWindow -Wait -PassThru
|
|
if ($published.ExitCode -ne 0) { throw "Companion development publish failed." }
|
|
|
|
$app = Join-Path $publishRoot "Lumi.Companion.App.exe"
|
|
if (!(Test-Path $app)) { throw "The Companion development publish did not create Lumi.Companion.App.exe." }
|
|
Copy-Item $app $stageRoot -Force
|
|
$componentsSource = Join-Path $publishRoot "components"
|
|
if (Test-Path $componentsSource) { Copy-Item $componentsSource (Join-Path $stageRoot "components") -Recurse -Force }
|
|
|
|
$legalSource = Join-Path $repoRoot "companion\legal"
|
|
$legalTarget = Join-Path $stageRoot "legal"
|
|
if (Test-Path $legalSource) {
|
|
New-Item -ItemType Directory -Force -Path $legalTarget | Out-Null
|
|
foreach ($name in @("LUMI-COMPANION-LICENCE.txt", "PRIVACY-NOTICE.txt", "THIRD-PARTY-NOTICES.txt", "LEGAL-README.txt")) {
|
|
$source = Join-Path $legalSource $name
|
|
if (Test-Path $source) { Copy-Item $source (Join-Path $legalTarget $name) -Force }
|
|
}
|
|
$thirdParty = Join-Path $legalSource "third-party"
|
|
if (Test-Path $thirdParty) { Copy-Item $thirdParty (Join-Path $legalTarget "third-party") -Recurse -Force }
|
|
}
|
|
Copy-Item $manifest (Join-Path $stageRoot ".lumi-dev-build.json") -Force
|
|
Remove-Item $outputArchive -Force -ErrorAction SilentlyContinue
|
|
$archiveItems = Get-ChildItem $stageRoot -Force | Select-Object -ExpandProperty FullName
|
|
$archiveCreated = $false
|
|
for ($attempt = 1; $attempt -le 20; $attempt++) {
|
|
try {
|
|
Compress-Archive -Path $archiveItems -DestinationPath $outputArchive -CompressionLevel Optimal -ErrorAction Stop
|
|
$archiveCreated = $true
|
|
break
|
|
}
|
|
catch {
|
|
Remove-Item $outputArchive -Force -ErrorAction SilentlyContinue
|
|
if ($attempt -eq 20) { throw }
|
|
Start-Sleep -Milliseconds 250
|
|
}
|
|
}
|
|
if (-not $archiveCreated) { throw "The Companion development archive could not be created." }
|
|
Remove-Item $workRoot -Recurse -Force -ErrorAction SilentlyContinue
|
|
Write-Host "Created localhost development update: $outputArchive"
|