aspnetcore/KoreBuild-dotnet/build/_nuget-resilient-publish.shade

54 lines
1.3 KiB
Plaintext

use namespace="System.Threading.Tasks"
@{/*
nuget-resilient-publish
Publishes NuGet packages with retries
sourcePackagesDir=''
Required. Path to packages to push
nugetFeed=''
Required. Feed to publish to.
*/}
default apiKey='${Environment.GetEnvironmentVariable("APIKEY")}'
default extra=''
var nugetArgs=''
set nugetArgs='${nugetArgs} -ApiKey ${apiKey}' if='!string.IsNullOrEmpty(apiKey)'
set nugetArgs='${nugetArgs} -Source ${nugetFeed}' if='!string.IsNullOrEmpty(nugetFeed)'
set nugetArgs='${nugetArgs} ${extra}' if='!string.IsNullOrEmpty(extra)'
@{
var packages = Directory.EnumerateFiles(sourcePackagesDir, "*.nupkg")
.Where(p => !p.EndsWith(".symbols.nupkg"))
.ToArray();
var nugetExePath = Environment.GetEnvironmentVariable("PUSH_NUGET_EXE");
if (string.IsNullOrEmpty(nugetExePath))
{
nugetExePath = ".build/NuGet.exe";
}
Parallel.ForEach(packages, package =>
{
var retries = 0;
var packagePath = Path.Combine(sourcePackagesDir, package);
start:
try
{
ExecClr(nugetExePath, "push " + package + " " + nugetArgs);
}
catch
{
if (++retries == 3)
{
throw;
}
goto start;
}
});
}