@@ -25,216 +25,7 @@ runs:
25
25
- name : Auto-Release
26
26
shell : pwsh
27
27
env :
28
- GITHUB_CONTEXT : ${{ toJson(github) }}
29
- JOB_CONTEXT : ${{ toJson(job) }}
30
- RUNNER_CONTEXT : ${{ toJson(runner) }}
31
28
AutoPatching : ${{ inputs.AutoPatching }}
32
29
IncrementalPrerelease : ${{ inputs.IncrementalPrerelease }}
33
30
VersionPrefix : ${{ inputs.VersionPrefix }}
34
- run : |
35
- # Auto-Release
36
- Write-Host "::group::Utilities"
37
- Install-PSResource -Name Utilities -TrustRepository
38
- Write-Host "-------------------------------------------------"
39
- Get-PSResource -Name Utilities | Format-Table
40
- Write-Host "-------------------------------------------------"
41
- Write-Host "Get commands"
42
- Get-Command -Module Utilities | Format-Table
43
- Write-Host "-------------------------------------------------"
44
- Write-Host "Get aliases"
45
- Get-Alias | Where-Object Source -eq 'Utilities' | Format-Table
46
- Write-Host "-------------------------------------------------"
47
- Write-Host '::endgroup::'
48
-
49
- Write-Host "::group::Environment variables"
50
- Get-ChildItem -Path Env: | Select-Object Name, Value | Sort-Object Name | Format-Table -AutoSize
51
- Write-Host '::endgroup::'
52
-
53
- Write-Host "::group::GitHub context"
54
- Write-Host $env:GITHUB_CONTEXT
55
- Write-Host '::endgroup::'
56
-
57
- Write-Host "::group::Job context"
58
- Write-Host $env:JOB_CONTEXT
59
- Write-Host '::endgroup::'
60
-
61
- Write-Host "::group::Runner context"
62
- Write-Host $env:RUNNER_CONTEXT
63
- Write-Host '::endgroup::'
64
-
65
- $autoPatching = $env:AutoPatching -eq 'true'
66
- $incrementalPrerelease = $env:IncrementalPrerelease -eq 'true'
67
- $versionPrefix = $env:VersionPrefix
68
- Write-Host "-------------------------------------------------"
69
- Write-Host "Auto patching enabled: [$autoPatching]"
70
- Write-Host "Incremental prerelease enabled: [$autoPatching]"
71
- Write-Host "Version prefix: [$versionPrefix]"
72
- Write-Host "-------------------------------------------------"
73
-
74
- $githubEventJson = Get-Content $env:GITHUB_EVENT_PATH
75
- $githubEvent = $githubEventJson | ConvertFrom-Json
76
- $pull_request = $githubEvent.pull_request
77
-
78
- Write-Host "::group::Event information - JSON"
79
- $githubEventJson | Format-List
80
- Write-Host '::endgroup::'
81
-
82
- Write-Host "::group::Event information - Object"
83
- $githubEvent | Format-List
84
- Write-Host '::endgroup::'
85
-
86
- $isPullRequest = $githubEvent.PSObject.Properties.Name -Contains 'pull_request'
87
- if (-not $isPullRequest) {
88
- "A release should not be created in this context. Exiting."
89
- return
90
- }
91
- Write-Host "-------------------------------------------------"
92
- Write-Host "Is a pull request event: [$isPullRequest]"
93
- Write-Host "Action type: [$($githubEvent.action)]"
94
- Write-Host "PR Merged: [$($pull_request.merged)]"
95
- Write-Host "PR State: [$($pull_request.state)]"
96
- Write-Host "PR Base Ref: [$($pull_request.base.ref)]"
97
- Write-Host "PR Head Ref: [$($pull_request.head.ref)]"
98
- Write-Host "-------------------------------------------------"
99
- $preReleaseName = $pull_request.head.ref -replace '[^a-zA-Z0-9]', ''
100
-
101
- Write-Host "::group::Pull request - details"
102
- $pull_request | Format-List
103
- Write-Host '::endgroup::'
104
-
105
- Write-Host '::group::Pull request - Labels'
106
- $labels = @()
107
- $labels += $pull_request.labels.name
108
- $labels | Format-List
109
- $majorRelease = $labels -Contains 'major' -or $labels -Contains 'breaking'
110
- $minorRelease = $labels -Contains 'minor' -or $labels -Contains 'feature' -or $labels -Contains 'improvement'
111
- $patchRelease = $labels -Contains 'patch' -or $labels -Contains 'fix' -or $labels -Contains 'bug'
112
- $preRelease = $labels -Contains 'prerelease'
113
- Write-Host '::endgroup::'
114
-
115
- Write-Host "-------------------------------------------------"
116
- Write-Host "Is a major release: [$majorRelease]"
117
- Write-Host "Is a minor release: [$minorRelease]"
118
- Write-Host "Is a patch release: [$patchRelease]"
119
- Write-Host "Is a prerelease: [$preRelease]"
120
- Write-Host "-------------------------------------------------"
121
-
122
- $mergedToMain = $pull_request.base.ref -eq 'main' -and $pull_request.merged -eq 'True'
123
-
124
- # Skip out if not a merge to main or a prerelease
125
- if (-not ($preRelease -or $mergedToMain)) {
126
- Write-Host "Skipping release creation, exiting."
127
- return
128
- }
129
- if ($mergedToMain) {
130
- $preRelease = $false
131
- }
132
-
133
- Write-Host '::group::Get releases'
134
- $releases = gh release list --json createdAt,isDraft,isLatest,isPrerelease,name,publishedAt,tagName | ConvertFrom-Json
135
- $releases | Format-List
136
- Write-Host '::endgroup::'
137
-
138
- Write-Host '::group::Get latest version'
139
- $latestRelease = $releases | Where-Object { $_.isLatest -eq $true }
140
- $latestRelease | Format-List
141
- $latestVersionString = $latestRelease.tagName
142
- if ($latestVersionString | IsNotNullOrEmpty) {
143
- $latestVersion = $latestVersionString | ConvertTo-SemVer
144
- Write-Host "-------------------------------------------------"
145
- Write-Host 'Latest version:'
146
- $latestVersion | Format-Table
147
- $latestVersion = "{0}{1}.{2}.{3}" -f $versionPrefix, $latestVersion.Major, $latestVersion.Minor, $latestVersion.Patch
148
- }
149
- Write-Host '::endgroup::'
150
-
151
- Write-Host "-------------------------------------------------"
152
- Write-Host "Latest version: [$latestVersion]"
153
- Write-Host "-------------------------------------------------"
154
-
155
- Write-Host '::group::Calculate new version'
156
- $version = $latestVersion | ConvertTo-SemVer
157
- $major = $version.Major
158
- $minor = $version.Minor
159
- $patch = $version.Patch
160
- if ($majorRelease) {
161
- Write-Host 'Incrementing major version.'
162
- $major++
163
- $minor = 0
164
- $patch = 0
165
- } elseif ($minorRelease) {
166
- Write-Host 'Incrementing minor version.'
167
- $minor++
168
- $patch = 0
169
- } elseif ($patchRelease -or $autoPatching) {
170
- Write-Host 'Incrementing patch version.'
171
- $patch++
172
- } else {
173
- Write-Host 'Skipping release creation, exiting.'
174
- return
175
- }
176
-
177
- $newVersion = "{0}{1}.{2}.{3}" -f $versionPrefix, $major, $minor, $patch
178
- Write-Host "Partly new version: [$newVersion]"
179
-
180
- if ($preRelease) {
181
- Write-Host "Adding a prerelease tag to the version using the branch name [$preReleaseName]."
182
- $newVersion = "$newVersion-$preReleaseName"
183
- Write-Host "Partly new version: [$newVersion]"
184
-
185
- if ($incrementalPrerelease) {
186
- $prereleases = $releases | Where-Object { $_.tagName -like "$newVersion*" } | Sort-Object -Descending -Property tagName
187
- Write-Host "Prereleases: [$($prereleases.count)]"
188
- if ($prereleases.count -gt 0) {
189
- $latestPrereleaseVersion = ($prereleases[0].tagName | ConvertTo-SemVer) | Select-Object -ExpandProperty Prerelease
190
- Write-Host "Latest prerelease: [$latestPrereleaseVersion]"
191
- $latestPrereleaseNumber = [int]($latestPrereleaseVersion -Split '\.')[-1]
192
- Write-Host "Latest prerelease number: [$latestPrereleaseNumber]"
193
- }
194
-
195
- $newPrereleaseNumber = 0 + $latestPrereleaseNumber + 1
196
- $newVersion = $newVersion + "." + $newPrereleaseNumber
197
- }
198
- }
199
- Write-Host '::endgroup::'
200
- Write-Host "-------------------------------------------------"
201
- Write-Host "New version: [$newVersion]"
202
- Write-Host "-------------------------------------------------"
203
-
204
- Write-Host "::group::Create new release [$newVersion]"
205
- if ($preRelease) {
206
- $releaseExists = $releases.tagName -Contains $newVersion
207
- if ($releaseExists -and -not $incrementalPrerelease) {
208
- Write-Host "Release already exists, recreating."
209
- gh release delete $newVersion --cleanup-tag --yes
210
- if ($LASTEXITCODE -ne 0) {
211
- Write-Error "Failed to delete the release [$newVersion]."
212
- exit $LASTEXITCODE
213
- }
214
- }
215
-
216
- gh release create $newVersion --title $newVersion --generate-notes --prerelease
217
- if ($LASTEXITCODE -ne 0) {
218
- Write-Error "Failed to create the release [$newVersion]."
219
- exit $LASTEXITCODE
220
- }
221
- return
222
- }
223
-
224
- gh release create $newVersion --title $newVersion --generate-notes
225
- git tag -f ("{0}{1}" -f $versionPrefix, $major) 'main'
226
- git tag -f ("{0}{1}.{2}" -f $versionPrefix, $major, $minor) 'main'
227
- git push origin --tags --force
228
- if ($LASTEXITCODE -ne 0) {
229
- Write-Error "Failed to create the release [$newVersion]."
230
- exit $LASTEXITCODE
231
- }
232
- Write-Host '::endgroup::'
233
-
234
- Write-Host "::group::Cleanup prereleases for [$preReleaseName]"
235
- $prereleasesToCleanup = $releases | Where-Object { $_.tagName -like "*$preReleaseName*" }
236
- foreach ($rel in $prereleasesToCleanup) {
237
- Write-Host "Deleting prerelease: [$($rel.tagName)]."
238
- gh release delete $rel.tagName --cleanup-tag --yes
239
- }
240
- Write-Host '::endgroup::'
31
+ run : ./scripts/main.ps1
0 commit comments