Skip to content

Commit 1d4359b

Browse files
committed
feat(signing): ✨ Add verbose logging for certificate resolution and build tasks
* Added verbose output for certificate resolution in `Get-PSBuildCertificate`. * Introduced `SkipCertificateValidation` option in `build.properties.ps1` for CI environments. * Enhanced `psakeFile.ps1` to support verbose logging across various build tasks. * Improved readability and maintainability of the build script.
1 parent d8f3479 commit 1d4359b

4 files changed

Lines changed: 43 additions & 11 deletions

File tree

PowerShellBuild/Public/Get-PSBuildCertificate.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,5 +195,6 @@ function Get-PSBuildCertificate {
195195
Write-Verbose "Certificate validation passed: HasPrivateKey=$($cert.HasPrivateKey), NotAfter=$($cert.NotAfter), CodeSigningEKU=Present"
196196
}
197197

198+
Write-Verbose ('Certificate resolution complete: ' + ($cert ? $cert.Subject : 'No certificate found'))
198199
$cert
199200
}

PowerShellBuild/build.properties.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,13 @@ $moduleVersion = (Import-PowerShellDataFile -Path $env:BHPSModuleManifest).Modul
185185
# Useful for Azure Key Vault, HSM, or other custom certificate providers.
186186
Certificate = $null
187187

188+
# When true and using the Store or Thumbprint sources, skip the
189+
# certificate validity check that ensures the certificate is not expired
190+
# and has a private key. This is not recommended for production use but
191+
# can be useful in CI environments where certificates are frequently
192+
# renewed and updated.
193+
SkipCertificateValidation = $false
194+
188195
# RFC 3161 timestamp server URI embedded in Authenticode signatures.
189196
TimestampServer = 'http://timestamp.digicert.com'
190197

PowerShellBuild/psakeFile.ps1

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@
33
Remove-Variable -Name PSBPreference -Scope Script -Force -ErrorAction Ignore
44
Set-Variable -Name PSBPreference -Option ReadOnly -Scope Script -Value (. ([IO.Path]::Combine($PSScriptRoot, 'build.properties.ps1')))
55

6-
Properties {}
6+
Properties {
7+
$importLocalizedDataSplat = @{
8+
BindingVariable = 'LocalizedData'
9+
FileName = 'Messages.psd1'
10+
ErrorAction = 'SilentlyContinue'
11+
}
12+
Import-LocalizedData @importLocalizedDataSplat
13+
}
714

815
FormatTaskName {
916
param($taskName)
@@ -64,11 +71,11 @@ if ($null -eq $PSBSignDependency) {
6471
# Task default -depends Test
6572

6673
Task Init {
67-
Initialize-PSBuild -UseBuildHelpers -BuildEnvironment $PSBPreference
74+
Initialize-PSBuild -UseBuildHelpers -BuildEnvironment $PSBPreference -Verbose:($VerbosePreference -eq 'Continue')
6875
} -Description 'Initialize build environment variables'
6976

7077
Task Clean -Depends $PSBCleanDependency {
71-
Clear-PSBuildOutputFolder -Path $PSBPreference.Build.ModuleOutDir
78+
Clear-PSBuildOutputFolder -Path $PSBPreference.Build.ModuleOutDir -Verbose:($VerbosePreference -eq 'Continue')
7279
} -Description 'Clears module output directory'
7380

7481
Task StageFiles -Depends $PSBStageFilesDependency {
@@ -98,7 +105,7 @@ Task StageFiles -Depends $PSBStageFilesDependency {
98105
}
99106
}
100107

101-
Build-PSBuildModule @buildParams
108+
Build-PSBuildModule @buildParams -Verbose:($VerbosePreference -eq 'Continue')
102109
} -Description 'Builds module based on source directory'
103110

104111
Task Build -Depends $PSBBuildDependency -Description 'Builds module and generate help documentation'
@@ -121,7 +128,7 @@ Task Analyze -Depends $PSBAnalyzeDependency -PreCondition $analyzePreReqs {
121128
SeverityThreshold = $PSBPreference.Test.ScriptAnalysis.FailBuildOnSeverityLevel
122129
SettingsPath = $PSBPreference.Test.ScriptAnalysis.SettingsPath
123130
}
124-
Test-PSBuildScriptAnalysis @analyzeParams
131+
Test-PSBuildScriptAnalysis @analyzeParams -Verbose:($VerbosePreference -eq 'Continue')
125132
} -Description 'Execute PSScriptAnalyzer tests'
126133

127134
$pesterPreReqs = {
@@ -155,6 +162,7 @@ Task Pester -Depends $PSBPesterDependency -PreCondition $pesterPreReqs {
155162
ImportModule = $PSBPreference.Test.ImportModule
156163
SkipRemainingOnFailure = $PSBPreference.Test.SkipRemainingOnFailure
157164
OutputVerbosity = $PSBPreference.Test.OutputVerbosity
165+
Verbose = $VerbosePreference -eq 'Continue'
158166
}
159167
Test-PSBuildPester @pesterParams
160168
} -Description 'Execute Pester tests'
@@ -182,6 +190,7 @@ Task GenerateMarkdown -Depends $PSBGenerateMarkdownDependency -PreCondition $gen
182190
AlphabeticParamsOrder = $PSBPreference.Docs.AlphabeticParamsOrder
183191
ExcludeDontShow = $PSBPreference.Docs.ExcludeDontShow
184192
UseFullTypeName = $PSBPreference.Docs.UseFullTypeName
193+
Verbose = $VerbosePreference -eq 'Continue'
185194
}
186195
Build-PSBuildMarkdown @buildMDParams
187196
} -Description 'Generates PlatyPS markdown files from module help'
@@ -195,7 +204,7 @@ $genHelpFilesPreReqs = {
195204
$result
196205
}
197206
Task GenerateMAML -Depends $PSBGenerateMAMLDependency -PreCondition $genHelpFilesPreReqs {
198-
Build-PSBuildMAMLHelp -Path $PSBPreference.Docs.RootDir -DestinationPath $PSBPreference.Build.ModuleOutDir
207+
Build-PSBuildMAMLHelp -Path $PSBPreference.Docs.RootDir -DestinationPath $PSBPreference.Build.ModuleOutDir -Verbose:($VerbosePreference -eq 'Continue')
199208
} -Description 'Generates MAML-based help from PlatyPS markdown files'
200209

201210
$genUpdatableHelpPreReqs = {
@@ -207,7 +216,7 @@ $genUpdatableHelpPreReqs = {
207216
$result
208217
}
209218
Task GenerateUpdatableHelp -Depends $PSBGenerateUpdatableHelpDependency -PreCondition $genUpdatableHelpPreReqs {
210-
Build-PSBuildUpdatableHelp -DocsPath $PSBPreference.Docs.RootDir -OutputPath $PSBPreference.Help.UpdatableHelpOutDir
219+
Build-PSBuildUpdatableHelp -DocsPath $PSBPreference.Docs.RootDir -OutputPath $PSBPreference.Help.UpdatableHelpOutDir -Verbose:($VerbosePreference -eq 'Continue')
211220
} -Description 'Create updatable help .cab file based on PlatyPS markdown help'
212221

213222
Task Publish -Depends $PSBPublishDependency {
@@ -248,6 +257,8 @@ Task SignModule -Depends $PSBSignModuleDependency -PreCondition $signModulePreRe
248257
CertStoreLocation = $PSBPreference.Sign.CertStoreLocation
249258
CertificateEnvVar = $PSBPreference.Sign.CertificateEnvVar
250259
CertificatePasswordEnvVar = $PSBPreference.Sign.CertificatePasswordEnvVar
260+
SkipValidation = $PSBPreference.Sign.SkipCertificateValidation
261+
Verbose = $VerbosePreference -eq 'Continue'
251262
}
252263
if ($PSBPreference.Sign.Thumbprint) {
253264
$certParams.Thumbprint = $PSBPreference.Sign.Thumbprint
@@ -273,6 +284,7 @@ Task SignModule -Depends $PSBSignModuleDependency -PreCondition $signModulePreRe
273284
TimestampServer = $PSBPreference.Sign.TimestampServer
274285
HashAlgorithm = $PSBPreference.Sign.HashAlgorithm
275286
Include = $PSBPreference.Sign.FilesToSign
287+
Verbose = $VerbosePreference -eq 'Continue'
276288
}
277289
Invoke-PSBuildModuleSigning @signingParams
278290
} -Description 'Signs module files (*.psd1, *.psm1, *.ps1) with an Authenticode signature'
@@ -301,6 +313,7 @@ Task BuildCatalog -Depends $PSBBuildCatalogDependency -PreCondition $buildCatalo
301313
ModulePath = $PSBPreference.Build.ModuleOutDir
302314
CatalogFilePath = $catalogFilePath
303315
CatalogVersion = $PSBPreference.Sign.Catalog.Version
316+
Verbose = $VerbosePreference -eq 'Continue'
304317
}
305318
New-PSBuildFileCatalog @catalogParams
306319
} -Description 'Creates a Windows catalog (.cat) file for the built module'
@@ -323,6 +336,8 @@ Task SignCatalog -Depends $PSBSignCatalogDependency -PreCondition $signCatalogPr
323336
CertStoreLocation = $PSBPreference.Sign.CertStoreLocation
324337
CertificateEnvVar = $PSBPreference.Sign.CertificateEnvVar
325338
CertificatePasswordEnvVar = $PSBPreference.Sign.CertificatePasswordEnvVar
339+
SkipValidation = $PSBPreference.Sign.SkipCertificateValidation
340+
Verbose = $VerbosePreference -eq 'Continue'
326341
}
327342
if ($PSBPreference.Sign.Thumbprint) {
328343
$certParams.Thumbprint = $PSBPreference.Sign.Thumbprint
@@ -354,6 +369,7 @@ Task SignCatalog -Depends $PSBSignCatalogDependency -PreCondition $signCatalogPr
354369
TimestampServer = $PSBPreference.Sign.TimestampServer
355370
HashAlgorithm = $PSBPreference.Sign.HashAlgorithm
356371
Include = @($catalogFileName)
372+
Verbose = $VerbosePreference -eq 'Continue'
357373
}
358374
Invoke-PSBuildModuleSigning @signingParams
359375
} -Description 'Signs the module catalog (.cat) file with an Authenticode signature'

tests/TestModule/build.ps1

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,23 @@ if ($Bootstrap.IsPresent) {
3636
}
3737

3838
if ($BuildTool -eq 'psake') {
39-
if (Get-Module InvokeBuild) {Remove-Module InvokeBuild -Force}
39+
if (Get-Module InvokeBuild) { Remove-Module InvokeBuild -Force }
4040
# Execute psake task(s)
4141
$psakeFile = './psakeFile.ps1'
4242
if ($PSCmdlet.ParameterSetName -eq 'Help') {
43-
Get-PSakeScriptTasks -buildFile $psakeFile |
43+
Get-PSakeScriptTasks -BuildFile $psakeFile |
4444
Format-Table -Property Name, Description, Alias, DependsOn
4545
} else {
4646
Set-BuildEnvironment -Force
47-
Invoke-psake -buildFile $psakeFile -taskList $Task -nologo -properties $Properties
47+
$invokepsakeSplat = @{
48+
buildFile = $psakeFile
49+
taskList = $Task
50+
nologo = $true
51+
properties = $Properties
52+
}
53+
if ($PSBoundParameters.ContainsKey('Verbose')) { $invokepsakeSplat.Verbose = $true }
54+
55+
Invoke-psake @invokepsakeSplat
4856
exit ([int](-not $psake.build_success))
4957
}
5058
} else {
@@ -53,7 +61,7 @@ if ($BuildTool -eq 'psake') {
5361
} else {
5462
# Execute IB task(s)
5563
Import-Module InvokeBuild
56-
if ($Task -eq 'Default') {$Task = '.'}
64+
if ($Task -eq 'Default') { $Task = '.' }
5765
Invoke-Build -File ./.build.ps1 -Task $Task
5866
}
5967
}

0 commit comments

Comments
 (0)