Skip to content

Commit af5f311

Browse files
Move to script (#11)
- Fixes #7
1 parent f7d25a9 commit af5f311

File tree

3 files changed

+195
-211
lines changed

3 files changed

+195
-211
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Add a workflow in you repository using the following example:
2828
name: Auto-Release
2929

3030
on:
31-
pull_request:
31+
pull_request_target:
3232
branches:
3333
- main
3434
types:

action.yml

+1-210
Original file line numberDiff line numberDiff line change
@@ -25,216 +25,7 @@ runs:
2525
- name: Auto-Release
2626
shell: pwsh
2727
env:
28-
GITHUB_CONTEXT: ${{ toJson(github) }}
29-
JOB_CONTEXT: ${{ toJson(job) }}
30-
RUNNER_CONTEXT: ${{ toJson(runner) }}
3128
AutoPatching: ${{ inputs.AutoPatching }}
3229
IncrementalPrerelease: ${{ inputs.IncrementalPrerelease }}
3330
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

Comments
 (0)