Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -190,17 +190,11 @@ jobs:
dotnet publish src/UniGetUI/UniGetUI.csproj /noLogo /p:Configuration=Release /p:Platform=$Platform -p:RuntimeIdentifier=win-$Platform -v m
if ($LASTEXITCODE -ne 0) { throw "dotnet publish WinUI failed" }

dotnet publish src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj /noLogo /p:Configuration=Release /p:Platform=$Platform -p:RuntimeIdentifier=win-$Platform --self-contained true -v m
if ($LASTEXITCODE -ne 0) { throw "dotnet publish Avalonia failed" }

# Stage binaries
$PublishDir = "src/UniGetUI/bin/$Platform/Release/$TargetFramework/win-$Platform/publish"
$AvaloniaPublishDir = "src/UniGetUI.Avalonia/bin/$Platform/Release/$TargetFramework/win-$Platform/publish"
if (Test-Path "unigetui_bin") { Remove-Item "unigetui_bin" -Recurse -Force }
New-Item "unigetui_bin" -ItemType Directory | Out-Null
Get-ChildItem $PublishDir | Move-Item -Destination "unigetui_bin" -Force
New-Item "unigetui_bin/Avalonia" -ItemType Directory | Out-Null
Get-ChildItem $AvaloniaPublishDir | Move-Item -Destination "unigetui_bin/Avalonia" -Force

# Backward-compat alias
Copy-Item "unigetui_bin/UniGetUI.exe" "unigetui_bin/WingetUI.exe" -Force
Expand Down
10 changes: 0 additions & 10 deletions scripts/build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ $RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..")
$SrcDir = Join-Path $RepoRoot "src"
$WindowsSolution = Join-Path $SrcDir "UniGetUI.Windows.slnx"
$PublishProject = Join-Path $SrcDir "UniGetUI" "UniGetUI.csproj"
$AvaloniaPublishProject = Join-Path $SrcDir "UniGetUI.Avalonia" "UniGetUI.Avalonia.csproj"
$BinDir = Join-Path $RepoRoot "unigetui_bin"
$BuildPropsPath = Join-Path $SrcDir "Directory.Build.props"
[xml] $BuildProps = Get-Content $BuildPropsPath
Expand All @@ -52,7 +51,6 @@ if ([string]::IsNullOrWhiteSpace($PortableTargetFramework) -or [string]::IsNullO

$TargetFramework = "$PortableTargetFramework-windows$WindowsTargetPlatformVersion"
$PublishDir = Join-Path $SrcDir "UniGetUI" "bin" $Platform $Configuration $TargetFramework "win-$Platform" "publish"
$AvaloniaPublishDir = Join-Path $SrcDir "UniGetUI.Avalonia" "bin" $Platform $Configuration $TargetFramework "win-$Platform" "publish"

# --- Version stamping ---
if ($Version) {
Expand Down Expand Up @@ -84,19 +82,11 @@ if ($LASTEXITCODE -ne 0) {
throw "dotnet publish WinUI failed with exit code $LASTEXITCODE"
}

dotnet publish $AvaloniaPublishProject /noLogo /p:Configuration=$Configuration /p:Platform=$Platform -p:RuntimeIdentifier=win-$Platform --self-contained true --ignore-failed-sources -v m
if ($LASTEXITCODE -ne 0) {
throw "dotnet publish Avalonia failed with exit code $LASTEXITCODE"
}

# --- Stage binaries ---
if (Test-Path $BinDir) { Remove-Item $BinDir -Recurse -Force }
New-Item $BinDir -ItemType Directory | Out-Null
# Move published output into unigetui_bin
Get-ChildItem $PublishDir | Move-Item -Destination $BinDir -Force
$AvaloniaBinDir = Join-Path $BinDir "Avalonia"
New-Item $AvaloniaBinDir -ItemType Directory | Out-Null
Get-ChildItem $AvaloniaPublishDir | Move-Item -Destination $AvaloniaBinDir -Force

# WingetUI.exe alias for backward compat
Copy-Item (Join-Path $BinDir "UniGetUI.exe") (Join-Path $BinDir "WingetUI.exe") -Force
Expand Down
85 changes: 85 additions & 0 deletions scripts/merge-publish-output.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Merges one publish directory into another, allowing only identical file collisions.

.PARAMETER Source
The publish directory to copy from.

.PARAMETER Destination
The publish directory to copy into.
#>

[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string] $Source,

[Parameter(Mandatory)]
[string] $Destination
)

$ErrorActionPreference = 'Stop'

if (-not (Test-Path $Source -PathType Container)) {
throw "Source directory '$Source' does not exist."
}

if (-not (Test-Path $Destination -PathType Container)) {
throw "Destination directory '$Destination' does not exist."
}

$Source = (Resolve-Path $Source).Path
$Destination = (Resolve-Path $Destination).Path

$sourceWinsConflicts = @{
'Microsoft.Extensions.DependencyInjection.Abstractions.dll' = $true
'Microsoft.VisualBasic.dll' = $true
'Microsoft.Win32.SystemEvents.dll' = $true
'System.Diagnostics.EventLog.dll' = $true
'System.Drawing.Common.dll' = $true
'System.Drawing.dll' = $true
'System.Private.Windows.Core.dll' = $true
'System.Security.Cryptography.Pkcs.dll' = $true
'System.Security.Cryptography.Xml.dll' = $true
'WindowsBase.dll' = $true
}

$destinationWinsConflicts = @{
'Microsoft.Windows.SDK.NET.dll' = $true
'WinRT.Runtime.dll' = $true
}

Get-ChildItem $Source -Recurse -File | ForEach-Object {
$relativePath = $_.FullName.Substring($Source.Length).TrimStart('\', '/')
$destinationPath = Join-Path $Destination $relativePath
$destinationDirectory = Split-Path $destinationPath -Parent

if (Test-Path $destinationPath -PathType Leaf) {
$sourceHash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
$destinationHash = (Get-FileHash $destinationPath -Algorithm SHA256).Hash

if ($sourceHash -ne $destinationHash) {
$fileName = [System.IO.Path]::GetFileName($relativePath)

if ($sourceWinsConflicts.ContainsKey($fileName)) {
Copy-Item $_.FullName -Destination $destinationPath -Force
return
}

if ($destinationWinsConflicts.ContainsKey($fileName)) {
return
}

throw "Publish merge conflict for '$relativePath': source and destination files differ."
}

return
}

if (-not (Test-Path $destinationDirectory -PathType Container)) {
New-Item $destinationDirectory -ItemType Directory -Force | Out-Null
}

Copy-Item $_.FullName -Destination $destinationPath -Force
}
Loading
Loading