...
1#!/usr/bin/env bash
2
3# This script is meant to be run as `./releng/prepare-y-bump` by a
4# human Emissary maintainer who is designating that we are starting
5# work on a new X.Y version.
6
7set -euE -o pipefail
8
9this_xy=$(git describe --tags --match='v*'|cut -d. -f1,2|sed 's/^v//')
10next_xy=${this_xy%.*}.$((${this_xy##*.}+1))
11
12chart_this_xy=$(git describe --tags --match='chart/v*'|cut -d. -f1,2|sed 's,^chart/v,,')
13chart_next_xy=${chart_this_xy%.*}.$((${chart_this_xy##*.}+1))
14
15refs=()
16
17if test -z "$(git for-each-ref "refs/remotes/*/release/v${this_xy}")"; then
18 # We are on 'master', which will become the next_xy branch,
19 # and we need to create a 'release/v${this_xy}' branch.
20
21 git branch "release/v${this_xy}"
22 refs+=("release/v${this_xy}")
23
24 git branch "${USER}/v${next_xy}"
25 git switch "${USER}/v${next_xy}"
26 refs+=("${USER}/v${next_xy}")
27
28 echo 'Editing README.md...'
29 gawk -i inplace \
30 -v this_xy="${this_xy}" \
31 -v next_xy="${next_xy}" \
32 '
33 /\[`master`\].*branch for/ {
34 print "- [`master`](https://github.com/emissary-ingress/emissary/tree/master) - branch for Emissary-ingress " next_xy ".z work (:heavy_check_mark: upcoming release)"
35 print "- [`release/v" this_xy "`](https://github.com/emissary-ingress/emissary/tree/release/v" this_xy ") - branch for Emissary-ingress " this_xy ".z work (:heavy_check_mark: current latest)"
36 }
37 ! /\[`master`\].*branch for/ { print }
38 ' \
39 README.md
40else
41 # We are on 'release/v{this_xy}' (presumably 'x' is not the
42 # latest major version), and we need to create a
43 # 'release/${next_xy}' branch.
44
45 git branch "release/v${next_xy}"
46 git switch "release/v${next_xy}"
47 refs+=("release/v${next_xy}")
48
49 echo 'Editing README.md...'
50 gawk -i inplace \
51 -v next_xy="${next_xy}" \
52 '
53 /\[`release\/v'"${this_xy/./'\.'}"'`\].*branch for/ {
54 print "- [`release/v" next_xy "`](https://github.com/emissary-ingress/emissary/tree/release/v" next_xy ") - branch for Emissary-ingress " next_xy ".z work (:heavy_check_mark: upcoming release)"
55 }
56 { print }
57 ' \
58 README.md
59fi
60
61echo 'Editing docs/releaseNotes.yml...'
62if ! grep -q -F -e "- version: ${next_xy}.0" docs/releaseNotes.yml; then
63 gawk -i inplace \
64 -v next_xy="${next_xy}" \
65 '
66 BEGIN { done=0 }
67 /^ - version:/ && !done {
68 print " - version: " next_xy ".0"
69 print " date: '\''TBD'\''"
70 print " notes: []"
71 print ""
72 done=1
73 } \
74 { print }
75 ' \
76 docs/releaseNotes.yml
77fi
78
79echo 'Editing charts/emissary-ingress/CHANGELOG.md...'
80if ! grep -q -e "^## v{next_xy}\.0(\$| )" charts/emissary-ingress/CHANGELOG.md; then
81 gawk -i inplace \
82 -v next_xy="${next_xy}" \
83 -v chart_next_xy="${chart_next_xy}" \
84 '
85 BEGIN { done=0 }
86 { del=0 }
87 /^## Next Release/ && !done {
88 print "## v" chart_next_xy ".0 (not yet released)"
89 print ""
90 print "- Upgrade Emissary to v" next_xy ".0 [CHANGELOG](https://github.com/emissary-ingress/emissary/blob/master/CHANGELOG.md)"
91 print ""
92 done=1
93 del=1
94 }
95 /^## v/ && !done {
96 print "## v" chart_next_xy ".0 (not yet released)"
97 print ""
98 print "- Upgrade Emissary to v" next_xy ".0 [CHANGELOG](https://github.com/emissary-ingress/emissary/blob/master/CHANGELOG.md)"
99 print ""
100 done=1
101 }
102 /no changes yet/ { del=1 }
103 !del { print }
104 ' \
105 charts/emissary-ingress/CHANGELOG.md
106fi
107
108echo "Running 'make generate-fast'..."
109make generate-fast
110
111echo
112echo 'Commiting changes...'
113git add .
114git commit --signoff --message="Prepare to work on v${next_xy}.0"
115
116echo 'Creating tags...'
117git tag --annotate --message="Start work on Emissary v${next_xy}.0" "v${next_xy}.0-dev"
118refs+=("v${next_xy}.0-dev")
119git tag --annotate --message="Start work on Emissary chart v${chart_next_xy}.0 for Emissary v${next_xy}.0" "chart/v${chart_next_xy}.0-dev"
120refs+=("chart/v${chart_next_xy}.0-dev")
121
122echo
123echo "======================================================================"
124echo
125echo "All done!"
126echo "Look over the commit that has been made locally;"
127echo "when you are ready, run the following command to push it:"
128echo
129echo " git push origin ${refs[*]}"
130echo
View as plain text