From 0784cddb6f6f702685a280714665996fddf0e0c0 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:35:22 +0200 Subject: [PATCH 01/12] fix module manifest update logic --- src/Build/Update-ModuleMeta.Tests.ps1 | 36 +++++++++++++++++++++ src/Build/Update-ModuleMeta.ps1 | 45 ++++++++++++++++++++++----- 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index 9140089..ca65791 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -18,4 +18,40 @@ Describe 'Update-ModuleMeta' { $foo.Description[0].Text.Length | Should -BeGreaterThan 5 } } + + Context 'Unit Tests' -Tag 'Unit' { + BeforeAll { + # Mock Drone env if its not present + if (!$Env:DRONE) { + $Env:DRONE = $true + $Env:DRONE_BUILD_EVENT = 'tag' + $Env:DRONE_SEMVER = '9.9.9-dev9' + $Env:DRONE_SEMVER_SHORT = '9.9.9' + $Env:DRONE_SEMVER_PRERELEASE = 'dev9' + } + Mock 'Get-RepoPath' -ModuleName 'DroneHelper' { + return @{ + Src = @{ + Manifest = @{ + Item = @{ + FullName = './resources/MyModule.psd1' + } + } + } + } + } + } + It 'Update test module manifest' { + { Update-ModuleMeta } | Should -Not -Throw + } + + It 'Updated manifest is valid' { + { Test-ModuleManifest -Path './resources/MyModule.psd1' } | Should -Not -Throw + } + + It 'External dependencies prop is untouched' { + $d = Test-ModuleManifest -Path './resources/MyModule.psd1' + $d.PrivateData.PSData.ExternalModuleDependencies.Count | Should -Be '2' + } + } } diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 124f342..2e2ecef 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -39,22 +39,53 @@ function Update-ModuleMeta { if ($null -ne $Env:DRONE_SEMVER_PRERELEASE) { $nPreRelease = $Env:DRONE_SEMVER_PRERELEASE } - $ModManifestParams = @{ - Path = $Repo.Src.Manifest.Item.FullName - ModuleVersion = $nVersion - ErrorAction = 'Stop' + $DataParams = @{ + Path = $Repo.Src.Manifest.Item.FullName + ErrorAction = 'Stop' } + # Getting the module manifest as imported object + try { + $ModManifestData = Import-PowerShellDataFile @DataParams + } + catch { + $_.Exception.Message | Write-Debug + $ErrorParams = @{ + Message = "Could not import the module manifest file." + ErrorAction = 'Stop' + } + Write-Error @ErrorParams + } + # Updating the new module version + $ModManifestData.ModuleVersion = $nVersion + + # Updating the prerelease property if there is one if ($nPreRelease) { - $ModManifestParams.PreRelease = $nPreRelease + $ModManifestData.PrivateData.PSData.Prerelease = $nPreRelease } $ManifestData = Test-ModuleManifest -Path $Repo.Src.Manifest.Item.FullName if ( ($nVersion -ne $ManifestData.Version) -or - ($nVersion -ne $ManifestData.PrivateData.PSData.Prerelease) + ($nPreRelease -ne $ManifestData.PrivateData.PSData.Prerelease) ) { - Update-ModuleManifest @ModManifestParams + $OutputFileParams = @{ + Path = $Repo.Src.Manifest.Item.FullName + PassThru = $true + Encoding = 'utf8NoBom' + Force = $true + } + try { + $ModManifestData | ConvertTo-Psd | Set-Content @OutputFileParams + } + catch { + $_.Exception.Message | Write-Debug + $ErrorParams = @{ + Message = "Failed to update the module manifest file" + ErrorAction = 'Stop' + } + Write-Error @ErrorParams + } } else { Write-Verbose -Message 'Identical version given. Skipping update.' -- 2.45.2 From f7e9a411dbd22528d7f8fdd51d9e9355545ae8b8 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:35:31 +0200 Subject: [PATCH 02/12] add test module manifest --- resources/MyModule.psd1 | 141 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 resources/MyModule.psd1 diff --git a/resources/MyModule.psd1 b/resources/MyModule.psd1 new file mode 100644 index 0000000..295a414 --- /dev/null +++ b/resources/MyModule.psd1 @@ -0,0 +1,141 @@ +# +# Module manifest for module 'MyModule' +# +# Generated by: OCram85 +# +# Generated on: 27.07.2022 +# + +@{ + + # Script module or binary module file associated with this manifest. + # RootModule = '' + + # Version number of this module. + ModuleVersion = '0.0.1' + + # Supported PSEditions + # CompatiblePSEditions = @() + + # ID used to uniquely identify this module + GUID = '71364bab-5f39-4c93-a0f6-319d2b6cfc53' + + # Author of this module + Author = 'OCram85' + + # Company or vendor of this module + CompanyName = 'Unknown' + + # Copyright statement for this module + Copyright = '(c) OCram85. All rights reserved.' + + # Description of the functionality provided by this module + # Description = '' + + # Minimum version of the PowerShell engine required by this module + # PowerShellVersion = '' + + # Name of the PowerShell host required by this module + # PowerShellHostName = '' + + # Minimum version of the PowerShell host required by this module + # PowerShellHostVersion = '' + + # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. + # DotNetFrameworkVersion = '' + + # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. + # ClrVersion = '' + + # Processor architecture (None, X86, Amd64) required by this module + # ProcessorArchitecture = '' + + # Modules that must be imported into the global environment prior to importing this module + # RequiredModules = @() + + # Assemblies that must be loaded prior to importing this module + # RequiredAssemblies = @() + + # Script files (.ps1) that are run in the caller's environment prior to importing this module. + # ScriptsToProcess = @() + + # Type files (.ps1xml) to be loaded when importing this module + # TypesToProcess = @() + + # Format files (.ps1xml) to be loaded when importing this module + # FormatsToProcess = @() + + # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess + # NestedModules = @() + + # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. + FunctionsToExport = @() + + # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. + CmdletsToExport = @() + + # Variables to export from this module + VariablesToExport = '*' + + # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. + AliasesToExport = @() + + # DSC resources to export from this module + # DscResourcesToExport = @() + + # List of all modules packaged with this module + # ModuleList = @() + + # List of all files packaged with this module + # FileList = @() + + # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. + PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + # LicenseUri = '' + + # A URL to the main website for this project. + # ProjectUri = '' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + ExternalModuleDependencies = @( + @{ + ModuleName = 'WinSCP' + ModuleVersion = '5.17.8.1' + }, + @{ + ModuleName = 'DataONTAP' + ModuleVersion = '9.7.1.1' + } + ) + + } # End of PSData hashtable + + } # End of PrivateData hashtable + + # HelpInfo URI of this module + # HelpInfoURI = '' + + # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. + # DefaultCommandPrefix = '' + +} + -- 2.45.2 From e6ad2926cf82db7d7ab76d2c7623111dc20d804c Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:35:46 +0200 Subject: [PATCH 03/12] add psdkit dependency --- src/DroneHelper.psd1 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/DroneHelper.psd1 b/src/DroneHelper.psd1 index b022ccf..b221f33 100644 --- a/src/DroneHelper.psd1 +++ b/src/DroneHelper.psd1 @@ -68,6 +68,10 @@ @{ ModuleName = 'posh-git' ModuleVersion = '1.1.0' + }, + @{ + ModuleName = 'PsdKit' + ModuleVersion = '0.6.2' } ) -- 2.45.2 From b8e20f56077b9fed995eee6c0274ca479ab74941 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:43:11 +0200 Subject: [PATCH 04/12] add psdkit deps --- src/Deps/Invoke-InstallDependency.ps1 | 13 +++++++++++++ tools/DevDependency.psm1 | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/Deps/Invoke-InstallDependency.ps1 b/src/Deps/Invoke-InstallDependency.ps1 index 6c451e3..4181f48 100644 --- a/src/Deps/Invoke-InstallDependency.ps1 +++ b/src/Deps/Invoke-InstallDependency.ps1 @@ -56,6 +56,19 @@ function Invoke-InstallDependency { ErrorAction = 'Stop' } Install-Module @PoshParams + + $PsdKitParams = @{ + Name = 'PsdKit' + Scope = 'CurrentUser' + RequiredVersion = '0.6.2' + Force = $true + SkipPublisherCheck = $true + AllowClobber = $true + AllowPrerelease = $true + Verbose = $VerbosePreference + ErrorAction = 'Stop' + } + Install-Module @PsdKitParams } catch { $ExecParams = @{ diff --git a/tools/DevDependency.psm1 b/tools/DevDependency.psm1 index 58542ab..ed4c094 100644 --- a/tools/DevDependency.psm1 +++ b/tools/DevDependency.psm1 @@ -49,6 +49,20 @@ function Invoke-FixDevDependency { ErrorAction = 'Stop' } Install-Module @PoshParams + + + $PsdKitParams = @{ + Name = 'PsdKit' + Scope = 'CurrentUser' + RequiredVersion = '0.6.2' + Force = $true + SkipPublisherCheck = $true + AllowClobber = $true + AllowPrerelease = $true + Verbose = $VerbosePreference + ErrorAction = 'Stop' + } + Install-Module @PsdKitParams } catch { $ExecParams = @{ -- 2.45.2 From 8ea6dc2a2da459abba5e6531a517b53c7203a321 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:52:42 +0200 Subject: [PATCH 05/12] add additional tests --- src/Build/Update-ModuleMeta.Tests.ps1 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index ca65791..dbf14d6 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -43,6 +43,9 @@ Describe 'Update-ModuleMeta' { } It 'Update test module manifest' { { Update-ModuleMeta } | Should -Not -Throw + $data = Test-ModuleManifest -Path './resources/MyModule.psd1' + $data.ModuleVersion | Should -Be '9.9.9' + $data.PrivateData.PSData.Prerelease | Should -Be 'dev9' } It 'Updated manifest is valid' { -- 2.45.2 From bfb18cd684a35bea221c25027a1fc00a8aa548cf Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 10:57:37 +0200 Subject: [PATCH 06/12] fix test case --- src/Build/Update-ModuleMeta.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index dbf14d6..d39c028 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -43,7 +43,7 @@ Describe 'Update-ModuleMeta' { } It 'Update test module manifest' { { Update-ModuleMeta } | Should -Not -Throw - $data = Test-ModuleManifest -Path './resources/MyModule.psd1' + $data = Import-PowerShellDataFile -Path './resources/MyModule.psd1' $data.ModuleVersion | Should -Be '9.9.9' $data.PrivateData.PSData.Prerelease | Should -Be 'dev9' } -- 2.45.2 From 4b05d6a9857e823ad697f926d80a17e095effccd Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 12:33:53 +0200 Subject: [PATCH 07/12] debug tests --- src/Build/Update-ModuleMeta.Tests.ps1 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index d39c028..98344fc 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -42,7 +42,14 @@ Describe 'Update-ModuleMeta' { } } It 'Update test module manifest' { - { Update-ModuleMeta } | Should -Not -Throw + { + $Env:DRONE = $true + $Env:DRONE_BUILD_EVENT = 'tag' + $Env:DRONE_SEMVER = '9.9.9-dev9' + $Env:DRONE_SEMVER_SHORT = '9.9.9' + $Env:DRONE_SEMVER_PRERELEASE = 'dev9' + Update-ModuleMeta + } | Should -Not -Throw $data = Import-PowerShellDataFile -Path './resources/MyModule.psd1' $data.ModuleVersion | Should -Be '9.9.9' $data.PrivateData.PSData.Prerelease | Should -Be 'dev9' -- 2.45.2 From f5494e9eb26b2dbc88f9aaf02940a71b28bc2d26 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 12:39:15 +0200 Subject: [PATCH 08/12] debugging --- src/Build/Update-ModuleMeta.Tests.ps1 | 2 +- src/Build/Update-ModuleMeta.ps1 | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index 98344fc..f402e3a 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -48,7 +48,7 @@ Describe 'Update-ModuleMeta' { $Env:DRONE_SEMVER = '9.9.9-dev9' $Env:DRONE_SEMVER_SHORT = '9.9.9' $Env:DRONE_SEMVER_PRERELEASE = 'dev9' - Update-ModuleMeta + Update-ModuleMeta -Verbose } | Should -Not -Throw $data = Import-PowerShellDataFile -Path './resources/MyModule.psd1' $data.ModuleVersion | Should -Be '9.9.9' diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 2e2ecef..9431c77 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -74,6 +74,7 @@ function Update-ModuleMeta { PassThru = $true Encoding = 'utf8NoBom' Force = $true + Verbose = $VerbosePreference } try { $ModManifestData | ConvertTo-Psd | Set-Content @OutputFileParams -- 2.45.2 From c0a8334d46502a04aeebdae4f73342dbbb552376 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 13:02:19 +0200 Subject: [PATCH 09/12] add path parameter --- src/Build/Update-ModuleMeta.Tests.ps1 | 23 +---------------------- src/Build/Update-ModuleMeta.ps1 | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/Build/Update-ModuleMeta.Tests.ps1 b/src/Build/Update-ModuleMeta.Tests.ps1 index f402e3a..ad19e28 100644 --- a/src/Build/Update-ModuleMeta.Tests.ps1 +++ b/src/Build/Update-ModuleMeta.Tests.ps1 @@ -20,27 +20,6 @@ Describe 'Update-ModuleMeta' { } Context 'Unit Tests' -Tag 'Unit' { - BeforeAll { - # Mock Drone env if its not present - if (!$Env:DRONE) { - $Env:DRONE = $true - $Env:DRONE_BUILD_EVENT = 'tag' - $Env:DRONE_SEMVER = '9.9.9-dev9' - $Env:DRONE_SEMVER_SHORT = '9.9.9' - $Env:DRONE_SEMVER_PRERELEASE = 'dev9' - } - Mock 'Get-RepoPath' -ModuleName 'DroneHelper' { - return @{ - Src = @{ - Manifest = @{ - Item = @{ - FullName = './resources/MyModule.psd1' - } - } - } - } - } - } It 'Update test module manifest' { { $Env:DRONE = $true @@ -48,7 +27,7 @@ Describe 'Update-ModuleMeta' { $Env:DRONE_SEMVER = '9.9.9-dev9' $Env:DRONE_SEMVER_SHORT = '9.9.9' $Env:DRONE_SEMVER_PRERELEASE = 'dev9' - Update-ModuleMeta -Verbose + Update-ModuleMeta -Path './resources/MyModule.psd1' -Verbose } | Should -Not -Throw $data = Import-PowerShellDataFile -Path './resources/MyModule.psd1' $data.ModuleVersion | Should -Be '9.9.9' diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 9431c77..69cbc89 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -27,11 +27,28 @@ function Update-ModuleMeta { '', Justification = 'system state does not change permanent in temp build clients.' )] - param () + param ( + [Parameter(Mandatory = $false)] + [ValidateScript( + { + if (!(Test-Path -Path $_)) { + throw 'Could not find file: {0}' -f $_ + } + } + )] + [ValidateNotNullOrEmpty()] + [string]$Path + ) process { - if ($Env:DRONE) { + if (!$Path) { $Repo = Get-RepoPath + $ManifestFilePath = $Repo.Src.Manifest.Item.FullName + } + else { + $ManifestFilePath = $Path + } + if ($Env:DRONE) { if ($Env:DRONE_BUILD_EVENT -eq 'tag') { if ($null -ne $Env:DRONE_SEMVER) { $nVersion = $Env:DRONE_SEMVER_SHORT @@ -40,7 +57,7 @@ function Update-ModuleMeta { $nPreRelease = $Env:DRONE_SEMVER_PRERELEASE } $DataParams = @{ - Path = $Repo.Src.Manifest.Item.FullName + Path = $ManifestFilePath ErrorAction = 'Stop' } # Getting the module manifest as imported object @@ -63,7 +80,7 @@ function Update-ModuleMeta { $ModManifestData.PrivateData.PSData.Prerelease = $nPreRelease } - $ManifestData = Test-ModuleManifest -Path $Repo.Src.Manifest.Item.FullName + $ManifestData = Test-ModuleManifest -Path $ManifestFilePath if ( ($nVersion -ne $ManifestData.Version) -or -- 2.45.2 From c1513dc5c50c9a82d730956644479a6d8b5b86f4 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 13:04:31 +0200 Subject: [PATCH 10/12] wip --- src/Build/Update-ModuleMeta.ps1 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 69cbc89..89332ad 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -31,7 +31,10 @@ function Update-ModuleMeta { [Parameter(Mandatory = $false)] [ValidateScript( { - if (!(Test-Path -Path $_)) { + if (Test-Path -Path $_) { + return $true + } + else { throw 'Could not find file: {0}' -f $_ } } -- 2.45.2 From 5171a18369afdf92a98c42e8cd1a27c85b2b17b1 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 13:07:00 +0200 Subject: [PATCH 11/12] wip --- src/Build/Update-ModuleMeta.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 89332ad..1aee614 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -90,7 +90,7 @@ function Update-ModuleMeta { ($nPreRelease -ne $ManifestData.PrivateData.PSData.Prerelease) ) { $OutputFileParams = @{ - Path = $Repo.Src.Manifest.Item.FullName + Path = $ManifestFilePath PassThru = $true Encoding = 'utf8NoBom' Force = $true -- 2.45.2 From 775d7cd33941f6b01429ee3ac3df2f6041dea117 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Wed, 27 Jul 2022 13:25:02 +0200 Subject: [PATCH 12/12] replace output type --- src/Build/Update-ModuleMeta.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Build/Update-ModuleMeta.ps1 b/src/Build/Update-ModuleMeta.ps1 index 1aee614..b3edab9 100644 --- a/src/Build/Update-ModuleMeta.ps1 +++ b/src/Build/Update-ModuleMeta.ps1 @@ -91,7 +91,7 @@ function Update-ModuleMeta { ) { $OutputFileParams = @{ Path = $ManifestFilePath - PassThru = $true + #PassThru = $true Encoding = 'utf8NoBom' Force = $true Verbose = $VerbosePreference @@ -109,19 +109,19 @@ function Update-ModuleMeta { } } else { - Write-Verbose -Message 'Identical version given. Skipping update.' + Write-Warning -Message 'Identical version given. Skipping update.' } } else { - Write-Verbose -Message 'Could not read the new Tag / Semver!' + Write-Warning -Message 'Could not read the new Tag / Semver!' } } else { - Write-Verbose -Message 'This pipeline was not triggered by a tag.' + Write-Warning -Message 'This pipeline was not triggered by a tag.' } } else { - Write-Verbose -Message 'Running outside of drone.io pipeline. Skipping module update!' + Write-Warning -Message 'Running outside of drone.io pipeline. Skipping module update!' } } } -- 2.45.2