From 9b11d08d5303c3e310602c8b66f9c27b240097c4 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sun, 18 Jan 2026 01:22:53 +0100 Subject: [PATCH 1/2] Add PrereleaseLabels support and ReleaseType calculation --- scripts/Settings.schema.json | 9 ++++++++ scripts/main.ps1 | 40 ++++++++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/scripts/Settings.schema.json b/scripts/Settings.schema.json index a8883ef..d35a11e 100644 --- a/scripts/Settings.schema.json +++ b/scripts/Settings.schema.json @@ -162,6 +162,10 @@ "type": "string", "description": "Comma-separated labels that prevent release" }, + "PrereleaseLabels": { + "type": "string", + "description": "Comma-separated labels that trigger a prerelease" + }, "UsePRTitleAsReleaseName": { "type": "boolean", "description": "Use pull request title as the GitHub release name" @@ -328,6 +332,11 @@ "type": "boolean", "description": "Publish the module" }, + "ReleaseType": { + "type": "string", + "enum": ["Release", "Prerelease", "Cleanup", "None"], + "description": "The type of release to create: Release (stable), Prerelease, Cleanup (delete old prereleases), or None" + }, "BuildDocs": { "type": "boolean", "description": "Build documentation" diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 1e8f62f..64cf65b 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -172,6 +172,7 @@ $settings = [pscustomobject]@{ MinorLabels = $settings.Publish.Module.MinorLabels ?? 'minor, feature' PatchLabels = $settings.Publish.Module.PatchLabels ?? 'patch, fix' IgnoreLabels = $settings.Publish.Module.IgnoreLabels ?? 'NoRelease' + PrereleaseLabels = $settings.Publish.Module.PrereleaseLabels ?? 'prerelease' UsePRTitleAsReleaseName = $settings.Publish.Module.UsePRTitleAsReleaseName ?? $false UsePRBodyAsReleaseNotes = $settings.Publish.Module.UsePRBodyAsReleaseNotes ?? $true UsePRTitleAsNotesHeading = $settings.Publish.Module.UsePRTitleAsNotesHeading ?? $true @@ -243,12 +244,38 @@ LogGroup 'Calculate Job Run Conditions:' { $isMergedPR = $isPR -and $pullRequestAction -eq 'closed' -and $pullRequestIsMerged -eq $true $isNotAbandonedPR = -not $isAbandonedPR + # Check if a prerelease label was added or exists on the PR + $prereleaseLabels = $settings.Publish.Module.PrereleaseLabels -split ',' | ForEach-Object { $_.Trim() } + $prLabels = @($pullRequest.labels.name) + $hasPrereleaseLabel = ($prLabels | Where-Object { $prereleaseLabels -contains $_ }).Count -gt 0 + $labelName = $eventData.Label.name + $isPrereleaseLabeled = $isPR -and $pullRequestAction -eq 'labeled' -and ($prereleaseLabels -contains $labelName) + + # Determine ReleaseType - single source of truth for what Publish-PSModule should do + # Values: 'Release', 'Prerelease', 'Cleanup', 'None' + $releaseType = if (-not $isPR) { + 'None' + } elseif ($isMergedPR) { + 'Release' + } elseif ($isAbandonedPR) { + 'Cleanup' + } elseif ($isOpenOrUpdatedPR -and $hasPrereleaseLabel) { + 'Prerelease' + } elseif ($isPrereleaseLabeled) { + 'Prerelease' + } else { + 'None' + } + [pscustomobject]@{ - isPR = $isPR - isOpenOrUpdatedPR = $isOpenOrUpdatedPR - isAbandonedPR = $isAbandonedPR - isMergedPR = $isMergedPR - isNotAbandonedPR = $isNotAbandonedPR + isPR = $isPR + isOpenOrUpdatedPR = $isOpenOrUpdatedPR + isAbandonedPR = $isAbandonedPR + isMergedPR = $isMergedPR + isNotAbandonedPR = $isNotAbandonedPR + hasPrereleaseLabel = $hasPrereleaseLabel + isPrereleaseLabeled = $isPrereleaseLabeled + ReleaseType = $releaseType } | Format-List | Out-String } @@ -438,7 +465,8 @@ LogGroup 'Calculate Job Run Conditions:' { GetCodeCoverage = $isNotAbandonedPR -and (-not $settings.Test.CodeCoverage.Skip) -and ( ($null -ne $settings.TestSuites.PSModule) -or ($null -ne $settings.TestSuites.Module) ) - PublishModule = $isPR -and ($isAbandonedPR -or ($isOpenOrUpdatedPR -or $isMergedPR)) + PublishModule = $releaseType -ne 'None' + ReleaseType = $releaseType # 'Release', 'Prerelease', 'Cleanup', or 'None' BuildDocs = $isNotAbandonedPR -and (-not $settings.Build.Docs.Skip) BuildSite = $isNotAbandonedPR -and (-not $settings.Build.Site.Skip) PublishSite = $isMergedPR From abc4d306e0bf1634b2290a8174ed699a5e469218 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sun, 18 Jan 2026 01:37:22 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Refactor=20prerel?= =?UTF-8?q?ease=20label=20handling=20in=20job=20run=20conditions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/main.ps1 | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 64cf65b..05e6189 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -249,7 +249,8 @@ LogGroup 'Calculate Job Run Conditions:' { $prLabels = @($pullRequest.labels.name) $hasPrereleaseLabel = ($prLabels | Where-Object { $prereleaseLabels -contains $_ }).Count -gt 0 $labelName = $eventData.Label.name - $isPrereleaseLabeled = $isPR -and $pullRequestAction -eq 'labeled' -and ($prereleaseLabels -contains $labelName) + $isPrereleaseLabeled = $pullRequestAction -eq 'labeled' -and ($prereleaseLabels -contains $labelName) + $shouldPrerelease = $isPR -and (($isOpenOrUpdatedPR -and $hasPrereleaseLabel) -or $isPrereleaseLabeled) # Determine ReleaseType - single source of truth for what Publish-PSModule should do # Values: 'Release', 'Prerelease', 'Cleanup', 'None' @@ -259,23 +260,20 @@ LogGroup 'Calculate Job Run Conditions:' { 'Release' } elseif ($isAbandonedPR) { 'Cleanup' - } elseif ($isOpenOrUpdatedPR -and $hasPrereleaseLabel) { - 'Prerelease' - } elseif ($isPrereleaseLabeled) { + } elseif ($shouldPrerelease) { 'Prerelease' } else { 'None' } [pscustomobject]@{ - isPR = $isPR - isOpenOrUpdatedPR = $isOpenOrUpdatedPR - isAbandonedPR = $isAbandonedPR - isMergedPR = $isMergedPR - isNotAbandonedPR = $isNotAbandonedPR - hasPrereleaseLabel = $hasPrereleaseLabel - isPrereleaseLabeled = $isPrereleaseLabeled - ReleaseType = $releaseType + isPR = $isPR + isOpenOrUpdatedPR = $isOpenOrUpdatedPR + isAbandonedPR = $isAbandonedPR + isMergedPR = $isMergedPR + isNotAbandonedPR = $isNotAbandonedPR + shouldPrerelease = $shouldPrerelease + ReleaseType = $releaseType } | Format-List | Out-String }