@@ -307,6 +307,9 @@ function Start-PSBuild {
307307 # it's useful for development, to do a quick changes in the engine
308308 [switch ]$SMAOnly ,
309309
310+ # Use nuget.org instead of the PowerShell specific feed
311+ [switch ]$UseNuGetOrg ,
312+
310313 # These runtimes must match those in project.json
311314 # We do not use ValidateScript since we want tab completion
312315 # If this parameter is not provided it will get determined automatically.
@@ -362,6 +365,12 @@ function Start-PSBuild {
362365 }
363366 }
364367
368+ if ($UseNuGetOrg ) {
369+ Switch-PSNugetConfig - Source Public
370+ } else {
371+ Write-Verbose - Message " Using default feeds which are Microsoft, use `-UseNuGetOrg` to switch to Public feeds" - Verbose
372+ }
373+
365374 function Stop-DevPowerShell {
366375 Get-Process pwsh* |
367376 Where-Object {
@@ -718,6 +727,29 @@ Fix steps:
718727 }
719728}
720729
730+ function Switch-PSNugetConfig {
731+ param (
732+ [ValidateSet (' Public' , ' Private' )]
733+ [string ] $Source = ' Public'
734+ )
735+
736+ if ( $Source -eq ' Public' ) {
737+ $dotnetSdk = [NugetPackageSource ] @ {Url = ' https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v2' ; Name = ' dotnet' }
738+ $gallery = [NugetPackageSource ] @ {Url = ' https://www.powershellgallery.com/api/v2/' ; Name = ' psgallery' }
739+ $nugetorg = [NugetPackageSource ] @ {Url = ' https://api.nuget.org/v3/index.json' ; Name = ' nuget.org' }
740+
741+ New-NugetConfigFile - NugetPackageSource $nugetorg , $dotnetSdk - Destination " $PSScriptRoot /"
742+ New-NugetConfigFile - NugetPackageSource $gallery - Destination " $PSScriptRoot /src/Modules/"
743+ } elseif ( $Source -eq ' Private' ) {
744+ $powerShellPackages = [NugetPackageSource ] @ {Url = ' https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/powershell/nuget/v3/index.json' ; Name = ' powershell' }
745+
746+ New-NugetConfigFile - NugetPackageSource $powerShellPackages - Destination " $PSScriptRoot /"
747+ New-NugetConfigFile - NugetPackageSource $powerShellPackages - Destination " $PSScriptRoot /src/Modules/"
748+ } else {
749+ throw " Unknown source: $Source "
750+ }
751+ }
752+
721753function Test-ShouldGenerateExperimentalFeatures
722754{
723755 param (
@@ -1284,9 +1316,14 @@ function Start-PSPester {
12841316 [Parameter (ParameterSetName = ' Wait' , Mandatory = $true ,
12851317 HelpMessage = ' Wait for the debugger to attach to PowerShell before Pester starts. Debug builds only!' )]
12861318 [switch ]$Wait ,
1287- [switch ]$SkipTestToolBuild
1319+ [switch ]$SkipTestToolBuild ,
1320+ [switch ]$UseNuGetOrg
12881321 )
12891322
1323+ if ($UseNuGetOrg ) {
1324+ Switch-PSNugetConfig - Source Public
1325+ }
1326+
12901327 if (-not (Get-Module - ListAvailable - Name $Pester - ErrorAction SilentlyContinue | Where-Object { $_.Version -ge " 4.2" } ))
12911328 {
12921329 Restore-PSPester
@@ -3394,36 +3431,67 @@ function New-TestPackage
33943431 [System.IO.Compression.ZipFile ]::CreateFromDirectory($packageRoot , $packagePath )
33953432}
33963433
3397- function New-NugetConfigFile
3398- {
3434+ class NugetPackageSource {
3435+ [string ] $Url
3436+ [string ] $Name
3437+ }
3438+
3439+ function New-NugetConfigFile {
33993440 param (
3400- [Parameter (Mandatory = $true )] [string ] $NugetFeedUrl ,
3401- [Parameter (Mandatory = $true )] [string ] $FeedName ,
3402- [Parameter (Mandatory = $true )] [string ] $UserName ,
3403- [Parameter (Mandatory = $true )] [string ] $ClearTextPAT ,
3404- [Parameter (Mandatory = $true )] [string ] $Destination
3441+ [Parameter (Mandatory = $true , ParameterSetName = ' user' )]
3442+ [Parameter (Mandatory = $true , ParameterSetName = ' nouser' )]
3443+ [NugetPackageSource []] $NugetPackageSource ,
3444+
3445+ [Parameter (Mandatory = $true )] [string ] $Destination ,
3446+
3447+ [Parameter (Mandatory = $true , ParameterSetName = ' user' )]
3448+ [string ] $UserName ,
3449+
3450+ [Parameter (Mandatory = $true , ParameterSetName = ' user' )]
3451+ [string ] $ClearTextPAT
34053452 )
34063453
3407- $nugetConfigTemplate = @'
3454+ $nugetConfigHeaderTemplate = @'
34083455<?xml version="1.0" encoding="utf-8"?>
34093456<configuration>
34103457 <packageSources>
34113458 <clear />
3459+ '@
3460+
3461+ $nugetPackageSourceTemplate = @'
34123462 <add key="[FEEDNAME]" value="[FEED]" />
3463+ '@
3464+ $nugetPackageSourceFooterTemplate = @'
34133465 </packageSources>
34143466 <disabledPackageSources>
34153467 <clear />
34163468 </disabledPackageSources>
3469+ '@
3470+ $nugetCredentialsTemplate = @'
34173471 <packageSourceCredentials>
34183472 <[FEEDNAME]>
34193473 <add key="Username" value="[USERNAME]" />
34203474 <add key="ClearTextPassword" value="[PASSWORD]" />
34213475 </[FEEDNAME]>
34223476 </packageSourceCredentials>
3477+ '@
3478+ $nugetConfigFooterTemplate = @'
34233479</configuration>
34243480'@
3481+ $content = $nugetConfigHeaderTemplate
3482+
3483+ [NugetPackageSource ]$source = $null
3484+ foreach ($source in $NugetPackageSource ) {
3485+ $content += $nugetPackageSourceTemplate.Replace (' [FEED]' , $source.Url ).Replace(' [FEEDNAME]' , $source.Name )
3486+ }
3487+
3488+ $content += $nugetPackageSourceFooterTemplate
3489+
3490+ if ($UserName -or $ClearTextPAT ) {
3491+ $content += $nugetCredentialsTemplate.Replace (' [USERNAME]' , $UserName ).Replace(' [PASSWORD]' , $ClearTextPAT )
3492+ }
34253493
3426- $content = $nugetConfigTemplate .Replace ( ' [FEED] ' , $NugetFeedUrl ).Replace( ' [FEEDNAME] ' , $FeedName ).Replace( ' [USERNAME] ' , $UserName ).Replace( ' [PASSWORD] ' , $ClearTextPAT )
3494+ $content + = $nugetConfigFooterTemplate
34273495
34283496 Set-Content - Path (Join-Path $Destination ' nuget.config' ) - Value $content - Force
34293497}
0 commit comments