@@ -35,7 +35,23 @@ BeforeAll {
3535
3636 # The release type resolved from the pull request labels.
3737 [Parameter ()]
38- [string ] $ReleaseType = ' Release'
38+ [string ] $ReleaseType = ' Release' ,
39+
40+ # Labels indicating no release.
41+ [Parameter ()]
42+ [string []] $IgnoreLabels = @ (' release:skip' ),
43+
44+ # Labels indicating a major release.
45+ [Parameter ()]
46+ [string []] $MajorLabels = @ (' release:major' ),
47+
48+ # Labels indicating a minor release.
49+ [Parameter ()]
50+ [string []] $MinorLabels = @ (' release:minor' ),
51+
52+ # Labels indicating a patch release.
53+ [Parameter ()]
54+ [string []] $PatchLabels = @ (' release:patch' )
3955 )
4056
4157 [PSCustomObject ]@ {
@@ -44,10 +60,10 @@ BeforeAll {
4460 DatePrereleaseFormat = $DatePrereleaseFormat
4561 VersionPrefix = $VersionPrefix
4662 ReleaseType = $ReleaseType
47- IgnoreLabels = @ ( ' NoRelease ' )
48- MajorLabels = @ ( ' major ' )
49- MinorLabels = @ ( ' minor ' )
50- PatchLabels = @ ( ' patch ' )
63+ IgnoreLabels = $IgnoreLabels
64+ MajorLabels = $MajorLabels
65+ MinorLabels = $MinorLabels
66+ PatchLabels = $PatchLabels
5167 }
5268 }
5369
@@ -495,7 +511,7 @@ Describe 'Resolve-PSModuleVersion' {
495511 PullRequest = @ {
496512 Number = 390
497513 HeadRef = ' feature/push-release'
498- Labels = @ (' minor' )
514+ Labels = @ (' release: minor' )
499515 }
500516 }
501517 } | ConvertTo-Json - Depth 5
@@ -504,7 +520,7 @@ Describe 'Resolve-PSModuleVersion' {
504520
505521 $result.Number | Should - Be 390
506522 $result.HeadRef | Should - Be ' feature/push-release'
507- $result.Labels | Should - Be @ (' minor' )
523+ $result.Labels | Should - Be @ (' release: minor' )
508524 }
509525
510526 It ' creates default patch context for a direct default-branch push' {
@@ -544,7 +560,7 @@ Describe 'Resolve-PSModuleVersion' {
544560
545561 It ' does not validate cleanup-only pull request labels' {
546562 $result = Resolve-ReleaseDecision - Configuration (Get-TestConfiguration - ReleaseType None) `
547- - PullRequest ([pscustomobject ]@ { HeadRef = ' feature' ; Labels = @ (' NoRelease ' , ' patch' ) })
563+ - PullRequest ([pscustomobject ]@ { HeadRef = ' feature' ; Labels = @ (' release:skip ' , ' release: patch' ) })
548564
549565 $result.ShouldPublish | Should - BeFalse
550566 $result.HasVersionBump | Should - BeFalse
@@ -553,15 +569,61 @@ Describe 'Resolve-PSModuleVersion' {
553569 It ' rejects multiple version labels' {
554570 {
555571 Resolve-ReleaseDecision - Configuration (Get-TestConfiguration ) `
556- - PullRequest ([pscustomobject ]@ { HeadRef = ' main' ; Labels = @ (' major' , ' patch' ) })
572+ - PullRequest ([pscustomobject ]@ { HeadRef = ' main' ; Labels = @ (' release: major' , ' release: patch' ) })
557573 } | Should - Throw ' *Conflicting version labels*'
558574 }
559575
560- It ' rejects a NoRelease label combined with a version label' {
576+ It ' rejects release:skip combined with a version label' {
561577 {
562578 Resolve-ReleaseDecision - Configuration (Get-TestConfiguration ) `
563- - PullRequest ([pscustomobject ]@ { HeadRef = ' main' ; Labels = @ (' NoRelease ' , ' patch' ) })
579+ - PullRequest ([pscustomobject ]@ { HeadRef = ' main' ; Labels = @ (' release:skip ' , ' release: patch' ) })
564580 } | Should - Throw ' *ignore label cannot be combined*'
565581 }
582+
583+ It ' honors the canonical <Bump> default' - ForEach @ (
584+ @ { Bump = ' Major' ; Label = ' release:major' ; Flag = ' MajorRelease' }
585+ @ { Bump = ' Minor' ; Label = ' release:minor' ; Flag = ' MinorRelease' }
586+ @ { Bump = ' Patch' ; Label = ' release:patch' ; Flag = ' PatchRelease' }
587+ ) {
588+ $pullRequest = [pscustomobject ]@ {
589+ HeadRef = ' main'
590+ Labels = @ ($Label )
591+ }
592+
593+ $result = Resolve-ReleaseDecision - Configuration (Get-TestConfiguration ) - PullRequest $pullRequest
594+
595+ $result .$Flag | Should - BeTrue
596+ $result.ShouldPublish | Should - BeTrue
597+ }
598+
599+ It ' honors the configured <Bump> label mapping' - ForEach @ (
600+ @ { Bump = ' Major' ; Setting = ' MajorLabels' ; Label = ' custom:major' ; Flag = ' MajorRelease' }
601+ @ { Bump = ' Minor' ; Setting = ' MinorLabels' ; Label = ' custom:minor' ; Flag = ' MinorRelease' }
602+ @ { Bump = ' Patch' ; Setting = ' PatchLabels' ; Label = ' custom:patch' ; Flag = ' PatchRelease' }
603+ ) {
604+ $configuration = Get-TestConfiguration
605+ $configuration .$Setting = @ ($Label )
606+ $pullRequest = [pscustomobject ]@ {
607+ HeadRef = ' main'
608+ Labels = @ ($Label )
609+ }
610+
611+ $result = Resolve-ReleaseDecision - Configuration $configuration - PullRequest $pullRequest
612+
613+ $result .$Flag | Should - BeTrue
614+ $result.ShouldPublish | Should - BeTrue
615+ }
616+
617+ It ' honors a configured ignore label' {
618+ $configuration = Get-TestConfiguration - IgnoreLabels @ (' custom:skip' )
619+ $pullRequest = [pscustomobject ]@ {
620+ HeadRef = ' main'
621+ Labels = @ (' custom:skip' )
622+ }
623+
624+ $result = Resolve-ReleaseDecision - Configuration $configuration - PullRequest $pullRequest
625+
626+ $result.ShouldPublish | Should - BeFalse
627+ }
566628 }
567629}
0 commit comments