param( [string]$Version = "0.1.0-experimental.4", [string]$BridgeVersion = "0.1.0-experimental.3" ) $ErrorActionPreference = "Stop" $repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path $project = Join-Path $repoRoot "companion\src\Lumi.Companion.App\Lumi.Companion.App.csproj" $outputRoot = Join-Path $repoRoot "companion\installer\output" $publishRoot = Join-Path $outputRoot "publish" $stageRoot = Join-Path $outputRoot "package" $archive = Join-Path $outputRoot "Lumi.Companion-win-x64.zip" & (Join-Path $PSScriptRoot "build-obs-bridge.ps1") -BridgeVersion $BridgeVersion Remove-Item $publishRoot, $stageRoot -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $publishRoot, $stageRoot | Out-Null $localDotnet = Join-Path $HOME ".dotnet-sdk\dotnet.exe" $dotnet = if (Test-Path $localDotnet) { $localDotnet } else { (Get-Command dotnet.exe -ErrorAction Stop).Source } $publishArguments = @("publish", "`"$project`"", "-c", "Release", "-r", "win-x64", "--self-contained", "true", "--disable-build-servers", "-o", "`"$publishRoot`"", "-p:PublishSingleFile=true", "-p:IncludeNativeLibrariesForSelfExtract=true", "-p:DebugType=None", "-p:Version=$Version") $published = Start-Process -FilePath $dotnet -ArgumentList $publishArguments -NoNewWindow -Wait -PassThru if ($published.ExitCode) { throw "Companion publish failed." } Copy-Item (Join-Path $publishRoot "Lumi.Companion.App.exe") $stageRoot Copy-Item (Join-Path $publishRoot "components") $stageRoot -Recurse Remove-Item $archive -Force -ErrorAction SilentlyContinue Compress-Archive -Path (Join-Path $stageRoot "*") -DestinationPath $archive -CompressionLevel Optimal $file = Get-Item $archive $sha = (Get-FileHash $archive -Algorithm SHA256).Hash.ToLowerInvariant() Write-Host "Published Lumi Companion $Version" Write-Host "Artifact: $archive" Write-Host "Bytes: $($file.Length)" Write-Host "SHA256: $sha"