116 lines
4.4 KiB
PowerShell
116 lines
4.4 KiB
PowerShell
<#
|
||
.SYNOPSIS
|
||
Velopack ile Setup.exe üretimi. Self-contained publish alıp vpk pack yapar.
|
||
|
||
.DESCRIPTION
|
||
1. Proje dosyasından sürüm okur
|
||
2. dotnet publish (self-contained, single-file, win-x64)
|
||
3. vpk pack ile Setup.exe, Portable.zip ve feed dosyalarını üretir
|
||
4. Setup.exe ve Portable.zip'i istenen formata rename eder (feed dosyaları orijinal Velopack naming'de kalır)
|
||
5. Çıktı: artifacts/velopack/win-x64-stable/
|
||
|
||
.NOTES
|
||
Velopack CLI: dotnet tool restore ile yüklenen vpk kullanılır
|
||
Icon: Assets/AppIcon.ico (installer ikonu)
|
||
Velopack CLI args: camelCase (--outputDir, --packId, --packTitle, --packAuthors, --packVersion, --packDir, --mainExe)
|
||
#>
|
||
|
||
param(
|
||
[switch]$WhatIf
|
||
)
|
||
|
||
$ErrorActionPreference = "Stop"
|
||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||
$repoRoot = Split-Path -Parent (Split-Path -Parent $scriptDir)
|
||
$projPath = Join-Path $repoRoot "src\RgbLedStripController\RgbLedStripController.csproj"
|
||
$iconPath = Join-Path $repoRoot "src\RgbLedStripController\Assets\AppIcon.ico"
|
||
$publishDir = Join-Path $repoRoot "artifacts\publish\win-x64"
|
||
$velopackDir = Join-Path $repoRoot "artifacts\velopack\win-x64-stable"
|
||
|
||
# Sürümü csproj'dan oku (birden fazla PropertyGroup olabilir)
|
||
$projXml = [xml](Get-Content $projPath)
|
||
$version = $projXml.Project.PropertyGroup | Where-Object { $_.Version } | Select-Object -First 1 -ExpandProperty Version
|
||
if (-not $version) { throw "Version not found in csproj" }
|
||
Write-Host "Version: $version" -ForegroundColor Cyan
|
||
|
||
# Publish output klasörü
|
||
$stagedPublishDir = Join-Path $publishDir $version
|
||
if (-not $WhatIf) {
|
||
if (Test-Path $stagedPublishDir) { Remove-Item -Recurse -Force $stagedPublishDir }
|
||
} else {
|
||
Write-Host "[WhatIf] Would clean: $stagedPublishDir"
|
||
}
|
||
|
||
# Velopack output klasörünü temizle (duplicate önleme)
|
||
if (-not $WhatIf) {
|
||
if (Test-Path $velopackDir) { Remove-Item -Recurse -Force $velopackDir }
|
||
New-Item -ItemType Directory -Force -Path $velopackDir | Out-Null
|
||
} else {
|
||
Write-Host "[WhatIf] Would clean and recreate: $velopackDir"
|
||
}
|
||
|
||
# 1. dotnet publish
|
||
$publishArgs = @(
|
||
"publish", $projPath
|
||
"-c", "Release"
|
||
"-r", "win-x64"
|
||
"--self-contained", "true"
|
||
"-p:PublishSingleFile=true"
|
||
"-p:PublishTrimmed=false"
|
||
"-p:IncludeNativeLibrariesForSelfExtract=true"
|
||
"-p:DebugType=none"
|
||
"-p:DebugSymbols=false"
|
||
"--configfile", (Join-Path $repoRoot "NuGet.Config")
|
||
"-o", $stagedPublishDir
|
||
)
|
||
Write-Host "dotnet publish..." -ForegroundColor Cyan
|
||
if (-not $WhatIf) {
|
||
& dotnet $publishArgs
|
||
if ($LASTEXITCODE -ne 0) { throw "dotnet publish failed ($LASTEXITCODE)" }
|
||
} else {
|
||
Write-Host "[WhatIf] dotnet $publishArgs"
|
||
}
|
||
|
||
# 2. vpk pack (args camelCase)
|
||
$vpkArgs = @(
|
||
"pack",
|
||
"--outputDir", $velopackDir,
|
||
"--packId", "Fristy.RgbLedStripController",
|
||
"--packTitle", "RGB Led Strip Controller",
|
||
"--packAuthors", "fristy",
|
||
"--packVersion", $version,
|
||
"--icon", $iconPath,
|
||
"--packDir", $stagedPublishDir,
|
||
"--mainExe", "RgbLedStripController.exe"
|
||
)
|
||
Write-Host "vpk pack..." -ForegroundColor Cyan
|
||
if (-not $WhatIf) {
|
||
& dotnet tool run vpk $vpkArgs
|
||
if ($LASTEXITCODE -ne 0) { throw "vpk pack failed ($LASTEXITCODE)" }
|
||
} else {
|
||
Write-Host "[WhatIf] dotnet tool run vpk $vpkArgs"
|
||
}
|
||
|
||
# 3. Sadece Setup.exe ve Portable.zip'i istenen formata rename et
|
||
# Feed dosyaları (releases.*.json, *.nupkg) orijinal Velopack naming'de kalsın (auto-update için)
|
||
$setupSrc = Join-Path $velopackDir "Fristy.RgbLedStripController-win-Setup.exe"
|
||
$setupDst = Join-Path $velopackDir "RGBLedStripController-Setup-v${version}-x64.exe"
|
||
$portableSrc = Join-Path $velopackDir "Fristy.RgbLedStripController-win-Portable.zip"
|
||
$portableDst = Join-Path $velopackDir "RGBLedStripController-Portable-v${version}-x64.zip"
|
||
|
||
if (-not $WhatIf) {
|
||
if (Test-Path $setupSrc) { Move-Item -Force $setupSrc $setupDst; Write-Host "Renamed: $($setupDst)" }
|
||
if (Test-Path $portableSrc) { Move-Item -Force $portableSrc $portableDst; Write-Host "Renamed: $($portableDst)" }
|
||
} else {
|
||
Write-Host "[WhatIf] Would rename: $setupSrc -> $setupDst"
|
||
Write-Host "[WhatIf] Would rename: $portableSrc -> $portableDst"
|
||
}
|
||
|
||
Write-Host "Done. Output: $velopackDir" -ForegroundColor Green
|
||
if (-not $WhatIf) {
|
||
if (Test-Path $velopackDir) {
|
||
Get-ChildItem $velopackDir | ForEach-Object { Write-Host " $($_.Name) - $([math]::Round($_.Length/1MB,2)) MB" }
|
||
} else {
|
||
Write-Host "Warning: $velopackDir not found" -ForegroundColor Yellow
|
||
}
|
||
} |