11# This script adds internal feeds required to build commits that depend on internal package sources. For instance,
2- # dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables
3- # disabled internal Maestro (darc-int*) feeds.
2+ # dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly,
3+ # dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present.
4+ # In addition, this script also enables disabled internal Maestro (darc-int*) feeds.
45#
56# Optionally, this script also adds a credential entry for each of the internal feeds if supplied.
67#
78# See example call for this script below.
89#
910# - task: PowerShell@2
10- # displayName: Setup Private Feeds Credentials
11+ # displayName: Setup internal Feeds Credentials
1112# condition: eq(variables['Agent.OS'], 'Windows_NT')
1213# inputs:
13- # filePath: $(Build.SourcesDirectory )/eng/common/SetupNugetSources.ps1
14- # arguments: -ConfigFile $(Build.SourcesDirectory )/NuGet.config -Password $Env:Token
14+ # filePath: $(System.DefaultWorkingDirectory )/eng/common/SetupNugetSources.ps1
15+ # arguments: -ConfigFile $(System.DefaultWorkingDirectory )/NuGet.config -Password $Env:Token
1516# env:
1617# Token: $(dn-bot-dnceng-artifact-feeds-rw)
1718#
@@ -34,19 +35,28 @@ Set-StrictMode -Version 2.0
3435
3536. $PSScriptRoot \tools.ps1
3637
38+ # Adds or enables the package source with the given name
39+ function AddOrEnablePackageSource ($sources , $disabledPackageSources , $SourceName , $SourceEndPoint , $creds , $Username , $pwd ) {
40+ if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource - DisabledPackageSources $disabledPackageSources - Creds $creds - PackageSourceName $SourceName )) {
41+ AddPackageSource - Sources $sources - SourceName $SourceName - SourceEndPoint $SourceEndPoint - Creds $creds - Username $userName - pwd $Password
42+ }
43+ }
44+
3745# Add source entry to PackageSources
3846function AddPackageSource ($sources , $SourceName , $SourceEndPoint , $creds , $Username , $pwd ) {
3947 $packageSource = $sources.SelectSingleNode (" add[@key='$SourceName ']" )
4048
4149 if ($packageSource -eq $null )
4250 {
51+ Write-Host " Adding package source $SourceName "
52+
4353 $packageSource = $doc.CreateElement (" add" )
4454 $packageSource.SetAttribute (" key" , $SourceName )
4555 $packageSource.SetAttribute (" value" , $SourceEndPoint )
4656 $sources.AppendChild ($packageSource ) | Out-Null
4757 }
4858 else {
49- Write-Host " Package source $SourceName already present."
59+ Write-Host " Package source $SourceName already present and enabled ."
5060 }
5161
5262 AddCredential - Creds $creds - Source $SourceName - Username $Username - pwd $pwd
@@ -59,6 +69,8 @@ function AddCredential($creds, $source, $username, $pwd) {
5969 return ;
6070 }
6171
72+ Write-Host " Inserting credential for feed: " $source
73+
6274 # Looks for credential configuration for the given SourceName. Create it if none is found.
6375 $sourceElement = $creds.SelectSingleNode ($Source )
6476 if ($sourceElement -eq $null )
@@ -91,24 +103,27 @@ function AddCredential($creds, $source, $username, $pwd) {
91103 $passwordElement.SetAttribute (" value" , $pwd )
92104}
93105
94- function InsertMaestroPrivateFeedCredentials ($Sources , $Creds , $Username , $pwd ) {
95- $maestroPrivateSources = $Sources.SelectNodes (" add[contains(@key,'darc-int')]" )
96-
97- Write-Host " Inserting credentials for $ ( $maestroPrivateSources.Count ) Maestro's private feeds."
98-
99- ForEach ($PackageSource in $maestroPrivateSources ) {
100- Write-Host " `t Inserting credential for Maestro's feed:" $PackageSource.Key
101- AddCredential - Creds $creds - Source $PackageSource.Key - Username $Username - pwd $pwd
106+ # Enable all darc-int package sources.
107+ function EnableMaestroInternalPackageSources ($DisabledPackageSources , $Creds ) {
108+ $maestroInternalSources = $DisabledPackageSources.SelectNodes (" add[contains(@key,'darc-int')]" )
109+ ForEach ($DisabledPackageSource in $maestroInternalSources ) {
110+ EnableInternalPackageSource - DisabledPackageSources $DisabledPackageSources - Creds $Creds - PackageSourceName $DisabledPackageSource.key
102111 }
103112}
104113
105- function EnablePrivatePackageSources ($DisabledPackageSources ) {
106- $maestroPrivateSources = $DisabledPackageSources.SelectNodes (" add[contains(@key,'darc-int')]" )
107- ForEach ($DisabledPackageSource in $maestroPrivateSources ) {
108- Write-Host " `t Ensuring private source '$ ( $DisabledPackageSource.key ) ' is enabled by deleting it from disabledPackageSource"
114+ # Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise.
115+ function EnableInternalPackageSource ($DisabledPackageSources , $Creds , $PackageSourceName ) {
116+ $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode (" add[@key='$PackageSourceName ']" )
117+ if ($DisabledPackageSource ) {
118+ Write-Host " Enabling internal source '$ ( $DisabledPackageSource.key ) '."
119+
109120 # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries
110121 $DisabledPackageSources.RemoveChild ($DisabledPackageSource )
122+
123+ AddCredential - Creds $creds - Source $DisabledPackageSource.Key - Username $userName - pwd $Password
124+ return $true
111125 }
126+ return $false
112127}
113128
114129if (! (Test-Path $ConfigFile - PathType Leaf)) {
@@ -121,15 +136,17 @@ $doc = New-Object System.Xml.XmlDocument
121136$filename = (Get-Item $ConfigFile ).FullName
122137$doc.Load ($filename )
123138
124- # Get reference to <PackageSources> or create one if none exist already
139+ # Get reference to <PackageSources> - fail if none exist
125140$sources = $doc.DocumentElement.SelectSingleNode (" packageSources" )
126141if ($sources -eq $null ) {
127- $sources = $doc .CreateElement ( " packageSources" )
128- $doc .DocumentElement.AppendChild ( $sources ) | Out-Null
142+ Write-PipelineTelemetryError - Category ' Build ' - Message " Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile "
143+ ExitWithExitCode 1
129144}
130145
131146$creds = $null
147+ $feedSuffix = " v3/index.json"
132148if ($Password ) {
149+ $feedSuffix = " v2"
133150 # Looks for a <PackageSourceCredentials> node. Create it if none is found.
134151 $creds = $doc.DocumentElement.SelectSingleNode (" packageSourceCredentials" )
135152 if ($creds -eq $null ) {
@@ -138,34 +155,35 @@ if ($Password) {
138155 }
139156}
140157
158+ $userName = " dn-bot"
159+
141160# Check for disabledPackageSources; we'll enable any darc-int ones we find there
142161$disabledSources = $doc.DocumentElement.SelectSingleNode (" disabledPackageSources" )
143162if ($disabledSources -ne $null ) {
144163 Write-Host " Checking for any darc-int disabled package sources in the disabledPackageSources node"
145- EnablePrivatePackageSources - DisabledPackageSources $disabledSources
164+ EnableMaestroInternalPackageSources - DisabledPackageSources $disabledSources - Creds $creds
146165}
147-
148- $userName = " dn-bot"
149-
150- # Insert credential nodes for Maestro's private feeds
151- InsertMaestroPrivateFeedCredentials - Sources $sources - Creds $creds - Username $userName - pwd $Password
152-
153- # 3.1 uses a different feed url format so it's handled differently here
154- $dotnet31Source = $sources.SelectSingleNode (" add[@key='dotnet3.1']" )
155- if ($dotnet31Source -ne $null ) {
156- AddPackageSource - Sources $sources - SourceName " dotnet3.1-internal" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" - Creds $creds - Username $userName - pwd $Password
157- AddPackageSource - Sources $sources - SourceName " dotnet3.1-internal-transport" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" - Creds $creds - Username $userName - pwd $Password
158- }
159-
160- $dotnetVersions = @ (' 5' , ' 6' , ' 7' , ' 8' , ' 9' )
166+ $dotnetVersions = @ (' 5' , ' 6' , ' 7' , ' 8' , ' 9' , ' 10' )
161167
162168foreach ($dotnetVersion in $dotnetVersions ) {
163169 $feedPrefix = " dotnet" + $dotnetVersion ;
164170 $dotnetSource = $sources.SelectSingleNode (" add[@key='$feedPrefix ']" )
165171 if ($dotnetSource -ne $null ) {
166- AddPackageSource - Sources $sources - SourceName " $feedPrefix -internal" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix -internal/nuget/v2 " - Creds $creds - Username $userName - pwd $Password
167- AddPackageSource - Sources $sources - SourceName " $feedPrefix -internal-transport" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix -internal-transport/nuget/v2 " - Creds $creds - Username $userName - pwd $Password
172+ AddOrEnablePackageSource - Sources $sources - DisabledPackageSources $disabledSources - SourceName " $feedPrefix -internal" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix -internal/nuget/$feedSuffix " - Creds $creds - Username $userName - pwd $Password
173+ AddOrEnablePackageSource - Sources $sources - DisabledPackageSources $disabledSources - SourceName " $feedPrefix -internal-transport" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix -internal-transport/nuget/$feedSuffix " - Creds $creds - Username $userName - pwd $Password
168174 }
169175}
170176
177+ # Check for dotnet-eng and add dotnet-eng-internal if present
178+ $dotnetEngSource = $sources.SelectSingleNode (" add[@key='dotnet-eng']" )
179+ if ($dotnetEngSource -ne $null ) {
180+ AddOrEnablePackageSource - Sources $sources - DisabledPackageSources $disabledSources - SourceName " dotnet-eng-internal" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix " - Creds $creds - Username $userName - pwd $Password
181+ }
182+
183+ # Check for dotnet-tools and add dotnet-tools-internal if present
184+ $dotnetToolsSource = $sources.SelectSingleNode (" add[@key='dotnet-tools']" )
185+ if ($dotnetToolsSource -ne $null ) {
186+ AddOrEnablePackageSource - Sources $sources - DisabledPackageSources $disabledSources - SourceName " dotnet-tools-internal" - SourceEndPoint " https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix " - Creds $creds - Username $userName - pwd $Password
187+ }
188+
171189$doc.Save ($filename )
0 commit comments