Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .pipelines/MSIXBundle-vPack-Official.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ trigger: none
pr: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: 'createVPack'
displayName: 'Create and Submit VPack'
type: boolean
Expand Down Expand Up @@ -46,6 +50,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: msixbundle_vPack_$(Build.SourceBranchName)_Prod.True_Create.${{ parameters.createVPack }}_$(date:yyyyMMdd).$(rev:rr)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- name: CDP_DEFINITION_BUILD_COUNT
value: $[counter('', 0)]
- name: system.debug
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters:
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: InternalSDKBlobURL
displayName: URL to the blob having internal .NET SDK
type: string
Expand Down Expand Up @@ -65,6 +69,8 @@ resources:
ref: refs/heads/main

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: /.pipelines/templates/variables/PowerShell-Coordinated_Packages-Variables.yml@self
parameters:
InternalSDKBlobURL: ${{ parameters.InternalSDKBlobURL }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: ForceAzureBlobDelete
displayName: Delete Azure Blob
type: string
Expand Down Expand Up @@ -51,6 +55,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: pkgs-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: /.pipelines/templates/variables/PowerShell-Packages-Variables.yml@self
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/NonOfficial/PowerShell-Release-NonOfficial.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: 'debug'
displayName: 'Enable debug output'
type: boolean
Expand Down Expand Up @@ -52,6 +56,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: release-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: /.pipelines/templates/variables/PowerShell-Release-Variables.yml@self
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/NonOfficial/PowerShell-vPack-NonOfficial.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: 'createVPack'
displayName: 'Create and Submit VPack'
type: boolean
Expand Down Expand Up @@ -33,6 +37,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: vPack_$(Build.SourceBranchName)_NonOfficial_Create.${{ parameters.createVPack }}_Name.${{ parameters.vPackName}}_$(date:yyyyMMdd).$(rev:rr)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: /.pipelines/templates/variables/PowerShell-vPack-Variables.yml@self
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/PowerShell-Coordinated_Packages-Official.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters:
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: InternalSDKBlobURL
displayName: URL to the blob having internal .NET SDK
type: string
Expand Down Expand Up @@ -65,6 +69,8 @@ resources:
ref: refs/heads/main

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: templates/variables/PowerShell-Coordinated_Packages-Variables.yml
parameters:
InternalSDKBlobURL: ${{ parameters.InternalSDKBlobURL }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/PowerShell-Packages-Official.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: ForceAzureBlobDelete
displayName: Delete Azure Blob
type: string
Expand Down Expand Up @@ -51,6 +55,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: pkgs-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: templates/variables/PowerShell-Packages-Variables.yml
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/PowerShell-Release-Official.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: 'debug'
displayName: 'Enable debug output'
type: boolean
Expand Down Expand Up @@ -52,6 +56,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: release-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
- template: templates/variables/PowerShell-Release-Variables.yml
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/PowerShell-vPack-Official.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
trigger: none

parameters: # parameters are shown up in ADO UI in a build queue time
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: 'createVPack'
displayName: 'Create and Submit VPack'
type: boolean
Expand Down Expand Up @@ -53,6 +57,8 @@ parameters: # parameters are shown up in ADO UI in a build queue time
name: vPack_$(Build.SourceBranchName)_Prod_Create.${{ parameters.createVPack }}_Name.${{ parameters.vPackName}}_$(date:yyyyMMdd).$(rev:rr)

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
Comment on lines +60 to +61
- template: templates/variables/PowerShell-vPack-Variables.yml
parameters:
debug: ${{ parameters.debug }}
Expand Down
6 changes: 6 additions & 0 deletions .pipelines/apiscan-gen-notice.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ name: apiscan-genNotice-$(BUILD.SOURCEBRANCHNAME)-$(Build.BuildId)
trigger: none

parameters:
- name: UseEarlyAccessModules
displayName: Use early-access modules
type: boolean
default: false
- name: IsEarlyAccess
type: boolean
default: false
Expand All @@ -30,6 +34,8 @@ parameters:
default: false

variables:
- name: UseEarlyAccessModules
value: ${{ parameters.UseEarlyAccessModules }}
# PAT permissions NOTE: Declare a SymbolServerPAT variable in this group with a 'microsoft' organizanization scoped PAT with 'Symbols' Read permission.
# A PAT in the wrong org will give a single Error 203. No PAT will give a single Error 401, and individual pdbs may be missing even if permissions are correct.
- group: symbols
Expand Down
54 changes: 26 additions & 28 deletions .pipelines/templates/insert-nuget-config-azfeed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,19 @@ steps:
Import-Module ${{ parameters.repoRoot }}/build.psm1 -Force
$earlyAccess = $env:ISEARLYACCESS -eq 'true'
$useEarlyAccessModules = $env:USEEARLYACCESSMODULES -eq 'true'
Write-Verbose -Verbose "Is Early access: $earlyAccess"
if (-not $earlyAccess)
{
Write-Verbose -Verbose "Running: Switch-PSNugetConfig -Source Private -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'"
Switch-PSNugetConfig -Source Private -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'
Switch-PSNugetConfig -Source Private -UseEarlyAccessModules:$useEarlyAccessModules -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'
}
else
{
Write-Verbose -Verbose "Running: Switch-PSNugetConfig -Source EarlyAccess (using Azure DevOps feed credentials from pipeline variables)"
Switch-PSNugetConfig -Source EarlyAccess -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'
Switch-PSNugetConfig -Source EarlyAccess -UseEarlyAccessModules:$useEarlyAccessModules -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'
}
if(-not (Test-Path $configPath))
Expand All @@ -41,7 +42,7 @@ steps:
throw
}
displayName: 'Switch to production Azure DevOps feed for all nuget.configs'
condition: and(succeededOrFailed(), ne(variables['UseAzDevOpsFeed'], ''))
condition: and(succeededOrFailed(), or(ne(variables['UseAzDevOpsFeed'], ''), eq(variables['UseEarlyAccessModules'], 'true')))
env:
NugetConfigDir: ${{ parameters.repoRoot }}/src/Modules
ob_restore_phase: ${{ parameters.ob_restore_phase }}
Expand All @@ -63,40 +64,37 @@ steps:
Write-Host "##vso[task.setsecret]$azt"
Write-Verbose -Verbose "Setting up Azure Artifacts Credential Provider token"
$earlyAccessFeed = '$(EARLY_ACCESS_FEED)'
$ADORepoUri = switch ($earlyAccessFeed) {
$powerShellRepoUri = 'https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json'
$endpointCredentials = @(
@{
endpoint = $powerShellRepoUri
username = '$(AzDevopsFeedUserNameKVPAT)'
password = '$(powershellPackageReadPat)'
}
)
if ($env:ISEARLYACCESS -eq 'true') {
$earlyAccessFeed = '$(EARLY_ACCESS_FEED)'
$ADORepoUri = switch ($earlyAccessFeed) {
'net8' { 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-net-8-early-access/nuget/v3/index.json' }
'net9' { 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-net-9-early-access/nuget/v3/index.json' }
'net10' { 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-net-10-early-access/nuget/v3/index.json' }
'net11' { 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-net-11-early-access/nuget/v3/index.json' }
default { throw "Unknown early access feed URL: $earlyAccessFeed" }
}
$powerShellRepoUri = 'https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json'
Write-Verbose -Verbose "ADORepoUri == $ADORepoUri"
if ([string]::IsNullOrEmpty($ADORepoUri) -eq $false)
{
$endpointCredsObj = @{ endpointCredentials = @(
@{ endpoint = $ADORepoUri; password = $azt }
@{
endpoint = $powerShellRepoUri
username = '$(AzDevopsFeedUserNameKVPAT)'
password = '$(powershellPackageReadPat)'
}
)}
$VSS_NUGET_EXTERNAL_FEED_ENDPOINTS = $endpointCredsObj | ConvertTo-Json -Compress
Write-Verbose -Verbose "Setting VSS_NUGET_EXTERNAL_FEED_ENDPOINTS environment variable"
Write-Host "##vso[task.setvariable variable=VSS_NUGET_EXTERNAL_FEED_ENDPOINTS;issecret=true]$VSS_NUGET_EXTERNAL_FEED_ENDPOINTS"
$endpointCredentials += @{ endpoint = $ADORepoUri; password = $azt }
}
else
{
Write-Verbose -Verbose "EARLY_ACCESS_FEED_URL is not set"
if ($env:USEEARLYACCESSMODULES -eq 'true') {
$moduleEarlyAccessRepoUri = 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-module-earlyaccess/nuget/v3/index.json'
$endpointCredentials += @{ endpoint = $moduleEarlyAccessRepoUri; password = $azt }
}
$endpointCredsObj = @{ endpointCredentials = $endpointCredentials }
$VSS_NUGET_EXTERNAL_FEED_ENDPOINTS = $endpointCredsObj | ConvertTo-Json -Compress
Write-Host "##vso[task.setvariable variable=VSS_NUGET_EXTERNAL_FEED_ENDPOINTS;issecret=true]$VSS_NUGET_EXTERNAL_FEED_ENDPOINTS"
displayName: 'Setup Azure Artifacts Credential Provider secret'
condition: eq(variables['ISEARLYACCESS'], 'true')
condition: and(succeeded(), or(eq(variables['ISEARLYACCESS'], 'true'), eq(variables['UseEarlyAccessModules'], 'true')))
env:
ob_restore_phase: ${{ parameters.ob_restore_phase }}

Expand Down
27 changes: 20 additions & 7 deletions build.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -900,13 +900,17 @@ Fix steps:
function Switch-PSNugetConfig {
<#
.SYNOPSIS
Switches the NuGet configuration between public, private, and NuGet.org-only sources.
Switches the NuGet configuration between public, private, NuGet.org-only, and early-access sources.
.DESCRIPTION
Regenerates nuget.config files in the repository root, src/Modules, and test/tools/Modules
to point to the specified feed source. Optionally stores authenticated credentials.
.PARAMETER Source
The feed set to activate: 'Public' (nuget.org + dotnet feed), 'Private' (PowerShell ADO
feed), or 'NuGetOnly' (nuget.org only).
feed), 'NuGetOnly' (nuget.org only), or 'EarlyAccess' (.NET early-access
feed, with the PowerShell feed for released modules).
.PARAMETER UseEarlyAccessModules
Adds the internal module early-access feed for bundled modules independently
of the .NET feed selected by Source.
.PARAMETER UserName
Username for authenticated private feed access.
.PARAMETER ClearTextPAT
Expand All @@ -922,7 +926,9 @@ function Switch-PSNugetConfig {
[string] $UserName,

[Parameter(Mandatory = $true, ParameterSetName = 'user')]
[string] $ClearTextPAT
[string] $ClearTextPAT,

[switch] $UseEarlyAccessModules
)

Clear-PipelineNugetAuthentication
Expand All @@ -938,19 +944,18 @@ function Switch-PSNugetConfig {
$dotnetSdk = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v2'; Name = 'dotnet' }
$gallery = [NugetPackageSource] @{Url = 'https://www.powershellgallery.com/api/v2/'; Name = 'psgallery' }
$nugetorg = [NugetPackageSource] @{Url = 'https://api.nuget.org/v3/index.json'; Name = 'nuget.org' }
$moduleSource = $gallery
if ( $Source -eq 'Public') {
New-NugetConfigFile -NugetPackageSource $nugetorg, $dotnetSdk -Destination "$PSScriptRoot/" @extraParams
New-NugetConfigFile -NugetPackageSource $gallery -Destination "$PSScriptRoot/src/Modules/" @extraParams
New-NugetConfigFile -NugetPackageSource $gallery -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
} elseif ( $Source -eq 'NuGetOnly') {
New-NugetConfigFile -NugetPackageSource $nugetorg -Destination "$PSScriptRoot/" @extraParams
New-NugetConfigFile -NugetPackageSource $gallery -Destination "$PSScriptRoot/src/Modules/" @extraParams
New-NugetConfigFile -NugetPackageSource $gallery -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
} elseif ( $Source -eq 'Private') {
$powerShellPackages = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json'; Name = 'powershell' }
$moduleSource = $powerShellPackages

New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/" @extraParams
New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/src/Modules/" @extraParams
New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
} elseif ($Source -eq 'EarlyAccess') {
$earlyAccess = $env:EARLY_ACCESS_FEED
Expand All @@ -967,14 +972,22 @@ function Switch-PSNugetConfig {

$earlyAccessFeed = [NugetPackageSource] @{Url = $earlyAccessFeedUrl; Name = 'earlyaccess' }
$powerShellPackages = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json'; Name = 'powershell' }
$moduleSource = $powerShellPackages

New-NugetConfigFile -NugetPackageSource $earlyAccessFeed -Destination "$PSScriptRoot/"
New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/src/Modules/" @extraParams
New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
} else {
throw "Unknown source: $Source"
}

if ($UseEarlyAccessModules) {
$moduleEarlyAccessFeed = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-module-earlyaccess/nuget/v3/index.json'; Name = 'module-earlyaccess' }
# Credentials for moduleSource are registered by the test module configuration above.
New-NugetConfigFile -NugetPackageSource $moduleEarlyAccessFeed, $moduleSource -Destination "$PSScriptRoot/src/Modules/"
} else {
New-NugetConfigFile -NugetPackageSource $moduleSource -Destination "$PSScriptRoot/src/Modules/" @extraParams
}

if ($UserName -or $ClearTextPAT) {
Set-PipelineNugetAuthentication
}
Expand Down
Loading
Loading