Skip to content

Commit 20578d1

Browse files
Require verified prerelease enumeration metadata before choosing a counter
1 parent cb56b27 commit 20578d1

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

‎.github/actions/Resolve-PSModuleVersion/src/Resolve-PSModuleVersion.Helpers.psm1‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,18 @@ function Get-NextPrereleaseNumber {
597597
}
598598
try {
599599
$galleryVersions = @(Find-PSResource @params)
600+
if ($galleryVersions.Count -eq 0) {
601+
throw 'The successful prerelease enumeration returned no verifiable package metadata.'
602+
}
603+
$galleryVersions = @($galleryVersions | ForEach-Object {
604+
if ($_.Name -ine $ModuleName -or [string]$_.Version -notmatch '^\d+\.\d+\.\d+$') {
605+
throw "The Gallery prerelease enumeration returned unverifiable version metadata for [$ModuleName]."
606+
}
607+
[pscustomobject]@{
608+
Version = [version]([string]$_.Version)
609+
Prerelease = $_.Prerelease
610+
}
611+
})
600612
} catch {
601613
$failure = $_
602614
if ($failure.FullyQualifiedErrorId -notlike 'PackageNotFound,*') {

‎.github/actions/Resolve-PSModuleVersion/tests/Resolve-PSModuleVersion.Helpers.Tests.ps1‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ param()
88
BeforeAll {
99
Import-Module -Name 'PSModule' -Force
1010
Import-Module -Name (Join-Path -Path $PSScriptRoot -ChildPath '../src/Resolve-PSModuleVersion.Helpers.psm1') -Force
11+
Mock -CommandName Find-PSResource -ModuleName Resolve-PSModuleVersion.Helpers -MockWith {
12+
$errorRecord = [Management.Automation.ErrorRecord]::new(
13+
[Exception]::new('The isolated fixture module is absent.'),
14+
'PackageNotFound,Find-PSResource',
15+
[Management.Automation.ErrorCategory]::ObjectNotFound,
16+
'PSModuleNonExistentModuleForTesting'
17+
)
18+
throw $errorRecord
19+
}
1120

1221
function Get-TestConfiguration {
1322
<#

‎.github/actions/Resolve-PSModuleVersion/tests/Resolve-PSModuleVersion.ReadErrors.Tests.ps1‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,17 @@ Describe 'Version lookup errors are not version baselines' {
8989

9090
{ Get-NextPrereleaseNumber @parameters } | Should -Throw
9191
}
92+
93+
It 'rejects prerelease missing version metadata before filtering' {
94+
$script:state.Package = [pscustomobject]@{ Name = 'TestModule'; Version = $null; Prerelease = 'preview001' }
95+
$parameters = @{ ModuleName = 'TestModule'; BaseVersion = '1.2.4'; PrereleaseName = 'preview'; Releases = @() }
96+
97+
{ Get-NextPrereleaseNumber @parameters } | Should -Throw '*metadata*'
98+
}
99+
100+
It 'rejects prerelease empty successful enumeration instead of treating it as verified absence' {
101+
$parameters = @{ ModuleName = 'TestModule'; BaseVersion = '1.2.4'; PrereleaseName = 'preview'; Releases = @() }
102+
103+
{ Get-NextPrereleaseNumber @parameters } | Should -Throw '*metadata*'
104+
}
92105
}

0 commit comments

Comments
 (0)