param( [string]$Version ) Write-Host "=== YandexMusic Manual Publisher ===" -ForegroundColor Cyan # --- Ask for version if not provided --- if (-not $Version) { $Version = Read-Host "Введите версию пакета (например 1.2.3). Пусто = взять из git-тега" if (-not $Version) { Write-Host "Читаю версию из git..." -ForegroundColor Yellow $tag = git describe --tags --abbrev=0 2>$null if (-not $tag) { Write-Host "ОШИБКА: версия не указана и git-тег не найден." -ForegroundColor Red exit 1 } $Version = $tag.TrimStart("v") } } Write-Host "Используемая версия: $Version" -ForegroundColor Green # --- Paths --- $csprojPath = "YandexMusic/YandexMusic.csproj" $backupPath = "$csprojPath.bak" $artifacts = "artifacts" # --- Backup original csproj --- Write-Host "Создаю резервную копию $csprojPath ..." -ForegroundColor Cyan Copy-Item $csprojPath $backupPath -Force # --- Replace ProjectReference with PackageReference --- Write-Host "Патчу csproj..." -ForegroundColor Cyan (Get-Content $csprojPath) ` -replace '', "" | Set-Content $csprojPath Write-Host "ProjectReference → PackageReference заменён." -ForegroundColor Green # --- Build & Pack --- $projects = @( "YandexMusic.API", "YandexMusic" ) if (Test-Path $artifacts) { Remove-Item $artifacts -Recurse -Force } New-Item -ItemType Directory -Path $artifacts | Out-Null try { foreach ($proj in $projects) { Write-Host "Restoring $proj ..." -ForegroundColor Cyan dotnet restore $proj Write-Host "Building $proj ..." -ForegroundColor Cyan dotnet build $proj -c Release -p:Version=$Version Write-Host "Packing $proj ..." -ForegroundColor Cyan dotnet pack $proj -c Release --no-build -p:PackageVersion=$Version -o $artifacts } Write-Host "Сборка и упаковка завершены." -ForegroundColor Green # --- Publish --- $apiKey = $env:NUGET_API_KEY if (-not $apiKey) { Write-Host "ОШИБКА: переменная окружения NUGET_API_KEY не установлена." -ForegroundColor Red exit 1 } Write-Host "Публикую пакеты..." -ForegroundColor Cyan dotnet nuget push "$artifacts\*.nupkg" ` --source "https://git.frigat.duckdns.org/api/packages/FrigaT/nuget/index.json" ` --api-key $apiKey ` --skip-duplicate Write-Host "Публикация завершена." -ForegroundColor Green } finally { # --- Restore original csproj --- Write-Host "Восстанавливаю оригинальный csproj..." -ForegroundColor Cyan Move-Item $backupPath $csprojPath -Force # --- Cleanup artifacts --- if (Test-Path $artifacts) { Write-Host "Удаляю artifacts..." -ForegroundColor Cyan Remove-Item $artifacts -Recurse -Force } Write-Host "Откат завершён." -ForegroundColor Green } Write-Host "Готово." -ForegroundColor Cyan