Skip to content

Commit de0ed31

Browse files
Refactor publishing workflow:
- Remove main.ps1 and split functionality into init.ps1, publish.ps1, and cleanup.ps1 for better organization. - Implement init.ps1 to handle dependency installation, input loading, and configuration setup. - Create publish.ps1 to manage module publishing to PSGallery and GitHub releases, including versioning and release notes handling. - Add cleanup.ps1 to remove old prereleases based on specified tags.
1 parent f5e1a40 commit de0ed31

6 files changed

Lines changed: 659 additions & 533 deletions

File tree

action.yml

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,12 @@ runs:
8080
- name: Install-PSModuleHelpers
8181
uses: PSModule/Install-PSModuleHelpers@d60d63e4be477d1ca0c67c6085101fb109bce8f1 # v1.0.6
8282

83-
- name: Run Publish-PSModule
83+
- name: Initialize Publish Context
84+
id: init
8485
shell: pwsh
8586
working-directory: ${{ inputs.WorkingDirectory }}
8687
env:
8788
PSMODULE_PUBLISH_PSMODULE_INPUT_Name: ${{ inputs.Name }}
88-
PSMODULE_PUBLISH_PSMODULE_INPUT_ModulePath: ${{ inputs.ModulePath }}
89-
PSMODULE_PUBLISH_PSMODULE_INPUT_APIKey: ${{ inputs.APIKey }}
9089
PSMODULE_PUBLISH_PSMODULE_INPUT_CleanupPrereleases: ${{ inputs.CleanupPrereleases }}
9190
PSMODULE_PUBLISH_PSMODULE_INPUT_AutoPatching: ${{ inputs.AutoPatching }}
9291
PSMODULE_PUBLISH_PSMODULE_INPUT_DatePrereleaseFormat: ${{ inputs.DatePrereleaseFormat }}
@@ -98,7 +97,33 @@ runs:
9897
PSMODULE_PUBLISH_PSMODULE_INPUT_PatchLabels: ${{ inputs.PatchLabels }}
9998
PSMODULE_PUBLISH_PSMODULE_INPUT_VersionPrefix: ${{ inputs.VersionPrefix }}
10099
PSMODULE_PUBLISH_PSMODULE_INPUT_WhatIf: ${{ inputs.WhatIf }}
100+
run: ${{ github.action_path }}/scripts/init.ps1
101+
102+
- name: Download module artifact
103+
if: env.PUBLISH_CONTEXT_ShouldPublish == 'true' || inputs.WhatIf == 'true'
104+
uses: actions/download-artifact@v4
105+
with:
106+
name: module
107+
path: ${{ inputs.ModulePath }}
108+
109+
- name: Publish Module
110+
if: env.PUBLISH_CONTEXT_ShouldPublish == 'true' || inputs.WhatIf == 'true'
111+
shell: pwsh
112+
working-directory: ${{ inputs.WorkingDirectory }}
113+
env:
114+
PSMODULE_PUBLISH_PSMODULE_INPUT_Name: ${{ inputs.Name }}
115+
PSMODULE_PUBLISH_PSMODULE_INPUT_ModulePath: ${{ inputs.ModulePath }}
116+
PSMODULE_PUBLISH_PSMODULE_INPUT_APIKey: ${{ inputs.APIKey }}
117+
PSMODULE_PUBLISH_PSMODULE_INPUT_WhatIf: ${{ inputs.WhatIf }}
101118
PSMODULE_PUBLISH_PSMODULE_INPUT_UsePRBodyAsReleaseNotes: ${{ inputs.UsePRBodyAsReleaseNotes }}
102119
PSMODULE_PUBLISH_PSMODULE_INPUT_UsePRTitleAsReleaseName: ${{ inputs.UsePRTitleAsReleaseName }}
103120
PSMODULE_PUBLISH_PSMODULE_INPUT_UsePRTitleAsNotesHeading: ${{ inputs.UsePRTitleAsNotesHeading }}
104-
run: ${{ github.action_path }}/scripts/main.ps1
121+
run: ${{ github.action_path }}/scripts/publish.ps1
122+
123+
- name: Cleanup Prereleases
124+
if: env.PUBLISH_CONTEXT_ShouldCleanup == 'true' || inputs.WhatIf == 'true'
125+
shell: pwsh
126+
working-directory: ${{ inputs.WorkingDirectory }}
127+
env:
128+
PSMODULE_PUBLISH_PSMODULE_INPUT_WhatIf: ${{ inputs.WhatIf }}
129+
run: ${{ github.action_path }}/scripts/cleanup.ps1

scripts/cleanup.ps1

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
[CmdletBinding()]
2+
param()
3+
4+
#region Load context from environment
5+
$prereleaseName = $env:PUBLISH_CONTEXT_PrereleaseName
6+
$prereleaseTagsToCleanup = $env:PUBLISH_CONTEXT_PrereleaseTagsToCleanup
7+
$whatIf = $env:PSMODULE_PUBLISH_PSMODULE_INPUT_WhatIf -eq 'true'
8+
9+
if ([string]::IsNullOrWhiteSpace($prereleaseName)) {
10+
Write-Error 'PUBLISH_CONTEXT_PrereleaseName is not set. Run main.ps1 first.'
11+
exit 1
12+
}
13+
#endregion Load context from environment
14+
15+
#region Cleanup prereleases
16+
Set-GitHubLogGroup "Cleanup prereleases for [$prereleaseName]" {
17+
if ([string]::IsNullOrWhiteSpace($prereleaseTagsToCleanup)) {
18+
Write-Output "No prereleases found to cleanup for [$prereleaseName]."
19+
return
20+
}
21+
22+
$tagsToDelete = $prereleaseTagsToCleanup -split ',' | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }
23+
24+
if ($tagsToDelete.Count -eq 0) {
25+
Write-Output "No prereleases found to cleanup for [$prereleaseName]."
26+
return
27+
}
28+
29+
Write-Output "Found $($tagsToDelete.Count) prereleases to cleanup:"
30+
$tagsToDelete | ForEach-Object { Write-Output " - $_" }
31+
Write-Output ''
32+
33+
foreach ($tag in $tagsToDelete) {
34+
Write-Output "Deleting prerelease: [$tag]"
35+
if ($whatIf) {
36+
Write-Output "WhatIf: gh release delete $tag --cleanup-tag --yes"
37+
} else {
38+
gh release delete $tag --cleanup-tag --yes
39+
if ($LASTEXITCODE -ne 0) {
40+
Write-Error "Failed to delete release [$tag]."
41+
exit $LASTEXITCODE
42+
}
43+
Write-Output "Successfully deleted release [$tag]."
44+
}
45+
}
46+
47+
Write-Host "::notice::Cleaned up $($tagsToDelete.Count) prerelease(s) for [$prereleaseName]."
48+
}
49+
#endregion Cleanup prereleases

0 commit comments

Comments
 (0)