Skip to content

Commit d5b7c72

Browse files
Revert "Enforce namespaced module release decisions"
This reverts commit 4fb660b.
1 parent 6586030 commit d5b7c72

8 files changed

Lines changed: 254 additions & 892 deletions

File tree

.github/actions/Get-PSModuleSettings/src/Get-PSModuleSettings.Helpers.psm1

Lines changed: 8 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ function Resolve-WorkflowEventRouting {
2828
[bool] $IsManualDispatchToDefaultBranch,
2929

3030
[Parameter()]
31-
[bool] $HasImportantChanges
31+
[bool] $HasImportantChanges,
32+
33+
[Parameter()]
34+
[bool] $HasPrereleaseLabel
3235
)
3336

3437
$isPR = $EventName -eq 'pull_request'
@@ -40,6 +43,7 @@ function Resolve-WorkflowEventRouting {
4043
$isClosedPR = $isPR -and $EventAction -eq 'closed'
4144
$isAbandonedPR = $isClosedPR -and -not $PullRequestIsMerged
4245
$isMergedPR = $isClosedPR -and $PullRequestIsMerged
46+
$shouldPrerelease = $isOpenOrLabeledPR -and $HasPrereleaseLabel -and $HasImportantChanges
4347
$shouldRelease = (
4448
($IsPushToDefaultBranch -or $IsManualDispatchToDefaultBranch) -and
4549
$HasImportantChanges
@@ -57,8 +61,11 @@ function Resolve-WorkflowEventRouting {
5761
IsTargetDefaultBranch = $IsTargetDefaultBranch
5862
IsPushToDefaultBranch = $IsPushToDefaultBranch
5963
IsManualDispatchToDefaultBranch = $IsManualDispatchToDefaultBranch
64+
ShouldPrerelease = $shouldPrerelease
6065
ReleaseType = if ($shouldRelease) {
6166
'Release'
67+
} elseif ($shouldPrerelease) {
68+
'Prerelease'
6269
} else {
6370
'None'
6471
}
@@ -142,103 +149,3 @@ function Get-FilesFromGitHubComparison {
142149

143150
$files | Select-Object -ExpandProperty filename
144151
}
145-
146-
function Get-UnsupportedPSModuleReleaseSetting {
147-
<#
148-
.SYNOPSIS
149-
Returns release settings removed from the Process-PSModule v9 contract.
150-
151-
.DESCRIPTION
152-
Inspects a publish-module settings object and returns any setting names that
153-
configured automatic patching or custom release-label aliases before v9.
154-
155-
.OUTPUTS
156-
System.String
157-
158-
.EXAMPLE
159-
Get-UnsupportedPSModuleReleaseSetting -PublishModule $settings.Publish.Module
160-
#>
161-
[CmdletBinding()]
162-
[OutputType([string])]
163-
param(
164-
[Parameter()]
165-
[AllowNull()]
166-
[object] $PublishModule
167-
)
168-
169-
if ($null -eq $PublishModule) {
170-
return
171-
}
172-
173-
$settingNames = if ($PublishModule -is [System.Collections.IDictionary]) {
174-
@($PublishModule.Keys)
175-
} else {
176-
@($PublishModule.PSObject.Properties.Name)
177-
}
178-
$unsupportedSettingNames = @(
179-
'AutoPatching'
180-
'MajorLabels'
181-
'MinorLabels'
182-
'PatchLabels'
183-
'PrereleaseLabels'
184-
'IgnoreLabels'
185-
)
186-
187-
foreach ($settingName in $unsupportedSettingNames) {
188-
if ($settingNames -contains $settingName) {
189-
$settingName
190-
}
191-
}
192-
}
193-
194-
function Resolve-PSModulePublishState {
195-
<#
196-
.SYNOPSIS
197-
Applies the resolved release decision to module and site publication state.
198-
199-
.DESCRIPTION
200-
Updates the runtime settings after Resolve-PSModuleVersion has decided
201-
whether this run publishes a stable release, prerelease, or nothing.
202-
Closed pull requests retain their cleanup-only path.
203-
204-
.OUTPUTS
205-
System.Management.Automation.PSCustomObject
206-
207-
.EXAMPLE
208-
$params = @{
209-
Settings = $settings
210-
ReleaseType = 'None'
211-
ShouldPublish = $false
212-
}
213-
Resolve-PSModulePublishState @params
214-
#>
215-
[CmdletBinding()]
216-
[OutputType([PSCustomObject])]
217-
param(
218-
[Parameter(Mandatory)]
219-
[PSCustomObject] $Settings,
220-
221-
[Parameter(Mandatory)]
222-
[ValidateSet('Release', 'Prerelease', 'None')]
223-
[string] $ReleaseType,
224-
225-
[Parameter(Mandatory)]
226-
[bool] $ShouldPublish
227-
)
228-
229-
$isCleanupOnly = (
230-
$Settings.Context.EventName -eq 'pull_request' -and
231-
$Settings.Context.EventAction -eq 'closed'
232-
)
233-
$cleanupEnabled = $isCleanupOnly -and [bool]$Settings.Publish.Module.AutoCleanup
234-
$moduleEnabled = $ShouldPublish -or $cleanupEnabled
235-
$siteDesired = $ReleaseType -eq 'Release'
236-
237-
$Settings.Publish.Module.ReleaseType = $ReleaseType
238-
$Settings.Publish.Module.Desired = $moduleEnabled
239-
$Settings.Publish.Module.Enabled = $moduleEnabled
240-
$Settings.Publish.Site.Desired = $siteDesired
241-
$Settings.Publish.Site.Enabled = $siteDesired -and -not [bool]$Settings.Publish.Site.Skip
242-
243-
$Settings
244-
}

.github/actions/Get-PSModuleSettings/src/Settings.schema.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@
138138
"type": "boolean",
139139
"description": "When enabled (default: true), automatically cleans up old prerelease tags when merging to main or when a PR is abandoned"
140140
},
141+
"AutoPatching": {
142+
"type": "boolean",
143+
"description": "Automatically apply patches"
144+
},
141145
"IncrementalPrerelease": {
142146
"type": "boolean",
143147
"description": "Use incremental prerelease versioning"
@@ -150,6 +154,26 @@
150154
"type": "string",
151155
"description": "Prefix for version tags"
152156
},
157+
"MajorLabels": {
158+
"type": "string",
159+
"description": "Comma-separated labels that trigger major version bump"
160+
},
161+
"MinorLabels": {
162+
"type": "string",
163+
"description": "Comma-separated labels that trigger minor version bump"
164+
},
165+
"PatchLabels": {
166+
"type": "string",
167+
"description": "Comma-separated labels that trigger patch version bump"
168+
},
169+
"IgnoreLabels": {
170+
"type": "string",
171+
"description": "Comma-separated labels that prevent release"
172+
},
173+
"PrereleaseLabels": {
174+
"type": "string",
175+
"description": "Comma-separated labels that trigger a prerelease"
176+
},
153177
"UsePRTitleAsReleaseName": {
154178
"type": "boolean",
155179
"description": "Use pull request title as the GitHub release name"

.github/actions/Get-PSModuleSettings/src/main.ps1

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,6 @@ if (![string]::IsNullOrEmpty($settingsPath) -and (Test-Path -Path $settingsPath)
7373
$settings = @{}
7474
}
7575

76-
$unsupportedReleaseSettings = @(
77-
Get-UnsupportedPSModuleReleaseSetting -PublishModule $settings.Publish.Module
78-
)
79-
if ($unsupportedReleaseSettings.Count -gt 0) {
80-
throw (
81-
"Unsupported Process-PSModule v9 release settings: [$($unsupportedReleaseSettings -join ', ')]. " +
82-
'Remove these settings. Release decisions now use only release:patch, release:minor, ' +
83-
'release:major, release:pre-release, and release:skip.'
84-
)
85-
}
86-
8776
LogGroup 'Name' {
8877
[pscustomobject]@{
8978
InputName = $name
@@ -201,9 +190,15 @@ $settings = [pscustomobject]@{
201190
Module = [pscustomobject]@{
202191
Skip = $settings.Publish.Module.Skip ?? $false
203192
AutoCleanup = $settings.Publish.Module.AutoCleanup ?? $true
193+
AutoPatching = $settings.Publish.Module.AutoPatching ?? $true
204194
IncrementalPrerelease = $settings.Publish.Module.IncrementalPrerelease ?? $true
205195
DatePrereleaseFormat = $settings.Publish.Module.DatePrereleaseFormat ?? ''
206196
VersionPrefix = $settings.Publish.Module.VersionPrefix ?? 'v'
197+
MajorLabels = $settings.Publish.Module.MajorLabels ?? 'major, breaking'
198+
MinorLabels = $settings.Publish.Module.MinorLabels ?? 'minor, feature'
199+
PatchLabels = $settings.Publish.Module.PatchLabels ?? 'patch, fix'
200+
IgnoreLabels = $settings.Publish.Module.IgnoreLabels ?? 'NoRelease'
201+
PrereleaseLabels = $settings.Publish.Module.PrereleaseLabels ?? 'prerelease'
207202
UsePRTitleAsReleaseName = $settings.Publish.Module.UsePRTitleAsReleaseName ?? $false
208203
UsePRBodyAsReleaseNotes = $settings.Publish.Module.UsePRBodyAsReleaseNotes ?? $true
209204
UsePRTitleAsNotesHeading = $settings.Publish.Module.UsePRTitleAsNotesHeading ?? $true
@@ -324,6 +319,11 @@ LogGroup 'Calculate Job Run Conditions:' {
324319
AssociatedPullRequest = $pullRequestContext.Number
325320
} | Format-List | Out-String
326321

322+
# Check if a prerelease label exists on the PR
323+
$prereleaseLabels = $settings.Publish.Module.PrereleaseLabels -split ',' | ForEach-Object { $_.Trim() }
324+
$prLabels = @($pullRequestContext.Labels)
325+
$hasPrereleaseLabel = ($prLabels | Where-Object { $prereleaseLabels -contains $_ }).Count -gt 0
326+
327327
# Check if important files have changed in the PR
328328
# Important files are determined by the configured ImportantFilePatterns setting
329329
$hasImportantChanges = $false
@@ -449,7 +449,8 @@ If you believe this is incorrect, please verify that your changes are in the cor
449449
-IsTargetDefaultBranch $isTargetDefaultBranch `
450450
-IsPushToDefaultBranch $isPushToDefaultBranch `
451451
-IsManualDispatchToDefaultBranch $isManualDispatchToDefaultBranch `
452-
-HasImportantChanges $hasImportantChanges
452+
-HasImportantChanges $hasImportantChanges `
453+
-HasPrereleaseLabel $hasPrereleaseLabel
453454
$releaseType = $routing.ReleaseType
454455

455456
[pscustomobject]@{
@@ -463,6 +464,8 @@ If you believe this is incorrect, please verify that your changes are in the cor
463464
isManualDispatch = $routing.IsManualDispatch
464465
isPushToDefaultBranch = $routing.IsPushToDefaultBranch
465466
isTargetDefaultBranch = $routing.IsTargetDefaultBranch
467+
hasPrereleaseLabel = $hasPrereleaseLabel
468+
shouldPrerelease = $routing.ShouldPrerelease
466469
ReleaseType = $releaseType
467470
HasImportantChanges = $hasImportantChanges
468471
} | Format-List | Out-String

0 commit comments

Comments
 (0)