1
- name : release
1
+ name : Create Release
2
2
3
3
on :
4
4
push :
5
- # Sequence of patterns matched against refs/tags
6
- tags :
7
- - ' v*' # Push events to matching v*, i.e. v1.0, v20.15.10
8
-
5
+ branches :
6
+ - main
7
+ paths :
8
+ - ' CHANGELOG/*.md'
9
+
9
10
permissions :
10
- contents : write # Allow to create a release.
11
+ contents : write # Allow to push a tag, create a release branch and publish a draft release.
11
12
12
13
jobs :
13
- build :
14
+ push_release_tags :
15
+ runs-on : ubuntu-latest
16
+ outputs :
17
+ release_tag : ${{ steps.release-version.outputs.release_version }}
18
+ steps :
19
+ - name : Checkout code
20
+ uses : actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # tag=v3.5.3
21
+ with :
22
+ fetch-depth : 0
23
+ - name : Get changed files
24
+ id : changed-files
25
+ uses : tj-actions/changed-files@920e7b9ae1d45913fc81f86c956fee89c77d2e5e # tag=v37.5.0
26
+ - name : Get release version
27
+ id : release-version
28
+ run : |
29
+ if [[ ${{ steps.changed-files.outputs.all_changed_files_count }} != 1 ]]; then
30
+ echo "1 release notes file should be changed to create a release tag, found ${{ steps.changed-files.outputs.all_changed_files_count }}"
31
+ exit 1
32
+ fi
33
+ for changed_file in ${{ steps.changed-files.outputs.all_changed_files }}; do
34
+ export RELEASE_VERSION=$(echo "${changed_file}" | grep -oP '(?<=/)[^/]+(?=\.md)')
35
+ echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
36
+ echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_OUTPUT
37
+ if [[ "$RELEASE_VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$ ]]; then
38
+ echo "Valid semver: $RELEASE_VERSION"
39
+ else
40
+ echo "Invalid semver: $RELEASE_VERSION"
41
+ exit 1
42
+ fi
43
+ done
44
+ - name : Determine the release branch to use
45
+ run : |
46
+ if [[ $RELEASE_VERSION =~ beta ]] || [[ $RELEASE_VERSION =~ alpha ]]; then
47
+ export RELEASE_BRANCH=main
48
+ echo "RELEASE_BRANCH=$RELEASE_BRANCH" >> $GITHUB_ENV
49
+ echo "This is a beta or alpha release, will use release branch $RELEASE_BRANCH"
50
+ else
51
+ export RELEASE_BRANCH=release-$(echo $RELEASE_VERSION | sed -E 's/^v([0-9]+)\.([0-9]+)\..*$/\1.\2/')
52
+ echo "RELEASE_BRANCH=$RELEASE_BRANCH" >> $GITHUB_ENV
53
+ echo "This is not a beta or alpha release, will use release branch $RELEASE_BRANCH"
54
+ fi
55
+ - name : Create or checkout release branch
56
+ run : |
57
+ if git show-ref --verify --quiet "refs/remotes/origin/$RELEASE_BRANCH"; then
58
+ echo "Branch $RELEASE_BRANCH already exists"
59
+ git checkout "$RELEASE_BRANCH"
60
+ else
61
+ git checkout -b "$RELEASE_BRANCH"
62
+ git push origin "$RELEASE_BRANCH"
63
+ echo "Created branch $RELEASE_BRANCH"
64
+ fi
65
+ - name : Validate tag does not already exist
66
+ run : |
67
+ if [[ $(git tag -l $RELEASE_VERSION) ]]; then
68
+ echo "Tag $RELEASE_VERSION already exists, exiting"
69
+ exit 1
70
+ fi
71
+ - name : Create Release Tag
72
+ run : |
73
+ git config user.name "${GITHUB_ACTOR}"
74
+ git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
75
+ git tag -a ${RELEASE_VERSION} -m ${RELEASE_VERSION}
76
+ git tag test/${RELEASE_VERSION}
77
+ git push origin ${RELEASE_VERSION}
78
+ git push origin test/${RELEASE_VERSION}
79
+ echo "Created tags $RELEASE_VERSION and test/${RELEASE_VERSION}"
80
+ release :
14
81
name : create draft release
15
82
runs-on : ubuntu-latest
83
+ needs : push_release_tags
16
84
steps :
17
85
- name : Set env
18
- run : echo "RELEASE_TAG=${GITHUB_REF:10}" >> $GITHUB_ENV
86
+ run : echo "RELEASE_TAG=${RELEASE_TAG}" >> $GITHUB_ENV
87
+ env :
88
+ RELEASE_TAG : ${{needs.push_release_tags.outputs.release_tag}}
19
89
- name : checkout code
20
90
uses : actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # tag=v3.5.3
21
91
with :
22
92
fetch-depth : 0
93
+ ref : ${{ env.RELEASE_TAG }}
23
94
- name : Calculate go version
24
95
run : echo "go_version=$(make go-version)" >> $GITHUB_ENV
25
96
- name : Set up Go
@@ -29,9 +100,14 @@ jobs:
29
100
- name : generate release artifacts
30
101
run : |
31
102
make release
103
+ - name : get release notes
104
+ run : |
105
+ curl -L "https://raw.githubusercontent.com/${{ github.repository }}/main/CHANGELOG/${{ env.RELEASE_TAG }}.md" \
106
+ -o "${{ env.RELEASE_TAG }}.md"
32
107
- name : Release
33
108
uses : softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # tag=v1
34
109
with :
35
110
draft : true
36
111
files : out/*
37
- body : " TODO: Copy release notes shared by the comms team"
112
+ body_path : ${{ env.RELEASE_TAG }}.md
113
+ tag_name : ${{ env.RELEASE_TAG }}
0 commit comments