Skip to content

Commit 1e5b120

Browse files
Prepare for prerelease and enhance changelog and contributing badges (#178)
* chore: prepare develop for next prerelease * fix: Nova's CI/CD test flow installed. * fix: package.json is no longer used. * Add changelog link and badge to README Added a link to the 'Keep a Changelog' website and its badge. * Add 'Keep a Changelog' badge to CONTRIBUTING.md Added a badge for 'Keep a Changelog' to the contributing guidelines. * Update CONTRIBUTING.md with additional badges Added badges for changelog and code health to CONTRIBUTING.md * Rearrange badges in CONTRIBUTING.md Moved CodeScene Average Code Health badge to a new position. * Update CONTRIBUTING.md with consolidated badges Consolidate badge links into the contributing section. * Refactor contributing section with badges Updated the formatting of the contributing section and added badges for changelog, code coverage, and code health. * Update README.md badge formatting Reformatted README.md to improve badge layout. * #174 fix: detect parent git repositories for nova bump (#176) Make nova bump and Update-NovaModuleVersion resolve Git history from parent repositories, so nested project folders infer the correct semantic version instead of falling back to Patch with Commits: 0. Add regression coverage for nested project bump inference and update the changelog. Closes #174 * chore: prepare next prerelease version * #175 fix: require explicit override for no-git bump fallback (#177) Stop `nova bump` and `Update-NovaModuleVersion` from silently presenting `Patch | Commits: 0` when Git-based bump inference is unavailable. Add `-OverrideWarning` / `--override-warning` / `-o` as the explicit opt-in for intentional non-git Patch fallback flows, add regression coverage, and update bump docs and changelog. Closes #175 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2 parents e456ee4 + a50cc58 commit 1e5b120

20 files changed

Lines changed: 320 additions & 43 deletions

.github/dependabot.yml

Lines changed: 0 additions & 11 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1818

1919
### Fixed
2020

21+
- Fixed `nova bump` and `Update-NovaModuleVersion` so nested project folders now reuse parent Git repository history for bump inference instead of silently falling back to `Patch`.
22+
- Fixed `nova bump` and `Update-NovaModuleVersion` so non-git bump flows now stop with a clear override-warning requirement instead of silently presenting `Patch | Commits: 0` as if it were an inferred result.
23+
2124
### Security
2225

2326
## [2.3.0] - 2026-05-06
@@ -30,7 +33,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3033
- Render bold text in white across the hosted HTML documentation.
3134
- Emphasized `<strong>` and `<b>` text now stands out more clearly when scanning docs pages.
3235

33-
## [2.2.0] - 2026-05-06
36+
### Fixed
37+
38+
- Restore Nova-managed project test runs in CI/CD after `2.2.0` dropped the implicit `Pester` dependency.
39+
- CI/CD environments no longer need custom logic to install `Pester` themselves before running project tests.
40+
- Published `NovaModuleTools` manifests once again pull in `Pester 5.7.1` implicitly so existing CI/CD test flows
41+
keep working without extra installation logic.
42+
- `Test-NovaBuild` fails with a clear dependency error when `Pester` is not installed.
43+
44+
## [2.2.0] - 2026-05-06 [YANKED]
45+
46+
This release was yanked because it removed the implicit `Pester` dependency, before Nova's CI/CD test flow installed
47+
`Pester` explicitly. Projects using `NovaModuleTools 2.2.0` could fail to run tests in CI/CD unless maintainers added
48+
their own `Pester` installation step. The regression was fixed in `2.3.0`.
3449

3550
### Changed
3651

@@ -85,10 +100,6 @@ Keep stable `Update-NovaModuleVersion` / `% nova bump` releases on the SemVer ma
85100
- Regular markdown elsewhere under `docs/` no longer breaks the help-generation step.
86101
- When PlatyPS export does not create the expected help folder, Nova now raises a stable documentation error instead
87102
of a raw rename-path failure.
88-
- Fix CI test dependency installation so `Pester 5.7.1` is installed explicitly instead of being pulled in implicitly
89-
through the published `NovaModuleTools` manifest.
90-
- Published prerelease manifests no longer force `Pester` as an install-time required module.
91-
- `Test-NovaBuild` now fails with a clear dependency error when `Pester` is not installed.
92103
- Fix the repository `run.ps1` quality loop after the CI installer refactor introduced new ScriptAnalyzer warnings.
93104
- The internal CI installer helper now follows ScriptAnalyzer naming and `ShouldProcess` expectations.
94105
- `run.ps1` no longer stops in the analyzer step because of those helper warnings.
@@ -369,4 +380,3 @@ Keep stable `Update-NovaModuleVersion` / `% nova bump` releases on the SemVer ma
369380
[0.0.6]: https://github.com/stiwicourage/NovaModuleTools/compare/Version_0.0.5...Version_0.0.6
370381
[0.0.5]: https://github.com/stiwicourage/NovaModuleTools/compare/Version_0.0.4...Version_0.0.5
371382
[0.0.4]: https://github.com/stiwicourage/NovaModuleTools/compare/Version_0.0.3...Version_0.0.4
372-

CONTRIBUTING.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
## Contributing
2-
3-
[![CodeScene Hotspot Code Health](https://codescene.io/projects/78904/status-badges/hotspot-code-health)](https://codescene.io/projects/78904)
2+
[![KeepAChangelog](https://img.shields.io/badge/changelog-KeepAChangelog-%23E05735)](https://keepachangelog.ps)
3+
[![codecov](https://codecov.io/github/stiwicourage/NovaModuleTools/graph/badge.svg?token=BLZP94DZKX)](https://codecov.io/github/stiwicourage/NovaModuleTools)
44
[![CodeScene Average Code Health](https://codescene.io/projects/78904/status-badges/average-code-health)](https://codescene.io/projects/78904)
5-
[![codecov](https://codecov.io/github/stiwicourage/NovaModuleTools/graph/badge.svg?token=BLZP94DZKX)](https://codecov.io/github/stiwicourage/NovaModuleTools)
65

76
**This repository is intentionally opinionated about maintainability, however, we welcome contributions that align with
87
our goals. We want to keep the codebase clean, maintainable, and easy to understand for both users and contributors.**

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
# NovaModuleTools | [![CodeScene general](https://codescene.io/images/analyzed-by-codescene-badge.svg)](https://codescene.io/projects/78904) ![WorkFlow Status][WorkFlowStatus]
1+
# NovaModuleTools
2+
[![CodeScene general](https://codescene.io/images/analyzed-by-codescene-badge.svg)](https://codescene.io/projects/78904)
3+
![WorkFlow Status][WorkFlowStatus]
4+
[![Keep a Changelog][changelog-badge]][changelog]
25

36
NovaModuleTools is an enterprise-focused evolution of ModuleTools for structured PowerShell module development,
47
repository automation, and maintainable Nova workflows.
@@ -220,6 +223,9 @@ These switches keep the behavior explicit and opt-in:
220223
- `Update-NovaModuleVersion -ContinuousIntegration` also falls back to a patch bump when the current `HEAD` already
221224
matches the latest tag, so release automation can seed the next prerelease line without requiring an extra commit
222225
first
226+
- `Update-NovaModuleVersion` and `% nova bump` now stop when Git-based bump inference is unavailable, unless you
227+
explicitly opt in to the Patch fallback with `-OverrideWarning` / `--override-warning` / `-o` for a non-git
228+
example/template flow
223229
- `Update-NovaModuleVersion` and `% nova bump` treat stable `0.y.z` versions as the SemVer initial-development phase,
224230
so breaking-change bumps stay on the `0.y.z` line by planning the next minor version instead of jumping to `1.0.0`
225231
- `Publish-NovaModule -ContinuousIntegration` restores the built module after publish completes
@@ -671,3 +677,5 @@ This project is licensed under the MIT License. See LICENSE for details.
671677

672678
[PSGalleryLink]: https://www.powershellgallery.com/packages/NovaModuleTools/
673679
[WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/stiwicourage/NovaModuleTools/Tests.yml
680+
[changelog]: https://keepachangelog.com/
681+
[changelog-badge]: https://img.shields.io/badge/changelog-Keep%20a%20Changelog-%23E05735

docs/NovaModuleTools/en-US/Update-NovaModuleVersion.md

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Updates the project version in `project.json` based on git commit history.
2020
### __AllParameterSets
2121

2222
```text
23-
PS> Update-NovaModuleVersion [[-Path] <string>] [-Preview] [-ContinuousIntegration] [-WhatIf] [-Confirm] [<CommonParameters>]
23+
PS> Update-NovaModuleVersion [[-Path] <string>] [-Preview] [-ContinuousIntegration] [-OverrideWarning] [-WhatIf] [-Confirm] [<CommonParameters>]
2424
```
2525

2626
## DESCRIPTION
@@ -49,8 +49,10 @@ reports the detected `Major` label so you can see that the commit set contained
4949
guidance about manually setting `1.0.0` once the software is stable. With `-Preview`, stable versions still enter the
5050
next patch preview track instead of applying semantic history inference to the semantic core.
5151

52-
When Git tags exist, only commits since the latest tag are considered. If the folder is not a Git repository, the
53-
command falls back to a patch bump.
52+
When Git tags exist, only commits since the latest tag are considered. If Git-based inference is unavailable because the
53+
project path is not inside a Git repository, the command stops with a clear warning/error instead of silently presenting
54+
an inferred-looking patch result. Use `-OverrideWarning` only when you intentionally want that Patch fallback, for
55+
example in example/template flows outside Git.
5456

5557
If the repository exists but has no commits yet, the command stops with: `Cannot bump version because the repository
5658
has no commits yet. Create an initial commit first.`
@@ -186,6 +188,19 @@ CommitCount: 34
186188
Shows how stable `0.y.z` bumps still warn that `1.0.0` must be set manually when the API becomes stable, while
187189
breaking-change commits on that line continue to plan the next minor version instead of jumping straight to `1.0.0`.
188190

191+
### EXAMPLE 10
192+
193+
```text
194+
PS> Update-NovaModuleVersion -Path ./src/resources/example -OverrideWarning -WhatIf
195+
196+
WARNING: Cannot infer the version bump label from Git history because no Git repository was found for this project path. Use -OverrideWarning to continue intentionally with a Patch fallback.
197+
198+
What if: Performing the operation "Update module version using Patch release label" on target "project.json".
199+
```
200+
201+
Shows how to opt in explicitly to the Patch fallback when a project lives outside a Git repository and Nova therefore
202+
cannot infer the semantic label from commit history.
203+
189204
## PARAMETERS
190205

191206
### -Path
@@ -259,6 +274,30 @@ AcceptedValues: [ ]
259274
HelpMessage: ''
260275
```
261276

277+
### -OverrideWarning
278+
279+
Allow the version bump to continue with the explicit Patch fallback when Git-based inference is unavailable.
280+
281+
Use this only when you intentionally want to bump a project outside a Git repository, for example in example/template
282+
flows where no commit history exists.
283+
284+
```yaml
285+
Type: System.Management.Automation.SwitchParameter
286+
DefaultValue: False
287+
SupportsWildcards: false
288+
Aliases: [ ]
289+
ParameterSets:
290+
- Name: (All)
291+
Position: Named
292+
IsRequired: false
293+
ValueFromPipeline: false
294+
ValueFromPipelineByPropertyName: false
295+
ValueFromRemainingArguments: false
296+
DontShow: false
297+
AcceptedValues: [ ]
298+
HelpMessage: ''
299+
```
300+
262301
### CommonParameters
263302

264303
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable,
@@ -291,6 +330,9 @@ reflect the new version.
291330
When `-ContinuousIntegration` is used with a real update, the command re-activates the built `dist/` module first. When
292331
combined with `-WhatIf`, Nova still previews the bump without changing the loaded module state.
293332

333+
When Git-based inference is unavailable, `Update-NovaModuleVersion` now requires `-OverrideWarning` before it continues
334+
with the intentional Patch fallback.
335+
294336
## RELATED LINKS
295337

296338
- https://github.com/stiwicourage/NovaModuleTools/blob/main/docs/NovaModuleTools/en-US/Get-NovaProjectInfo.md

docs/commands.html

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -476,10 +476,13 @@ <h3><code>Update-NovaModuleVersion</code> / <code>% nova bump</code></h3>
476476
<ul class="plain-list">
477477
<li><strong>Best for:</strong> Git-driven semantic version updates</li>
478478
<li><strong>Key parameters:</strong> <code>-Path</code>, <code>-Preview</code>,
479-
<code>-ContinuousIntegration</code>, or the CLI form <code>--preview</code> /
480-
<code>-p</code> and <code>--continuous-integration</code> / <code>-i</code></li>
481-
<li><strong>Notable behavior:</strong> falls back to a patch bump when the folder is not a
482-
Git repository, but throws when the repository exists and has no commits yet
479+
<code>-ContinuousIntegration</code>, <code>-OverrideWarning</code>, or the CLI form
480+
<code>--preview</code> / <code>-p</code>, <code>--continuous-integration</code> /
481+
<code>-i</code>, and <code>--override-warning</code> / <code>-o</code></li>
482+
<li><strong>Notable behavior:</strong> stops when Git-based inference is unavailable, unless
483+
you explicitly opt in to the Patch fallback with <code>-OverrideWarning</code> /
484+
<code>--override-warning</code> / <code>-o</code>; it still throws when the repository
485+
exists and has no commits yet
483486
</li>
484487
<li><strong>Major-zero rule:</strong> stable <code>0.y.z</code> projects keep
485488
breaking-change
@@ -504,10 +507,12 @@ <h3><code>Update-NovaModuleVersion</code> / <code>% nova bump</code></h3>
504507
</div>
505508
<div class="surface-example__surface" data-command-surface="powershell">
506509
<pre><code>PS&gt; Update-NovaModuleVersion -Preview -WhatIf
510+
PS&gt; Update-NovaModuleVersion -Path ./src/resources/example -OverrideWarning -WhatIf
507511
PS&gt; Update-NovaModuleVersion -ContinuousIntegration</code></pre>
508512
</div>
509513
<div class="surface-example__surface" data-command-surface="command-line" hidden>
510514
<pre><code>% nova bump --preview --what-if
515+
% nova bump --override-warning --what-if
511516
% nova bump --continuous-integration
512517
% nova bump --preview --confirm</code></pre>
513518
</div>

docs/versioning-and-updates.html

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,12 @@ <h3>How Nova chooses the bump label</h3>
177177
<pre><code>0.0.1 + Patch -> 0.0.2
178178
0.1.0 + Minor -> 0.2.0
179179
0.1.0 + Major -> 0.2.0</code></pre>
180-
<p>When Git tags exist, Nova uses commits since the latest tag. When the folder is not a Git repository,
181-
Nova falls back to a patch bump. When the repository exists but has no commits yet, Nova stops with
182-
a clear error.</p>
180+
<p>When Git tags exist, Nova uses commits since the latest tag. When Git-based inference is unavailable
181+
because the project path is not inside a Git repository, Nova stops instead of silently presenting a
182+
normal-looking patch result. Use <code>-OverrideWarning</code> or the CLI form <code>% nova bump
183+
--override-warning</code> / <code>% nova bump -o</code> only when you intentionally want that
184+
Patch fallback for an example/template flow outside Git. When the repository exists but has no
185+
commits yet, Nova still stops with a clear error.</p>
183186
<p>Nova treats prerelease versions as previews of a specific semantic version target. That means a bump
184187
does not blindly carry prerelease labels such as <code>preview7</code> into the next major, minor,
185188
or
@@ -215,11 +218,13 @@ <h3>How Nova chooses the bump label</h3>
215218
<div class="surface-example__surface" data-command-surface="powershell">
216219
<pre><code>PS&gt; Update-NovaModuleVersion -WhatIf
217220
PS&gt; Update-NovaModuleVersion -Preview -WhatIf
221+
PS&gt; Update-NovaModuleVersion -Path ./src/resources/example -OverrideWarning -WhatIf
218222
PS&gt; Update-NovaModuleVersion -ContinuousIntegration</code></pre>
219223
</div>
220224
<div class="surface-example__surface" data-command-surface="command-line" hidden>
221225
<pre><code>% nova bump --what-if
222226
% nova bump --preview --what-if
227+
% nova bump --override-warning --what-if
223228
% nova bump --continuous-integration
224229
% nova bump --confirm</code></pre>
225230
</div>

project.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"ProjectName": "NovaModuleTools",
33
"Description": "NovaModuleTools is an enterprise-focused evolution of ModuleTools, designed for large-scale PowerShell projects with a strong emphasis on structure, maintainability, and automated CI/CD pipelines.",
4-
"Version": "2.3.0",
4+
"Version": "2.3.1-preview01",
55
"Preamble": [
66
"Set-StrictMode -Version Latest",
77
"$ErrorActionPreference = 'Stop'"

src/private/cli/ConvertFromNovaBumpCliArgument.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,7 @@ function ConvertFrom-NovaBumpCliArgument {
99
'-p' = 'Preview'
1010
'--continuous-integration' = 'ContinuousIntegration'
1111
'-i' = 'ContinuousIntegration'
12+
'--override-warning' = 'OverrideWarning'
13+
'-o' = 'OverrideWarning'
1214
}
1315
}

src/private/cli/GetNovaCliArgumentRoutingState.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ function Get-NovaCliLegacyOptionReplacement {
6868
'-installed' = "'--installed' or '-i'"
6969
'-local' = "'--local' or '-l'"
7070
'-moduledirectorypath' = "'--path' or '-p'"
71+
'-overridewarning' = "'--override-warning' or '-o'"
7172
'-packagepath' = "'--path' or '-p'"
7273
'-packagetype' = "'--type' or '-t'"
7374
'-path' = "'--path' or '-p'"

0 commit comments

Comments
 (0)