@@ -172,6 +172,7 @@ $settings = [pscustomobject]@{
172172 MinorLabels = $settings.Publish.Module.MinorLabels ?? ' minor, feature'
173173 PatchLabels = $settings.Publish.Module.PatchLabels ?? ' patch, fix'
174174 IgnoreLabels = $settings.Publish.Module.IgnoreLabels ?? ' NoRelease'
175+ PrereleaseLabels = $settings.Publish.Module.PrereleaseLabels ?? ' prerelease'
175176 UsePRTitleAsReleaseName = $settings.Publish.Module.UsePRTitleAsReleaseName ?? $false
176177 UsePRBodyAsReleaseNotes = $settings.Publish.Module.UsePRBodyAsReleaseNotes ?? $true
177178 UsePRTitleAsNotesHeading = $settings.Publish.Module.UsePRTitleAsNotesHeading ?? $true
@@ -243,12 +244,38 @@ LogGroup 'Calculate Job Run Conditions:' {
243244 $isMergedPR = $isPR -and $pullRequestAction -eq ' closed' -and $pullRequestIsMerged -eq $true
244245 $isNotAbandonedPR = -not $isAbandonedPR
245246
247+ # Check if a prerelease label was added or exists on the PR
248+ $prereleaseLabels = $settings.Publish.Module.PrereleaseLabels -split ' ,' | ForEach-Object { $_.Trim () }
249+ $prLabels = @ ($pullRequest.labels.name )
250+ $hasPrereleaseLabel = ($prLabels | Where-Object { $prereleaseLabels -contains $_ }).Count -gt 0
251+ $labelName = $eventData.Label.name
252+ $isPrereleaseLabeled = $isPR -and $pullRequestAction -eq ' labeled' -and ($prereleaseLabels -contains $labelName )
253+
254+ # Determine ReleaseType - single source of truth for what Publish-PSModule should do
255+ # Values: 'Release', 'Prerelease', 'Cleanup', 'None'
256+ $releaseType = if (-not $isPR ) {
257+ ' None'
258+ } elseif ($isMergedPR ) {
259+ ' Release'
260+ } elseif ($isAbandonedPR ) {
261+ ' Cleanup'
262+ } elseif ($isOpenOrUpdatedPR -and $hasPrereleaseLabel ) {
263+ ' Prerelease'
264+ } elseif ($isPrereleaseLabeled ) {
265+ ' Prerelease'
266+ } else {
267+ ' None'
268+ }
269+
246270 [pscustomobject ]@ {
247- isPR = $isPR
248- isOpenOrUpdatedPR = $isOpenOrUpdatedPR
249- isAbandonedPR = $isAbandonedPR
250- isMergedPR = $isMergedPR
251- isNotAbandonedPR = $isNotAbandonedPR
271+ isPR = $isPR
272+ isOpenOrUpdatedPR = $isOpenOrUpdatedPR
273+ isAbandonedPR = $isAbandonedPR
274+ isMergedPR = $isMergedPR
275+ isNotAbandonedPR = $isNotAbandonedPR
276+ hasPrereleaseLabel = $hasPrereleaseLabel
277+ isPrereleaseLabeled = $isPrereleaseLabeled
278+ ReleaseType = $releaseType
252279 } | Format-List | Out-String
253280}
254281
@@ -438,7 +465,8 @@ LogGroup 'Calculate Job Run Conditions:' {
438465 GetCodeCoverage = $isNotAbandonedPR -and (-not $settings.Test.CodeCoverage.Skip ) -and (
439466 ($null -ne $settings.TestSuites.PSModule ) -or ($null -ne $settings.TestSuites.Module )
440467 )
441- PublishModule = $isPR -and ($isAbandonedPR -or ($isOpenOrUpdatedPR -or $isMergedPR ))
468+ PublishModule = $releaseType -ne ' None'
469+ ReleaseType = $releaseType # 'Release', 'Prerelease', 'Cleanup', or 'None'
442470 BuildDocs = $isNotAbandonedPR -and (-not $settings.Build.Docs.Skip )
443471 BuildSite = $isNotAbandonedPR -and (-not $settings.Build.Site.Skip )
444472 PublishSite = $isMergedPR
0 commit comments