-
Notifications
You must be signed in to change notification settings - Fork 132
Fixing build - Module Manifest updates #933
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
0836290
03efde0
b01876b
c7c526a
b53f1a1
918073b
6569f76
dedb802
c292e78
1278c43
9670d9e
87d79b3
9ade897
b794dfb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -54,30 +54,24 @@ if (-not $SkipModuleInstallation.IsPresent) | |||||
| $moduleManifest = Import-PowerShellDataFile -Path $ModuleManifestPath -ErrorAction Stop | ||||||
| [Microsoft.PowerShell.Commands.ModuleSpecification[]]$requiredModules = $moduleManifest.RequiredModules | ||||||
| [Microsoft.PowerShell.Commands.ModuleSpecification[]]$externalModuleDependencies = $moduleManifest.PrivateData.ExternalModuleDependencies | ||||||
| # [Microsoft.PowerShell.Commands.ModuleSpecification[]]$windowsPowerShellRequiredModules = $moduleManifest.PrivateData.WindowsPowerShellRequiredModules | ||||||
|
|
||||||
| $requiredModuleToSave = $requiredModules.Where{$_.Name -notin $externalModuleDependencies.Name} | ||||||
| # $requiredModuleToSave += $windowsPowerShellRequiredModules.Where{ $_.Name -notin $requiredModules.Name -and $_.Name -notin $externalModuleDependencies.Name } | ||||||
|
|
||||||
| if (-not $SkipModuleInstallation.IsPresent) | ||||||
| { | ||||||
| Write-Host -Object "`r`n" | ||||||
| Write-Host -Object 'Resolving dependencies...' -ForegroundColor Green | ||||||
|
|
||||||
| $saveModuleCmdParams = @{ | ||||||
| Path = $OutputPath | ||||||
| } | ||||||
|
|
||||||
| Write-Host -Object "`r`n" | ||||||
| Write-Host -Object ('Resolving {0} dependencies...' -f $requiredModuleToSave.Count) -ForegroundColor Green | ||||||
|
|
||||||
| if ($saveModuleCmd = (Get-Command -Name Save-PSResource -ErrorAction Ignore)) | ||||||
| { | ||||||
| $saveModuleCmdParams.Add('TrustRepository', $true) | ||||||
| $saveModuleCmdParams.Add('Prerelease', $AllowPrerelease.IsPresent) | ||||||
| Write-Verbose -Message "Saving required modules using Save-PSResource..." | ||||||
| } | ||||||
| elseif ($saveModuleCmd = (Get-Command -Name Save-Module -ErrorAction Ignore)) | ||||||
| { | ||||||
| $saveModuleCmdParams.Add('Force', $true) | ||||||
| $saveModuleCmdParams.Add('AllowPrerelease', $AllowPrerelease.IsPresent) | ||||||
| Write-Verbose -Message "Saving required modules using Save-Module..." | ||||||
| } | ||||||
| else | ||||||
|
|
@@ -89,25 +83,7 @@ if (-not $SkipModuleInstallation.IsPresent) | |||||
| foreach ($moduleSpec in $requiredModuleToSave) | ||||||
| { | ||||||
| Write-Verbose -Message ("Saving module {0} with version {1}..." -f $moduleSpec.Name, $moduleSpec.Version) | ||||||
| $saveModuleCmdParamsClone = $saveModuleCmdParams.Clone() | ||||||
| $isModulePresent = Get-Module -Name $moduleSpec.Name -ListAvailable -ErrorAction Ignore | Where-Object { | ||||||
| $isValid = $true | ||||||
| if ($moduleSpec.Guid) | ||||||
| { | ||||||
| $isValid = $_.Guid -eq $moduleSpec.Guid | ||||||
| } | ||||||
|
|
||||||
| if ($moduleSpec.Version) | ||||||
| { | ||||||
| $isValid = $isValid -and $_.Version -ge [Version]$moduleSpec.Version | ||||||
| } | ||||||
| elseif ($moduleSpec.RequiredVersion) | ||||||
| { | ||||||
| $isValid = $isValid -and $_.Version -eq [Version]$moduleSpec.RequiredVersion | ||||||
| } | ||||||
|
|
||||||
| $isValid | ||||||
| } | ||||||
| $isModulePresent = Get-Module -FullyQualifiedName $moduleSpec -ListAvailable -ErrorAction Ignore | ||||||
|
|
||||||
| if ($isModulePresent) | ||||||
| { | ||||||
|
|
@@ -117,26 +93,70 @@ if (-not $SkipModuleInstallation.IsPresent) | |||||
|
|
||||||
| try | ||||||
| { | ||||||
| $saveModuleCmdParamsClone['Name'] = $moduleSpec.Name | ||||||
| if ($moduleSpec.Version -and $saveModuleCmd.Name -eq 'Save-Module') | ||||||
| if ($saveModuleCmd.Name -eq 'Save-PSResource') | ||||||
| { | ||||||
| $saveModuleCmdParamsClone['MinimumVersion'] = $moduleSpec.Version | ||||||
| # To Save-PSResource we need to first Find-PSResource to get the latest available in given range. | ||||||
| $findModuleParams = @{ | ||||||
| Name = $moduleSpec.Name | ||||||
| ErrorAction = 'Stop' | ||||||
| 'Prerelease' = $AllowPrerelease.IsPresent | ||||||
| } | ||||||
|
|
||||||
| # Find-PSResource uses NuGet version range syntax: https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort#version-ranges | ||||||
| if ($moduleSpec.RequiredVersion) { | ||||||
| # Absolute required version | ||||||
| $findModuleParams['Version'] = '[{0}]' -f $moduleSpec.RequiredVersion | ||||||
| } | ||||||
| elseif ($moduleSpec.MaximumVersion -and $moduleSpec.Version) { | ||||||
| # Minimum and maximum version (exact range) inclusive | ||||||
| $findModuleParams['Version'] = '[{0},{1}]' -f $moduleSpec.Version, $moduleSpec.MaximumVersion | ||||||
| } | ||||||
| elseif ($moduleSpec.MaximumVersion) { | ||||||
| # Maximum version inclusive | ||||||
| $findModuleParams['Version'] = '(,{0}]' -f $moduleSpec.MaximumVersion | ||||||
| } | ||||||
| elseif ($moduleSpec.Version) { | ||||||
| # Minimum version inclusive | ||||||
| $findModuleParams['Version'] = '[{0}, )' -f $moduleSpec.Version | ||||||
|
||||||
| $findModuleParams['Version'] = '[{0}, )' -f $moduleSpec.Version | |
| $findModuleParams['Version'] = '[{0}, )' -f $moduleSpec.Version |
gaelcolas marked this conversation as resolved.
Show resolved
Hide resolved
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -54,17 +54,17 @@ if (!$SkipRequiredAssembliesDetection -and $ModuleRequiredAssembliesFileInfo) { | |
| } | ||
|
|
||
| ## Clear Existing RequiredAssemblies, NestedModules, and FileList | ||
| if ($paramUpdateModuleManifest.ContainsKey('RequiredAssemblies')) { | ||
| if (!$paramUpdateModuleManifest['RequiredAssemblies']) { $paramUpdateModuleManifest.Remove('RequiredAssemblies') } | ||
| (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?RequiredAssemblies\s*=\s*@\([^)]*\)", "# RequiredAssemblies = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| } | ||
| if ($paramUpdateModuleManifest.ContainsKey('NestedModules') -and !$paramUpdateModuleManifest['NestedModules']) { | ||
| $paramUpdateModuleManifest.Remove('NestedModules') | ||
| (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?NestedModules\s*=\s*@\([^)]*\)", "# NestedModules = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| } | ||
| if ($paramUpdateModuleManifest.ContainsKey('FileList')) { | ||
| (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?FileList\s*=\s*@\([^)]*\)", "# FileList = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| } | ||
| # if ($paramUpdateModuleManifest.ContainsKey('RequiredAssemblies')) { | ||
| # if (!$paramUpdateModuleManifest['RequiredAssemblies']) { $paramUpdateModuleManifest.Remove('RequiredAssemblies') } | ||
| # (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?RequiredAssemblies\s*=\s*@\([^)]*\)", "# RequiredAssemblies = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| # } | ||
| # if ($paramUpdateModuleManifest.ContainsKey('NestedModules') -and !$paramUpdateModuleManifest['NestedModules']) { | ||
| # $paramUpdateModuleManifest.Remove('NestedModules') | ||
| # (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?NestedModules\s*=\s*@\([^)]*\)", "# NestedModules = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| # } | ||
| # if ($paramUpdateModuleManifest.ContainsKey('FileList')) { | ||
| # (Get-Content $ModuleManifestFileInfo.FullName -Raw) -replace "(?s)(#\s*)?FileList\s*=\s*@\([^)]*\)", "# FileList = @()" | Set-Content $ModuleManifestFileInfo.FullName | ||
| # } | ||
|
Comment on lines
+57
to
+67
|
||
|
|
||
| ## Install Module Dependencies | ||
| foreach ($Module in $ModuleManifest['RequiredModules']) { | ||
|
|
@@ -77,17 +77,14 @@ foreach ($Module in $ModuleManifest['RequiredModules']) { | |
|
|
||
| ## Save original manifest content before Update-ModuleManifest corrupts | ||
| ## custom PrivateData keys containing hashtable arrays (it serializes them as type name strings). | ||
| $originalManifestContent = Get-Content $ModuleManifestFileInfo.FullName -Raw | ||
|
|
||
| ## Update Module Manifest in Module Output Directory | ||
| Update-ModuleManifest -Path $ModuleManifestFileInfo.FullName -ErrorAction Stop @paramUpdateModuleManifest | ||
|
|
||
| ## Restore WindowsPowerShellRequiredModules that Update-ModuleManifest corrupted | ||
| if ($originalManifestContent -match '(?s)(WindowsPowerShellRequiredModules\s*=\s*@\([^)]*\))') { | ||
| $originalBlock = $Matches[1] | ||
| $updatedContent = Get-Content $ModuleManifestFileInfo.FullName -Raw | ||
| if ($updatedContent -match '(?s)(WindowsPowerShellRequiredModules\s*=\s*@\([^)]*\))') { | ||
| $updatedContent = $updatedContent.Replace($Matches[1], $originalBlock) | ||
| Set-Content $ModuleManifestFileInfo.FullName -Value $updatedContent -NoNewline | ||
| # Update-ModuleManifest -Path $ModuleManifestFileInfo.FullName -ErrorAction Stop @paramUpdateModuleManifest | ||
| foreach ($key in $paramUpdateModuleManifest.Keys) { | ||
| if ($paramUpdateModuleManifest[$key]) { # Only update manifest properties that have values | ||
| Update-Metadata -Path $ModuleManifestFileInfo.FullName -PropertyName $key -Value $paramUpdateModuleManifest[$key] | ||
| } | ||
| else { | ||
| Write-Debug -Message ('Metadata is empty for {0}, skipping update for this property.' -f $key) | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.