forked from scylladb/scylla-operator
-
Notifications
You must be signed in to change notification settings - Fork 1
112 lines (98 loc) · 3.61 KB
/
releases.yaml
File metadata and controls
112 lines (98 loc) · 3.61 KB
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
# Copyright (C) 2021 ScyllaDB
name: Releases
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+'
# GitHub actions suck for re-triggering on tag changes, so we allow also manual trigger.
# Also useful for easily re-triggering release notes updates when PR title is fixed.
workflow_dispatch:
inputs:
tag:
description: 'Tag for publishing a release, like `v1.3.0`. The old release must be deleted before this job.'
required: true
env:
go_version: 1.17.5
git_repo_path: ${{ github.workspace }}/go/src/github.com/scylladb/scylla-operator
retention_days: 90
defaults:
run:
shell: bash
working-directory: "./go/src/github.com/scylladb/scylla-operator"
jobs:
release-notes:
name: Publish release notes
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
path: ${{ env.git_repo_path }}
fetch-depth: 0
- name: Setup go
uses: actions/setup-go@v2
with:
go-version: ${{ env.go_version }}
- name: Create release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euExo pipefail
shopt -s inherit_errexit
source ./hack/lib/semver.sh
if [[ -n '${{ github.event.inputs.tag }}' ]]; then
current_tag='${{ github.event.inputs.tag }}'
else
current_tag="${GITHUB_REF#refs/*/}"
fi
[[ "${current_tag}" != "" ]]
echo "${current_tag}" | grep -E -e '^v[0-9]+\.[0-9]+\.[0-9]+(-(beta|rc).[0-9]+)?$'
prerelease=$( echo "${current_tag}" | sed -E -e 's/^[^-]+(-(beta|rc)\..*)?$/\2/' )
case "${prerelease}" in
"beta" | "rc")
# Pre-releases diff to a closest pre-release of the same type.
tags=$( git tag -l | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-'"${prerelease}"'.[0-9]+)?$' )
;;
"")
# Releases diff to a closest release.
tags=$( git tag -l | grep -E '^v[0-9]+\.[0-9]+\.[0-9]$' )
;;
*)
exit 1
;;
esac
previous_tag="$( find_previous_semver "${tags}" "${current_tag}" )"
[[ "${previous_tag}" != "" ]]
release_name="${current_tag#v}"
previous_release_name="${previous_tag#v}"
make build GO_BUILD_PACKAGES=./cmd/gen-release-notes --warn-undefined-variables
./gen-release-notes --start-ref="$( git merge-base "${current_tag}" "${previous_tag}" )" \
--end-ref="${current_tag}" --release-name="${release_name}" --previous-release-name="${previous_release_name}" --github-token="${GITHUB_TOKEN}" \
--loglevel=2 > ~/release_notes.md
data="$( jq -n \
--arg current_tag "${current_tag}" \
--arg github_ref "${GITHUB_REF}" \
--arg release_name "${release_name}" \
--arg prerelease "${prerelease}" \
--arg body "$( cat ~/release_notes.md )" \
'{
"tag_name": $current_tag,
"name": $current_tag,
"draft": false,
"prerelease": $prerelease | test("^$") | not,
"body": $body
}' )"
curl --fail -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/scylladb/scylla-operator/releases \
--data "${data}"
- name: Upload artifact
if: ${{ always() }}
uses: actions/upload-artifact@v2
with:
name: release_notes.md
path: ~/release_notes.md
if-no-files-found: error
retention-days: ${{ env.retention_days }}