Skip to content

Commit 8c23b0f

Browse files
committed
Ensure Publish-PSResource also honors ExternalModuleDependencies
1 parent c1c8820 commit 8c23b0f

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

src/code/PublishHelper.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ private string CreateNuspec(
885885
_cmdletPassedIn.WriteDebug("In PublishHelper::CreateNuspec()");
886886

887887
bool isModule = resourceType != ResourceType.Script;
888-
requiredModules = new Hashtable();
888+
requiredModules = new Hashtable(StringComparer.OrdinalIgnoreCase);
889889

890890
if (parsedMetadataHash == null || parsedMetadataHash.Count == 0)
891891
{
@@ -946,6 +946,18 @@ private string CreateNuspec(
946946
{
947947
if (privateData["PSData"] is Hashtable psData)
948948
{
949+
if (psData.ContainsKey("ExternalModuleDependencies"))
950+
{
951+
if (psData["ExternalModuleDependencies"] is string externalModuleDepNameStr)
952+
{
953+
parsedMetadataHash["ExternalModuleDependencies"] = new string[]{ externalModuleDepNameStr };
954+
}
955+
else if(psData["ExternalModuleDependencies"] is string[] externalModuleDepNameArr)
956+
{
957+
parsedMetadataHash["ExternalModuleDependencies"] = externalModuleDepNameArr;
958+
}
959+
}
960+
949961
if (psData.ContainsKey("prerelease") && psData["prerelease"] is string preReleaseVersion)
950962
{
951963
if (!string.IsNullOrEmpty(preReleaseVersion))

test/PublishPSResourceTests/PublishPSResource.Tests.ps1

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,31 @@ Describe "Test Publish-PSResource" -tags 'CI' {
167167
(Get-ChildItem $script:repositoryPath).FullName | Should -Be $expectedPath
168168
}
169169

170+
It "Publish a module with ExternalModuleDependencies should automatically skip that dependency" {
171+
$version = "1.0.0"
172+
$moduleName = "test_ext_dep_module"
173+
$externalDepName = "Appx"
174+
$requiredModName = "test_module10"
175+
$requiredModVersion = "2.0.0"
176+
177+
# First publish RequiredModule dependency
178+
$requiredModulePath = Join-Path -Path $script:PublishModuleBase -ChildPath $requiredModName.psd1
179+
New-ModuleManifest -Path $requiredModulePath -Description "$requiredModName test" -ModuleVersion $requiredModVersion
180+
Publish-PSResource -Path $requiredModulePath -Repository $testRepository2
181+
$res = Find-PSResource $requiredModName -Version $requiredModVersion -Repository $testRepository2
182+
$res.Name | Should -Be $requiredModName
183+
$res.Version | Should -Be $requiredModVersion
184+
185+
# Next publish module which lists $requiredModName and an external module dependency under 'RequiredModules' section
186+
$testModulePath = Join-Path -Path $script:PublishModuleBase -ChildPath $moduleName.psd1
187+
New-ModuleManifest -Path $testModulePath -ModuleVersion $version -Description "$moduleName module" -RequiredModules @( @{ ModuleName = $requiredModName; ModuleVersion = $requiredModVersion }, $externalDepName) -ExternalModuleDependencies $externalDepName
188+
$manifest = Test-ModuleManifest $testModulePath
189+
$manifest.PrivateData.PSData.ExternalModuleDependencies | Should -Contain $externalDepName
190+
Publish-PSResource -Path $testModulePath -Repository $testRepository2
191+
$res2 = Find-PSResource $moduleName -Repository $testRepository2
192+
$res2.Name | Should -Be $moduleName
193+
}
194+
170195
#region Local Source Path
171196
It "Publish a module with -Path and -Repository" {
172197
$version = "1.0.0"

0 commit comments

Comments
 (0)