Skip to content

Commit 9b11d08

Browse files
Add PrereleaseLabels support and ReleaseType calculation
1 parent ce4aac7 commit 9b11d08

2 files changed

Lines changed: 43 additions & 6 deletions

File tree

scripts/Settings.schema.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@
162162
"type": "string",
163163
"description": "Comma-separated labels that prevent release"
164164
},
165+
"PrereleaseLabels": {
166+
"type": "string",
167+
"description": "Comma-separated labels that trigger a prerelease"
168+
},
165169
"UsePRTitleAsReleaseName": {
166170
"type": "boolean",
167171
"description": "Use pull request title as the GitHub release name"
@@ -328,6 +332,11 @@
328332
"type": "boolean",
329333
"description": "Publish the module"
330334
},
335+
"ReleaseType": {
336+
"type": "string",
337+
"enum": ["Release", "Prerelease", "Cleanup", "None"],
338+
"description": "The type of release to create: Release (stable), Prerelease, Cleanup (delete old prereleases), or None"
339+
},
331340
"BuildDocs": {
332341
"type": "boolean",
333342
"description": "Build documentation"

scripts/main.ps1

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)