Skip to content

Commit 97016f4

Browse files
committed
Refactor Install-Dependencies to only install or update as needed unless Force is used.
1 parent 80eb081 commit 97016f4

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

build/Install-Dependencies.ps1

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,47 +19,59 @@ param(
1919
$Force
2020
)
2121

22-
# Get module settings from the relevant ModuleSettings.json file.
22+
# Get module settings from the relevant ModuleSettings.json file or a file that is manually specified.
2323
if ($ModuleSettingsPath) {
2424
$SettingsPath = $ModuleSettingsPath
2525
} else {
2626
$SettingsPath = "$PSScriptRoot/../module/$ModuleName/config/ModuleSettings.json"
2727
}
28+
29+
Write-Host "Getting module settings from: '$SettingsPath'" -ForegroundColor Cyan
2830
$ModuleSettings = Get-Content -Path $SettingsPath | ConvertFrom-Json
29-
$RequiredVersion = $ModuleSettings.destinationModuleVersion
31+
$SourceModule = $ModuleSettings.sourceModule
32+
$DependencyRequiredVersion = $ModuleSettings.destinationModuleVersion
3033

31-
# Do not check for installed modules if -Force is specified.
32-
if ($Force) {
33-
Write-Verbose 'Skipping the check for installed prerequisites. Forcing the installation of all required modules.'
34-
} else {
35-
Write-Verbose 'Checking installed modules for required dependencies.'
36-
$InstalledModules = Get-Module -ListAvailable -Verbose:$false | Group-Object -Property Name
34+
# Get the names of the source and destination modules from the ModuleSettings.json file.
35+
[string[]]$ModuleNames = (($ModuleSettings.destinationModuleName) + $SourceModule).Split()
36+
37+
Write-Host 'Checking for installed source and dependency modules...' -ForegroundColor Cyan
38+
$InstalledModules = foreach ( $Module in $ModuleNames ) {
39+
Get-Module -Name $Module -ListAvailable -Verbose:$false | Sort-Object Name
3740
}
3841

39-
# Install the AzureAD module.
40-
$SourceModule = $ModuleSettings.SourceModule
41-
if (($InstalledModules.Name -contains $SourceModule) -and -not $Force) {
42-
Write-Verbose "Checking for updates to the '$SourceModule' module."
43-
} else {
44-
Write-Verbose("Installing Module: $sourceModule")
42+
# Check if the source module is installed and then install it or update it.
43+
$IsSourceInstalled = $InstalledModules.Name -contains $SourceModule
44+
if (
45+
(-not $IsSourceInstalled) -or
46+
($IsSourceInstalled -and $Force.IsPresent)
47+
) {
48+
Write-Host "Installing Module: '$SourceModule'" -ForegroundColor Green
4549
try {
46-
Install-Module $sourceModule -Scope CurrentUser -Force -AllowClobber
50+
Install-Module $SourceModule -Scope CurrentUser -Force -AllowClobber
4751
} catch {
48-
Write-Error "Failed to install the $sourceModule module. Error: $_"
52+
Write-Error "Failed to install the '$SourceModule' module. Error: $_"
4953
}
5054
}
5155

52-
# Install the required module dependencies if missing the required version or if -Force.
53-
foreach ($moduleName in $ModuleSettings.destinationModuleName) {
54-
$InstalledModuleReference = $InstalledModules.Where({ $_.Name -eq $moduleName })
55-
if (-not $InstalledModuleReference -or $Force) {
56-
Write-Verbose "Installing version $RequiredVersion of $moduleName"
56+
# Install or update the destination modules specified in the ModuleSettings.json file.
57+
foreach ($DestinationModuleName in $ModuleSettings.destinationModuleName) {
58+
$IsDependencyInstalled = $InstalledModules.Name -contains $DestinationModuleName
59+
if (
60+
# Force installation if the module is not installed or if the Force switch is present.
61+
(-not $IsDependencyInstalled) -or ($IsDependencyInstalled -and $Force.IsPresent)
62+
) {
63+
Write-Host "Installing Module: '$DestinationModuleName'" -ForegroundColor Green
64+
try {
65+
Install-Module $DestinationModuleName -RequiredVersion $DependencyRequiredVersion -Scope CurrentUser -Force -AllowClobber
66+
} catch {
67+
Write-Error "Failed to install the '$DestinationModuleName' module. Error: $_"
68+
}
69+
} else {
70+
Write-Host "Updating Module: '$DestinationModuleName'" -ForegroundColor Green
5771
try {
58-
Install-Module $moduleName -Scope CurrentUser -RequiredVersion $RequiredVersion -Force -AllowClobber
72+
Update-Module -Name $DestinationModuleName -RequiredVersion $DependencyRequiredVersion -ErrorAction SilentlyContinue
5973
} catch {
60-
Write-Error "Failed to install module $moduleName ${RequiredVersion}. Error: $_"
74+
Write-Warning "Failed to update module '$DestinationModuleName' to version ${RequiredVersion}. Error: $_"
6175
}
62-
} elseif ($InstalledModuleReference.Group.Version -contains $RequiredVersion) {
63-
Write-Verbose "Found version $RequiredVersion of $moduleName"
6476
}
6577
}

0 commit comments

Comments
 (0)