All notable changes to this template will be documented in this file.
The format is based on Keep a Changelog,
and this project uses Calendar Versioning (YYYY.MM.DD).
For the changelog of a module initialized from this template, see the module's
own CHANGELOG.md (generated from CHANGELOG.template.md during init).
- "Repository secrets" section in
README.mddocumenting the GitHub Actions secrets the bundled workflows expect (PSGALLERY_API_KEY,CODECOV_TOKEN,GITGUARDIAN_API_KEY) — required vs. optional, source, and failure mode when missing. Initialize-Template.ps1now mentions configuring GitHub repository secrets in its post-init "Next steps" output, between the build-test step and the first push.tests/Help.tests.ps1can now run standalone — e.g.Invoke-Pester tests/Help.tests.ps1directly from an editor (or an agent running a single test) — without first running./build.ps1. Its build-bootstrap guard (in bothBeforeDiscoveryandBeforeAll) now delegates tobuild.ps1 -Task 'Build' -Bootstrap, the canonical entry point, so dependency bootstrap, BuildHelpers environment setup, and module staging all happen through the real build path instead of a partial reimplementation. The guard only fires whenBHBuildOutputis unset, so there is no effect on CI or./build.ps1runs.build.ps1is invoked with the call operator (&), not dot-sourced, so its terminatingexitis contained to the script boundary and does not end the Pester run.
- Renamed required PowerShell Gallery publish secret
PS_GALLERY_KEY→PSGALLERY_API_KEYso the secret name matches the env var name PowerShellBuild reads (eliminating the previous mapping caveat). New modules created from the template after this change pick up the new name automatically. Migration for existing modules: create a newPSGALLERY_API_KEYrepo secret with the same value, update.github/workflows/PublishModuleToPowerShellGallery.yamlto referencesecrets.PSGALLERY_API_KEY, then delete the oldPS_GALLERY_KEYsecret. - Test scaffolding (
tests/Help.tests.ps1,tests/Manifest.tests.ps1,tests/Meta.tests.ps1,tests/MetaFixers.psm1, and thetests/Unit/templates) no longer names parameters on single-argument calls (e.g.Test-Path $path,Get-Module $name,Get-Help $command), matching the scoped named-parameter rule — name parameters only when a call passes two or more arguments. A trailing switch counts as an argument, soSplit-Path -Path $x -Parent,Get-Content -Path $x -Raw, andGet-ChildItem -Path $x -Recursekeep their names, as do genuinely multi-value calls (Join-Path,Get-Command -Name … -CommandType …) andTest-Path -LiteralPath. tests/Manifest.tests.ps1and thetests/Unit/templates now use the same standalone build-bootstrap approach introduced fortests/Help.tests.ps1(#38): theirBHBuildOutput-missing guards delegate tobuild.ps1 -Task 'Build' -Bootstrap(invoked with&, not dot-sourced, so its terminatingexitis contained) instead of callingInvoke-psakeagainstbuild.psake.ps1directly. This routes dependency bootstrap and BuildHelpers environment setup through the canonical entry point, so these tests can be run standalone (e.g. from an editor or by an agent) without first running./build.ps1. No effect on CI or./build.ps1runs — the guard only fires whenBHBuildOutputis unset.
2026.04.29 - 2026-04-29
- SemVer-aware dependency version checks: new
tests/ManifestHelpers.psm1exportingTest-VersionConstraint.tests/Manifest.tests.ps1now differentiatesRequiredVersion/ModuleVersion/MaximumVersion, accepts both string and hashtable shapes inrequirements.psd1, and detects duplicateRequiredModulesentries. - README split: template-facing
README.md(what GitHub visitors see) and module-facingREADME.template.md(substituted intoREADME.mdduring init). docs/en-US/about_{{ModuleName}}.help.mdstub forGet-Help about_<Module>.Initialize-Template.ps1now also renames{{ModuleName}}files indocs/en-US/..gitattributesmarkingdocs/en-US/*aslinguist-generated..markdownlint-cli2.jsoncconfig (relax MD013 in tables/code, allow MD024 siblings, ignore generated docs andinstructions/).
PSScriptAnalyzerSettings.psd1: replaced one-line@{ IncludeRules = @('*') }with the structured form (Include/Exclude/Rules + commented compat scaffold).- Bumped
PSScriptAnalyzer1.24.0 → 1.25.0.
tests/Help.tests.ps1: replaced undefined$parameterNameswith$commandParameterNamesin the help-vs-code parameter check (was silently asserting against$null).{{ModuleName}}/{{ModuleName}}.psm1: dot-source catch block now preserves the originalErrorRecordvia barethrow. Previously the catch threw a new string ("Unable to dot source ..."), which wrapped the original exception in a freshErrorRecordand lost the underlying stack trace.