9
9
# this is needed for cargo commands to work properly
10
10
# -----------------------------------------------------------
11
11
TAG_REGEX=" ^[0-9][0-9]\.([1-9]|[1][0-2])\.[0-9]+$"
12
- REPOSITORY =" origin"
12
+ REMOTE =" origin"
13
13
14
14
parse_inputs () {
15
15
RELEASE_TAG=" "
16
16
PUSH=false
17
+ WHAT=" all"
17
18
18
19
while [[ " $# " -gt 0 ]]; do
19
20
case $1 in
20
21
-t|--tag) RELEASE_TAG=" $2 " ; shift ;;
22
+ -w|--what) WHAT=" $2 " ; shift ;;
21
23
-p|--push) PUSH=true ;;
22
24
* ) echo " Unknown parameter passed: $1 " ; exit 1 ;;
23
25
esac
@@ -35,45 +37,50 @@ parse_inputs() {
35
37
RELEASE_BRANCH=" release-$RELEASE "
36
38
37
39
INITIAL_DIR=" $PWD "
40
+ DOCKER_IMAGES_REPO=$( yq ' ... comments="" | .images-repo ' " $INITIAL_DIR " /release/config.yaml)
38
41
TEMP_RELEASE_FOLDER=" /tmp/stackable-$RELEASE_BRANCH "
39
42
40
- echo " Settings: ${ RELEASE_BRANCH} : Push: $PUSH "
43
+ echo " Settings: $RELEASE_BRANCH : Push: $PUSH "
41
44
}
42
45
46
+ # Check that the operator repos have been cloned locally, and that the release
47
+ # branch and tag exists.
43
48
check_operators () {
44
- while IFS=" " read -r operator || [ -n " $operator " ]
49
+ while IFS=" " read -r OPERATOR || [ -n " $OPERATOR " ]
45
50
do
46
- echo " Operator: $operator "
47
- if [ ! -d " $TEMP_RELEASE_FOLDER /${operator} " ]; then
48
- echo " Expected folder is missing: $TEMP_RELEASE_FOLDER /${operator} "
51
+ echo " Operator: $OPERATOR "
52
+ if [ ! -d " $TEMP_RELEASE_FOLDER /$OPERATOR " ]; then
53
+ echo " Expected folder is missing: $TEMP_RELEASE_FOLDER /$OPERATOR "
49
54
exit 1
50
55
fi
51
56
52
- cd " $TEMP_RELEASE_FOLDER /${operator} "
57
+ cd " $TEMP_RELEASE_FOLDER /$OPERATOR "
53
58
54
59
DIRTY_WORKING_COPY=$( git status --short)
55
- if [ -n " ${ DIRTY_WORKING_COPY} " ]; then
56
- echo " Dirty working copy found for operator ${operator} "
60
+ if [ -n " $DIRTY_WORKING_COPY " ]; then
61
+ echo " Dirty working copy found for operator $OPERATOR "
57
62
exit 1
58
63
fi
59
64
BRANCH_EXISTS=$( git branch | grep " $RELEASE_BRANCH " )
60
- if [ -z " ${ BRANCH_EXISTS} " ]; then
61
- echo " Expected release branch is missing: ${operator} /$RELEASE_BRANCH "
65
+ if [ -z " $BRANCH_EXISTS " ]; then
66
+ echo " Expected release branch is missing: $OPERATOR /$RELEASE_BRANCH "
62
67
exit 1
63
68
fi
64
69
git fetch --tags
65
70
TAG_EXISTS=$( git tag | grep " $RELEASE_TAG " )
66
- if [ -z " ${ TAG_EXISTS} " ]; then
67
- echo " Expected tag $RELEASE_TAG missing for operator ${operator} "
71
+ if [ -z " $TAG_EXISTS " ]; then
72
+ echo " Expected tag $RELEASE_TAG missing for operator $OPERATOR "
68
73
exit 1
69
74
fi
70
75
done < <( yq ' ... comments="" | .operators[] ' " $INITIAL_DIR " /release/config.yaml)
71
76
}
72
77
73
- update_main_changelog () {
74
- while IFS=" " read -r operator || [ -n " $operator " ]
78
+ # Update the operator changelogs on main, and check they do not differ from
79
+ # the changelog in the release branch.
80
+ update_operators () {
81
+ while IFS=" " read -r OPERATOR || [ -n " $OPERATOR " ]
75
82
do
76
- cd " $TEMP_RELEASE_FOLDER /${operator} "
83
+ cd " $TEMP_RELEASE_FOLDER /$OPERATOR "
77
84
# New branch that updates the CHANGELOG
78
85
CHANGELOG_BRANCH=" update-changelog-from-release-$RELEASE_TAG "
79
86
# Branch out from main
@@ -84,20 +91,76 @@ update_main_changelog() {
84
91
# are no conflicts.
85
92
CHANGELOG_MODIFIED=$( git status --short)
86
93
if [ " M CHANGELOG.md" != " $CHANGELOG_MODIFIED " ]; then
87
- echo " Failed to update CHANGELOG.md in main for operator ${operator} "
94
+ echo " Failed to update CHANGELOG.md in main for operator $OPERATOR "
88
95
exit 1
89
96
fi
90
97
# Commit the updated CHANGELOG.
91
98
git add CHANGELOG.md
92
- git commit -m " Update CHANGELOG.md from release $RELEASE_TAG "
99
+ git commit -sm " Update CHANGELOG.md from release $RELEASE_TAG "
93
100
# Maybe push and create pull request
94
101
if " $PUSH " ; then
95
- git push -u " $REPOSITORY " " $CHANGELOG_BRANCH "
102
+ git push -u " $REMOTE " " $CHANGELOG_BRANCH "
96
103
gh pr create --fill --reviewer stackable/developers --head " $CHANGELOG_BRANCH " --base main
97
104
fi
98
105
done < <( yq ' ... comments="" | .operators[] ' " $INITIAL_DIR " /release/config.yaml)
99
106
}
100
107
108
+ # Check that the docker-images repo has been cloned locally, and that the release
109
+ # branch and tag exists.
110
+ check_docker_images () {
111
+ echo " docker-images"
112
+ if [ ! -d " $TEMP_RELEASE_FOLDER /$DOCKER_IMAGES_REPO " ]; then
113
+ echo " Expected folder is missing: $TEMP_RELEASE_FOLDER /$DOCKER_IMAGES_REPO "
114
+ exit 1
115
+ fi
116
+
117
+ cd " $TEMP_RELEASE_FOLDER /$DOCKER_IMAGES_REPO "
118
+
119
+ DIRTY_WORKING_COPY=$( git status --short)
120
+ if [ -n " ${DIRTY_WORKING_COPY} " ]; then
121
+ echo " Dirty working copy found for $DOCKER_IMAGES_REPO "
122
+ exit 1
123
+ fi
124
+ BRANCH_EXISTS=$( git branch | grep " $RELEASE_BRANCH " )
125
+ if [ -z " ${BRANCH_EXISTS} " ]; then
126
+ echo " Expected release branch is missing: $DOCKER_IMAGES_REPO /$RELEASE_BRANCH "
127
+ exit 1
128
+ fi
129
+ git fetch --tags
130
+ TAG_EXISTS=$( git tag | grep " $RELEASE_TAG " )
131
+ if [ -z " ${TAG_EXISTS} " ]; then
132
+ echo " Expected tag $RELEASE_TAG missing for $DOCKER_IMAGES_REPO "
133
+ exit 1
134
+ fi
135
+ }
136
+
137
+ # Update the docker-images changelogs on main, and check they do not differ from
138
+ # the changelog in the release branch.
139
+ update_docker_images () {
140
+ cd " $TEMP_RELEASE_FOLDER /$DOCKER_IMAGES_REPO "
141
+ # New branch that updates the CHANGELOG
142
+ CHANGELOG_BRANCH=" update-changelog-from-release-$RELEASE_TAG "
143
+ # Branch out from main
144
+ git switch -c " $CHANGELOG_BRANCH " main
145
+ # Checkout CHANGELOG changes from the release tag
146
+ git checkout " $RELEASE_TAG " -- CHANGELOG.md
147
+ # Ensure only the CHANGELOG has been modified and there
148
+ # are no conflicts.
149
+ CHANGELOG_MODIFIED=$( git status --short)
150
+ if [ " M CHANGELOG.md" != " $CHANGELOG_MODIFIED " ]; then
151
+ echo " Failed to update CHANGELOG.md in main for $DOCKER_IMAGES_REPO "
152
+ exit 1
153
+ fi
154
+ # Commit the updated CHANGELOG.
155
+ git add CHANGELOG.md
156
+ git commit -sm " Update CHANGELOG.md from release $RELEASE_TAG "
157
+ # Maybe push and create pull request
158
+ if " $PUSH " ; then
159
+ git push -u " $REMOTE " " $CHANGELOG_BRANCH "
160
+ gh pr create --fill --reviewer stackable/developers --head " $CHANGELOG_BRANCH " --base main
161
+ fi
162
+ }
163
+
101
164
102
165
main () {
103
166
parse_inputs " $@ "
@@ -118,14 +181,27 @@ main() {
118
181
exit 1
119
182
fi
120
183
121
- # sanity checks before we start: folder, branches etc.
122
- # deactivate -e so that piped commands can be used
123
- set +e
124
- check_operators
125
- set -e
184
+ if [ " products" == " $WHAT " ] || [ " all" == " $WHAT " ]; then
185
+ # sanity checks before we start: folder, branches etc.
186
+ # deactivate -e so that piped commands can be used
187
+ set +e
188
+ check_docker_images
189
+ set -e
190
+
191
+ echo " Update $DOCKER_IMAGES_REPO main changelog for release $RELEASE_TAG "
192
+ update_docker_images
193
+ fi
194
+ if [ " operators" == " $WHAT " ] || [ " all" == " $WHAT " ]; then
195
+ # sanity checks before we start: folder, branches etc.
196
+ # deactivate -e so that piped commands can be used
197
+ set +e
198
+ check_operators
199
+ set -e
200
+
201
+ echo " Update the operator main changelog for release $RELEASE_TAG "
202
+ update_operators
203
+ fi
126
204
127
- echo " Update main changelog from release $RELEASE_TAG "
128
- update_main_changelog
129
205
}
130
206
131
207
main " $@ "
0 commit comments