Browse Source

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.

pull/25246/head
selmankoc 3 weeks ago
parent
commit
76c511356a
  1. 28
      nupkg/push_packages.ps1

28
nupkg/push_packages.ps1

@ -11,6 +11,8 @@ $i = 0
$errorCount = 0 $errorCount = 0
$totalProjectsCount = $projects.length $totalProjectsCount = $projects.length
$nugetUrl = "https://api.nuget.org/v3/index.json" $nugetUrl = "https://api.nuget.org/v3/index.json"
$maxQuotaRetryCount = 3
$quotaRetryDelaysInSeconds = @(30, 60, 120)
Set-Location $packFolder Set-Location $packFolder
foreach($project in $projects) { foreach($project in $projects) {
@ -24,7 +26,31 @@ foreach($project in $projects) {
if ($nugetPackageExists) 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) #Write-Host ("Deleting package from local: " + $nugetPackageName)
#Remove-Item $nugetPackageName -Force #Remove-Item $nugetPackageName -Force
} }

Loading…
Cancel
Save