From ed5a9cd80600ca8f9f64fd4c80586164a01424bd Mon Sep 17 00:00:00 2001 From: Justin Beeson Date: Tue, 10 Dec 2024 07:28:42 -0800 Subject: [PATCH 1/2] feat(Build-PSModule): :sparkles: Use extra script content in .psm1 files in built module --- build.ps1 | 2 +- src/public/Build-PSModule.ps1 | 52 ++++++++++++++++++++++------------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/build.ps1 b/build.ps1 index ddc5e2a..2b5669f 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,6 +1,6 @@ $BuildPSModule = @{ Name = 'PSModuleUtils' - Version = '1.6.1' + Version = '1.7.0-preview1' Description = 'A module with helper functions to build and publish PowerShell modules to the PSGallery.' Tags = ('PSEdition_Desktop', 'PSEdition_Core', 'Windows') } diff --git a/src/public/Build-PSModule.ps1 b/src/public/Build-PSModule.ps1 index d0ba34e..b4f07b0 100644 --- a/src/public/Build-PSModule.ps1 +++ b/src/public/Build-PSModule.ps1 @@ -21,6 +21,9 @@ The description of the module. .PARAMETER Tags The tags for the module. +.PARAMETER LicenseUri +The URL for the repo's license. + .PARAMETER SourceDirectory The source directory of the module. Should be a nested directory that doesn't contain and build scripts. @@ -50,6 +53,7 @@ function Build-PSModule { [String]$Version = '0.0.1', [String]$Description = 'A PowerShell module.', [String[]]$Tags = @('PSEdition_Desktop', 'PSEdition_Core', 'Windows'), + [String]$LicenseUri = 'https://opensource.org/licenses/MIT', [String]$SourceDirectory = "$PWD/src", [String]$OutputDirectory = "$PWD/out", [Switch]$FixScriptAnalyzer @@ -62,6 +66,7 @@ function Build-PSModule { Version = $Version Description = $Description Tags = $Tags + LicenseUri = $LicenseUri SourceDirectory = $SourceDirectory OutputDirectory = $OutputDirectory FixScriptAnalyzer = $FixScriptAnalyzer @@ -97,10 +102,19 @@ function Build-PSModule { Compare-Object -ReferenceObject $functionContent -DifferenceObject $originalFunctionContent | Format-Table | Out-String - ) - $moduleContent += '' - $moduleContent += $functionContent - } + ) + $moduleContent += '' + $moduleContent += $functionContent + } + + $srcModuleContent = Get-Content -Path "$SourceDirectory\$Name.psm1" -Raw + $startIndex = $srcModuleContent.IndexOf('Get-ChildItem') + $subString = $srcModuleContent.Substring($startIndex) + $braceIndex = $subString.IndexOf('}') + $moduleScriptContent = $subString.Substring($braceIndex + 1) + if ($moduleScriptContent) { + $moduleContent += $moduleScriptContent + } $moduleContent | Set-Content -Path "$ModuleOutputDirectory/$name.psm1" -Force $null = New-Item -Path "$ModuleOutputDirectory/private" -ItemType Directory -Force @@ -124,7 +138,7 @@ function Build-PSModule { else { ( New-Guid ).Guid } - $requiredModulesStatement = Get-Content -Path "$SourceDirectory\$Name.psm1" | + $requiredModulesStatement = $srcModuleContent | Where-Object -FilterScript { $_ -match '#Requires' } $requiredModules = (($requiredModulesStatement -split '-Modules ')[1] -split ',').Trim() | ForEach-Object { @@ -137,21 +151,21 @@ function Build-PSModule { } $moduleVersion, $modulePrerelease = $Version -split '-', 2 $newModuleManifest = @{ - Path = $manifestPath - Author = (( & git log --format='%aN' -- . | Sort-Object -Unique ) -join ', ') - CompanyName = $companyName - Copyright = "(c) $( Get-Date -Format yyyy ) $companyName. All rights reserved." - RootModule = "$Name.psm1" - ModuleVersion = $moduleVersion - Guid = $guid - Description = $Description - PowerShellVersion = 5.1 - FunctionsToExport = $functionNames + Path = $manifestPath + Author = (( & git log --format='%aN' -- . | Sort-Object -Unique ) -join ', ') + CompanyName = $companyName + Copyright = "(c) $( Get-Date -Format yyyy ) $companyName. All rights reserved." + RootModule = "$Name.psm1" + ModuleVersion = $moduleVersion + Guid = $guid + Description = $Description + PowerShellVersion = 5.1 + FunctionsToExport = $functionNames CompatiblePSEditions = ('Desktop', 'Core') - Tags = $Tags - ProjectUri = $repoUrl - LicenseUri = 'https://opensource.org/licenses/MIT' - ReleaseNotes = ( git log -1 --pretty=%B )[0] + Tags = $Tags + ProjectUri = $repoUrl + LicenseUri = $LicenseUri + ReleaseNotes = ( git log -1 --pretty=%B )[0] } if ($requiredModules) { $newModuleManifest['RequiredModules'] = $requiredModules From 8e18fc72cefc2c989050e9d0ef2b414e62e168c0 Mon Sep 17 00:00:00 2001 From: Justin Beeson Date: Tue, 10 Dec 2024 08:28:00 -0800 Subject: [PATCH 2/2] fix content split --- src/public/Build-PSModule.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/public/Build-PSModule.ps1 b/src/public/Build-PSModule.ps1 index b4f07b0..9cb753a 100644 --- a/src/public/Build-PSModule.ps1 +++ b/src/public/Build-PSModule.ps1 @@ -102,10 +102,10 @@ function Build-PSModule { Compare-Object -ReferenceObject $functionContent -DifferenceObject $originalFunctionContent | Format-Table | Out-String - ) - $moduleContent += '' - $moduleContent += $functionContent - } + ) + $moduleContent += '' + $moduleContent += $functionContent + } $srcModuleContent = Get-Content -Path "$SourceDirectory\$Name.psm1" -Raw $startIndex = $srcModuleContent.IndexOf('Get-ChildItem') @@ -138,7 +138,7 @@ function Build-PSModule { else { ( New-Guid ).Guid } - $requiredModulesStatement = $srcModuleContent | + $requiredModulesStatement = $srcModuleContent.Split("`n") | Where-Object -FilterScript { $_ -match '#Requires' } $requiredModules = (($requiredModulesStatement -split '-Modules ')[1] -split ',').Trim() | ForEach-Object {