Skip to content

Commit f811cca

Browse files
Refactor Resolve-PSModuleDependency to enhance version handling and improve parameter usage for Install-PSResource
1 parent 48672a6 commit f811cca

File tree

1 file changed

+35
-21
lines changed

1 file changed

+35
-21
lines changed

scripts/helpers/Resolve-PSModuleDependency.ps1

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,72 +29,86 @@
2929
[string] $ManifestFilePath
3030
)
3131

32-
# Helper: Converts the legacy version parameters into a NuGet version range.
32+
# Helper: Convert legacy version parameters into a NuGet version range string.
3333
function Convert-VersionSpec {
3434
param(
3535
[string]$MinimumVersion,
3636
[string]$MaximumVersion,
3737
[string]$RequiredVersion
3838
)
3939
if ($RequiredVersion) {
40-
# Exact match – note that for an exact version, using bracket notation
41-
# helps ensure that Install-PSResource looks for that version only.
40+
# Use exact match in bracket notation.
4241
return "[$RequiredVersion]"
4342
} elseif ($MinimumVersion -and $MaximumVersion) {
44-
# Both bounds provided; note that this makes both ends inclusive.
43+
# Both bounds provided; both are inclusive.
4544
return "[$MinimumVersion,$MaximumVersion]"
4645
} elseif ($MinimumVersion) {
47-
# Only a minimum is provided.
48-
# Using the notation “[1.0.0.0, ]” ensures a minimum-inclusive search.
46+
# Only a minimum is provided. Use a minimum-inclusive range.
4947
return "[$MinimumVersion, ]"
5048
} elseif ($MaximumVersion) {
51-
# Only a maximum is provided; here we use an open lower bound.
49+
# Only a maximum is provided; lower bound open.
5250
return "(, $MaximumVersion]"
5351
} else {
5452
return $null
5553
}
5654
}
5755

5856
Write-Host 'Resolving dependencies'
59-
6057
$manifest = Import-PowerShellDataFile -Path $ManifestFilePath
6158
Write-Host " - Reading [$ManifestFilePath]"
6259
Write-Host " - Found [$($manifest.RequiredModules.Count)] module(s) to install"
6360

6461
foreach ($requiredModule in $manifest.RequiredModules) {
65-
$installParams = @{
62+
# Build parameters for Install-PSResource (new version spec).
63+
$psResourceParams = @{
6664
TrustRepository = $true
6765
}
66+
# Build parameters for Import-Module (legacy version spec).
67+
$importParams = @{
68+
Force = $true
69+
Verbose = $false
70+
}
6871

6972
if ($requiredModule -is [string]) {
70-
$installParams.Name = $requiredModule
73+
$psResourceParams.Name = $requiredModule
74+
$importParams.Name = $requiredModule
7175
} else {
72-
$installParams.Name = $requiredModule.ModuleName
76+
$psResourceParams.Name = $requiredModule.ModuleName
77+
$importParams.Name = $requiredModule.ModuleName
7378

74-
# Convert legacy version parameters into the new –Version spec.
79+
# Convert legacy version info for Install-PSResource.
7580
$versionSpec = Convert-VersionSpec `
7681
-MinimumVersion $requiredModule.ModuleVersion `
7782
-MaximumVersion $requiredModule.MaximumVersion `
7883
-RequiredVersion $requiredModule.RequiredVersion
7984

8085
if ($versionSpec) {
81-
$installParams.Version = $versionSpec
86+
$psResourceParams.Version = $versionSpec
87+
}
88+
89+
# For Import-Module, keep the original version parameters.
90+
if ($requiredModule.ModuleVersion) {
91+
$importParams.MinimumVersion = $requiredModule.ModuleVersion
92+
}
93+
if ($requiredModule.RequiredVersion) {
94+
$importParams.RequiredVersion = $requiredModule.RequiredVersion
95+
}
96+
if ($requiredModule.MaximumVersion) {
97+
$importParams.MaximumVersion = $requiredModule.MaximumVersion
8298
}
8399
}
84100

85-
Write-Host " - [$($installParams.Name)] - Installing module with version spec: $($installParams.Version)"
101+
Write-Host " - [$($psResourceParams.Name)] - Installing module with Install-PSResource using version spec: $($psResourceParams.Version)"
86102
$VerbosePreferenceOriginal = $VerbosePreference
87103
$VerbosePreference = 'SilentlyContinue'
88-
89-
# Basic retry logic in case of transient errors.
90104
$retryCount = 5
91105
$retryDelay = 10
92106
for ($i = 0; $i -lt $retryCount; $i++) {
93107
try {
94-
Install-PSResource @installParams
108+
Install-PSResource @psResourceParams
95109
break
96110
} catch {
97-
Write-Warning "Installation of $($installParams.Name) failed with error: $_"
111+
Write-Warning "Installation of $($psResourceParams.Name) failed with error: $_"
98112
if ($i -eq $retryCount - 1) {
99113
throw
100114
}
@@ -104,12 +118,12 @@
104118
}
105119
$VerbosePreference = $VerbosePreferenceOriginal
106120

107-
Write-Host " - [$($installParams.Name)] - Importing module"
121+
Write-Host " - [$($importParams.Name)] - Importing module with legacy version spec"
108122
$VerbosePreferenceOriginal = $VerbosePreference
109123
$VerbosePreference = 'SilentlyContinue'
110-
Import-Module @installParams
124+
Import-Module @importParams
111125
$VerbosePreference = $VerbosePreferenceOriginal
112-
Write-Host " - [$($installParams.Name)] - Done"
126+
Write-Host " - [$($importParams.Name)] - Done"
113127
}
114128
Write-Host ' - Resolving dependencies - Done'
115129
}

0 commit comments

Comments
 (0)