-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaction.yml
155 lines (146 loc) · 5.37 KB
/
action.yml
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Versioning Action
description: Verifies labels on PRs and creates semantically versioned releases when PRs are merged
inputs:
github_token:
description: The GitHub token to use for authentication.
required: true
update_major_minor_tags:
description: >
When 'true', the action will update relevant major and minor tags (e.g. v1, v1.2) to point to the newly created
release.
required: false
default: false
tag_prefix:
description: Prefix to append to git tags. To unset this, set version_prefix to an empty string.
required: false
default: v
release_name:
description: |
Name of the release. Supports these template variables:
<RELEASE_VERSION> the version number, e.g. "1.2.3"
<RELEASE_TAG> the git tag name, e.g. "v1.2.3"
required: false
default: <RELEASE_TAG>
dry_run:
description: When set to 'true', will compute the next tag, but will not create a release.
required: false
default: false
dry_run_on_pr:
description: >
When set to 'true', will perform a dry run on PR events. Otherwise, does not run release action at all on PR
events. When update_major_minor_tags is 'true', a PR dry run will not update tags.
required: false
default: false
no_release_label:
description: >
Label to apply to PRs that should not trigger a release. If set, PRs with this label will not trigger a release.
required: false
default: no release
outputs:
tag_name:
description: Tag of released version. Only available on push events.
value: ${{ steps.create-release.outputs.tag_name }}
version:
description: Version of release. Only available on push events.
value: ${{ steps.create-release.outputs.version }}
body:
description: Github Release Body in Text. Only available on push events.
value: ${{ steps.create-release.outputs.body }}
upload_url:
description: Github Release Upload URL. Only available on push events.
value: ${{ steps.create-release.outputs.upload_url }}
runs:
using: composite
steps:
- name: Require PR Labels
uses: mheap/github-action-required-labels@v2
if: github.event_name == 'pull_request'
env:
GITHUB_TOKEN: ${{ inputs.github_token }}
with:
mode: exactly
count: 1
labels: release:major, release:minor, release:patch, ${{ inputs.no_release_label }}
- name: Create Release
id: create-release
uses: rymndhng/[email protected]
if: >
(
always()
&& github.event_name == 'push'
)
|| (
always()
&& github.event_name == 'pull_request'
&& inputs.dry_run_on_pr == 'true'
)
env:
GITHUB_TOKEN: ${{ inputs.github_token }}
with:
bump_version_scheme: norelease
tag_prefix: ${{ inputs.tag_prefix }}
release_name: ${{ inputs.release_name }}
dry_run: ${{ github.event_name == 'pull_request' && inputs.dry_run_on_pr == 'true' || inputs.dry_run }}
- name: Output version parts
id: version-parts
if: >
always()
&& steps.create-release.outcome == 'success'
&& steps.create-release.outputs.tag_name != ''
&& github.event_name == 'push'
env:
version: ${{ steps.create-release.outputs.tag_name }}
shell: bash
run: |
clean_version=${version#v}
echo "major=$(echo $clean_version | cut -d. -f1)" >> $GITHUB_OUTPUT
echo "minor=$(echo $clean_version | cut -d. -f2)" >> $GITHUB_OUTPUT
echo "patch=$(echo $clean_version | cut -d. -f3)" >> $GITHUB_OUTPUT
- name: Update major version tag
uses: actions/github-script@v7
if: >
always()
&& steps.version-parts.outcome == 'success'
&& steps.create-release.outputs.tag_name != ''
&& github.event_name == 'push'
&& inputs.update_major_minor_tags == 'true'
with:
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'refs/tags/v${{ steps.version-parts.outputs.major }}',
sha: context.sha
}).catch(err => {
if (err.status !== 422) throw err;
github.rest.git.updateRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'tags/v${{ steps.version-parts.outputs.major }}',
sha: context.sha
});
});
- name: Update minor version tag
uses: actions/github-script@v7
if: >
always()
&& steps.version-parts.outcome == 'success'
&& steps.create-release.outputs.tag_name != ''
&& github.event_name == 'push'
&& inputs.update_major_minor_tags == 'true'
with:
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'refs/tags/v${{ steps.version-parts.outputs.major }}.${{ steps.version-parts.outputs.minor }}',
sha: context.sha
}).catch(err => {
if (err.status !== 422) throw err;
github.rest.git.updateRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'tags/v${{ steps.version-parts.outputs.major }}.${{ steps.version-parts.outputs.minor }}',
sha: context.sha
});
});