Functions/Initialize-NuGetFeed.ps1
function Initialize-NuGetFeed { param( [Parameter(Mandatory = $true)] [String] $NugetConfigFilename, [Parameter(Mandatory = $true)] [String] $PackageFeedUrl, [Parameter(Mandatory = $false)] [pscredential] $PackageFeedCredentials, [Parameter()] [switch] $StorePasswordsInClearText ) if (-not $env:AGENT_ID) { Write-Warning "Not running on agent, skipping NuGet feed initialization" return } $doc = [System.Xml.XmlDocument]::new() $doc.Load($NugetConfigFilename) $doc.SelectNodes("configuration/packageSources/add") | Where-Object { $Url = $_.Attributes["value"].Value.ToLowerInvariant() return $Url.StartsWith($PackageFeedUrl.ToLowerInvariant()) } | ForEach-Object { $FeedName = $_.Attributes["key"].Value Write-Host "Removing feed '$FeedName'" dotnet nuget remove source $FeedName --configfile "$NugetConfigFilename" | Out-Null } # we're on devops here, so register a feed with credentials $FeedName = "$([Guid]::NewGuid())".Substring(0, 8) Write-Host "Registering NuGet credentials on temporary feed '$FeedName'" $dotNetArgs = @( "nuget", "add", "source", $PackageFeedUrl, "--name", $FeedName, "--configfile", $NugetConfigFilename ) if ($PackageFeedCredentials) { $nc = $PackageFeedCredentials.GetNetworkCredential() $dotNetArgs += @( "--username", $nc.UserName, "--password", $nc.Password ) if ($StorePasswordsInClearText) { $dotNetArgs += @( "--store-password-in-clear-text" ) } } & dotnet @dotNetArgs | Out-Null Write-Output $FeedName } |