-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcleanup.ps1
More file actions
71 lines (59 loc) · 2.51 KB
/
Copy pathcleanup.ps1
File metadata and controls
71 lines (59 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[CmdletBinding()]
param()
$PSStyle.OutputRendering = 'Ansi'
Import-Module -Name 'Helpers' -Force
#region Load inputs
LogGroup 'Load inputs' {
$whatIf = $env:PSMODULE_PUBLISH_PSMODULE_INPUT_WhatIf -eq 'true'
$githubEventJson = Get-Content $env:GITHUB_EVENT_PATH
$githubEvent = $githubEventJson | ConvertFrom-Json
$pull_request = $githubEvent.pull_request
if (-not $pull_request) {
throw 'GitHub event does not contain pull_request data. This script must be run from a pull_request event.'
}
$prHeadRef = $pull_request.head.ref
$prereleaseName = $prHeadRef -replace '[^a-zA-Z0-9]'
if ([string]::IsNullOrWhiteSpace($prereleaseName)) {
Write-Host "No prerelease tag derivable from PR head ref [$prHeadRef]. Nothing to cleanup."
return
}
Write-Host "PR head ref: [$prHeadRef]"
Write-Host "Prerelease name: [$prereleaseName]"
Write-Host "WhatIf: [$whatIf]"
}
#endregion Load inputs
#region Find prereleases to cleanup
LogGroup "Find prereleases to cleanup for [$prereleaseName]" {
$releases = gh release list --json 'createdAt,isDraft,isLatest,isPrerelease,name,publishedAt,tagName' | ConvertFrom-Json
if ($LASTEXITCODE -ne 0) {
Write-Error 'Failed to list releases for the repository.'
exit $LASTEXITCODE
}
$prereleasesToCleanup = $releases | Where-Object { $_.tagName -like "*$prereleaseName*" }
$tagsToDelete = @($prereleasesToCleanup | ForEach-Object { $_.tagName } | Where-Object { -not [string]::IsNullOrWhiteSpace($_) })
if ($tagsToDelete.Count -eq 0) {
Write-Host "No prereleases found to cleanup for [$prereleaseName]."
return
}
Write-Host "Found $($tagsToDelete.Count) prereleases to cleanup:"
$tagsToDelete | ForEach-Object { Write-Host " - $_" }
}
#endregion Find prereleases to cleanup
#region Delete prereleases
LogGroup "Delete prereleases for [$prereleaseName]" {
foreach ($tag in $tagsToDelete) {
Write-Host "Deleting prerelease: [$tag]"
if ($whatIf) {
Write-Host "WhatIf: gh release delete $tag --cleanup-tag --yes"
} else {
gh release delete $tag --cleanup-tag --yes
if ($LASTEXITCODE -ne 0) {
Write-Error "Failed to delete release [$tag]."
exit $LASTEXITCODE
}
Write-Host "Successfully deleted release [$tag]."
}
}
Write-Host "::notice::Cleaned up $($tagsToDelete.Count) prerelease(s) for [$prereleaseName]."
}
#endregion Delete prereleases