From 76c511356aa333fe9a1cd146586943c19f928dc4 Mon Sep 17 00:00:00 2001 From: selmankoc Date: Mon, 13 Apr 2026 10:35:44 +0300 Subject: [PATCH] Enhance NuGet package push script to handle quota exceeded errors with retry logic. Added configurable retry count and delays for improved resilience during package pushes. --- nupkg/push_packages.ps1 | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/nupkg/push_packages.ps1 b/nupkg/push_packages.ps1 index 6fa91a5599..9f83badbb8 100644 --- a/nupkg/push_packages.ps1 +++ b/nupkg/push_packages.ps1 @@ -11,6 +11,8 @@ $i = 0 $errorCount = 0 $totalProjectsCount = $projects.length $nugetUrl = "https://api.nuget.org/v3/index.json" +$maxQuotaRetryCount = 3 +$quotaRetryDelaysInSeconds = @(30, 60, 120) Set-Location $packFolder foreach($project in $projects) { @@ -24,7 +26,31 @@ foreach($project in $projects) { if ($nugetPackageExists) { - dotnet nuget push $nugetPackageName --skip-duplicate -s $nugetUrl --api-key "$apiKey" + $attempt = 0 + while ($true) + { + $attempt += 1 + $pushOutput = dotnet nuget push $nugetPackageName --skip-duplicate -s $nugetUrl --api-key "$apiKey" 2>&1 + $pushOutput | ForEach-Object { Write-Host $_ } + + $pushSucceeded = $LASTEXITCODE -eq 0 + if ($pushSucceeded) + { + break + } + + $quotaExceeded = ($pushOutput | Out-String) -match "403 \(Quota Exceeded\)" + $canRetry = $quotaExceeded -and $attempt -le $maxQuotaRetryCount + + if (-not $canRetry) + { + break + } + + $retryDelay = $quotaRetryDelaysInSeconds[$attempt - 1] + Write-Warning "NuGet quota exceeded for $nugetPackageName. Retrying in $retryDelay seconds (retry $attempt/$maxQuotaRetryCount)..." + Start-Sleep -Seconds $retryDelay + } #Write-Host ("Deleting package from local: " + $nugetPackageName) #Remove-Item $nugetPackageName -Force }