Skip to content

Commit 2ac8cee

Browse files
benbpazure-sdk
authored andcommitted
Support override of powershell module feeds
1 parent 5fadaee commit 2ac8cee

File tree

1 file changed

+55
-49
lines changed

1 file changed

+55
-49
lines changed

eng/common/scripts/Helpers/PSModule-Helpers.ps1

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -55,68 +55,74 @@ function Install-ModuleIfNotInstalled()
5555
param(
5656
[string]$moduleName,
5757
[string]$version,
58-
[string]$repositoryUrl = $DefaultPSRepositoryUrl
58+
[string]$repositoryUrl
5959
)
6060

61-
# Check installed modules
62-
$modules = (Get-Module -ListAvailable $moduleName)
63-
if ($version -as [Version]) {
64-
$modules = $modules.Where({ [Version]$_.Version -ge [Version]$version })
61+
# List of modules+versions we want to replace with internal feed sources for reliability, security, etc.
62+
$mirrorFeedOverrides = @{
63+
'powershell-yaml;0.4.7' = 'https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-tools/nuget/v2'
6564
}
6665

67-
if ($modules.Count -eq 0)
68-
{
69-
# Use double-checked locking to avoid locking when module is already installed
66+
try {
7067
$mutex = New-Object System.Threading.Mutex($false, "Install-ModuleIfNotInstalled")
7168
$null = $mutex.WaitOne()
7269

73-
try {
74-
# Check installed modules again after acquiring lock
75-
$modules = (Get-Module -ListAvailable $moduleName)
76-
if ($version -as [Version]) {
77-
$modules = $modules.Where({ [Version]$_.Version -ge [Version]$version })
78-
}
70+
# Check installed modules again after acquiring lock
71+
$modules = (Get-Module -ListAvailable $moduleName)
72+
if ($version -as [Version]) {
73+
$modules = $modules.Where({ [Version]$_.Version -ge [Version]$version })
74+
}
75+
76+
if ($modules.Count -gt 0)
77+
{
78+
Write-Host "Using module $($modules[0].Name) with version $($modules[0].Version)."
79+
return $modules[0]
80+
}
7981

80-
if ($modules.Count -eq 0)
81-
{
82-
$repositories = (Get-PSRepository).Where({ $_.SourceLocation -eq $repositoryUrl })
83-
if ($repositories.Count -eq 0)
84-
{
85-
Register-PSRepository -Name $repositoryUrl -SourceLocation $repositoryUrl -InstallationPolicy Trusted
86-
$repositories = (Get-PSRepository).Where({ $_.SourceLocation -eq $repositoryUrl })
87-
if ($repositories.Count -eq 0) {
88-
Write-Error "Failed to register package repository $repositoryUrl."
89-
return
90-
}
91-
}
92-
$repository = $repositories[0]
93-
94-
if ($repository.InstallationPolicy -ne "Trusted") {
95-
Set-PSRepository -Name $repository.Name -InstallationPolicy "Trusted"
96-
}
97-
98-
Write-Host "Installing module $moduleName with min version $version from $repositoryUrl"
99-
# Install under CurrentUser scope so that the end up under $CurrentUserModulePath for caching
100-
Install-Module $moduleName -MinimumVersion $version -Repository $repository.Name -Scope CurrentUser -Force
101-
102-
# Ensure module installed
103-
$modules = (Get-Module -ListAvailable $moduleName)
104-
if ($version -as [Version]) {
105-
$modules = $modules.Where({ [Version]$_.Version -ge [Version]$version })
106-
}
107-
108-
if ($modules.Count -eq 0) {
109-
Write-Error "Failed to install module $moduleName with version $version"
110-
return
111-
}
82+
$repositoryUrl = if ($repositoryUrl) {
83+
$repositoryUrl
84+
} elseif ($mirrorFeedOverrides.Contains("${moduleName};${version}")) {
85+
$mirrorFeedOverrides["${moduleName};${version}"]
86+
} else {
87+
$DefaultPSRepositoryUrl
88+
}
89+
90+
$repositories = (Get-PSRepository).Where({ $_.SourceLocation -eq $repositoryUrl })
91+
if ($repositories.Count -eq 0)
92+
{
93+
Register-PSRepository -Name $repositoryUrl -SourceLocation $repositoryUrl -InstallationPolicy Trusted
94+
$repositories = (Get-PSRepository).Where({ $_.SourceLocation -eq $repositoryUrl })
95+
if ($repositories.Count -eq 0) {
96+
Write-Error "Failed to register package repository $repositoryUrl."
97+
return
11298
}
11399
}
114-
finally {
115-
$mutex.ReleaseMutex()
100+
$repository = $repositories[0]
101+
102+
if ($repository.InstallationPolicy -ne "Trusted") {
103+
Set-PSRepository -Name $repository.Name -InstallationPolicy "Trusted"
116104
}
105+
106+
Write-Host "Installing module $moduleName with min version $version from $repositoryUrl"
107+
# Install under CurrentUser scope so that the end up under $CurrentUserModulePath for caching
108+
Install-Module $moduleName -MinimumVersion $version -Repository $repository.Name -Scope CurrentUser -Force
109+
110+
# Ensure module installed
111+
$modules = (Get-Module -ListAvailable $moduleName)
112+
if ($version -as [Version]) {
113+
$modules = $modules.Where({ [Version]$_.Version -ge [Version]$version })
114+
}
115+
116+
if ($modules.Count -eq 0) {
117+
Write-Error "Failed to install module $moduleName with version $version"
118+
return
119+
}
120+
121+
Write-Host "Using module $($modules[0].Name) with version $($modules[0].Version)."
122+
} finally {
123+
$mutex.ReleaseMutex()
117124
}
118125

119-
Write-Host "Using module $($modules[0].Name) with version $($modules[0].Version)."
120126
return $modules[0]
121127
}
122128

0 commit comments

Comments
 (0)