1- name : release
1+ name : Create Release
22
33on :
44 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+
910permissions :
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.
1112
1213jobs :
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 :
1481 name : create draft release
1582 runs-on : ubuntu-latest
83+ needs : push_release_tags
1684 steps :
1785 - 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}}
1989 - name : checkout code
2090 uses : actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # tag=v3.5.3
2191 with :
2292 fetch-depth : 0
93+ ref : ${{ env.RELEASE_TAG }}
2394 - name : Calculate go version
2495 run : echo "go_version=$(make go-version)" >> $GITHUB_ENV
2596 - name : Set up Go
@@ -29,9 +100,14 @@ jobs:
29100 - name : generate release artifacts
30101 run : |
31102 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"
32107 - name : Release
33108 uses : softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # tag=v1
34109 with :
35110 draft : true
36111 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