Skip to content

Commit 0ca3008

Browse files
adwk67NickLarsenNZ
andauthored
chore: Fix post-release script to clone repo if needed (#97)
* post-release script should clone repo if needed * improve check for dirty index * Update release/post-release.sh Co-authored-by: Nick <10092581+NickLarsenNZ@users.noreply.github.com> * Update release/post-release.sh Co-authored-by: Nick <10092581+NickLarsenNZ@users.noreply.github.com> * Update release/post-release.sh Co-authored-by: Nick <10092581+NickLarsenNZ@users.noreply.github.com> --------- Co-authored-by: Nick <10092581+NickLarsenNZ@users.noreply.github.com>
1 parent 513be31 commit 0ca3008

File tree

1 file changed

+47
-32
lines changed

1 file changed

+47
-32
lines changed

release/post-release.sh

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ set -x
1010
#-----------------------------------------------------------
1111
TAG_REGEX="^[0-9][0-9]\.([1-9]|[1][0-2])\.[0-9]+$"
1212
REMOTE="origin"
13-
13+
PR_MSG="> [!CAUTION]
14+
> ## DO NOT MERGE WITHOUT MANUAL CHECKING!
15+
> This PR contains information about commits have been cherry-picked to the release branch from the main branch, and may not reflect the correct chronology. Please check!"
1416
parse_inputs() {
1517
RELEASE_TAG=""
1618
PUSH=false
@@ -50,26 +52,26 @@ check_operators() {
5052
do
5153
echo "Operator: $OPERATOR"
5254
if [ ! -d "$TEMP_RELEASE_FOLDER/$OPERATOR" ]; then
53-
echo "Expected folder is missing: $TEMP_RELEASE_FOLDER/$OPERATOR"
54-
exit 1
55+
echo "Cloning folder: $TEMP_RELEASE_FOLDER/$OPERATOR"
56+
# $TEMP_RELEASE_FOLDER has already been created in main()
57+
git clone "git@github.com:stackabletech/${OPERATOR}.git" "$TEMP_RELEASE_FOLDER/$OPERATOR"
5558
fi
56-
5759
cd "$TEMP_RELEASE_FOLDER/$OPERATOR"
5860

59-
DIRTY_WORKING_COPY=$(git status --short)
60-
if [ -n "$DIRTY_WORKING_COPY" ]; then
61-
echo "Dirty working copy found for operator $OPERATOR"
62-
exit 1
61+
if ! git diff-index --quiet HEAD --; then
62+
>&2 echo "Dirty git index for $OPERATOR. Check working tree or staged changes. Exiting."
63+
exit 2
6364
fi
64-
BRANCH_EXISTS=$(git branch | grep "$RELEASE_BRANCH")
65+
66+
BRANCH_EXISTS=$(git branch -a | grep "$RELEASE_BRANCH")
6567
if [ -z "$BRANCH_EXISTS" ]; then
66-
echo "Expected release branch is missing: $OPERATOR/$RELEASE_BRANCH"
68+
>&2 echo "Expected release branch is missing: $OPERATOR/$RELEASE_BRANCH"
6769
exit 1
6870
fi
6971
git fetch --tags
7072
TAG_EXISTS=$(git tag | grep "$RELEASE_TAG")
7173
if [ -z "$TAG_EXISTS" ]; then
72-
echo "Expected tag $RELEASE_TAG missing for operator $OPERATOR"
74+
>&2 echo "Expected tag $RELEASE_TAG missing for operator $OPERATOR"
7375
exit 1
7476
fi
7577
done < <(yq '... comments="" | .operators[] ' "$INITIAL_DIR"/release/config.yaml)
@@ -82,7 +84,7 @@ update_operators() {
8284
do
8385
cd "$TEMP_RELEASE_FOLDER/$OPERATOR"
8486
# New branch that updates the CHANGELOG
85-
CHANGELOG_BRANCH="update-changelog-from-release-$RELEASE_TAG"
87+
CHANGELOG_BRANCH="chore/update-changelog-from-release-$RELEASE_TAG"
8688
# Branch out from main
8789
git switch -c "$CHANGELOG_BRANCH" main
8890
# Checkout CHANGELOG changes from the release tag
@@ -99,47 +101,51 @@ update_operators() {
99101
git commit -sm "Update CHANGELOG.md from release $RELEASE_TAG"
100102
# Maybe push and create pull request
101103
if "$PUSH"; then
102-
git push -u "$REMOTE" "$CHANGELOG_BRANCH"
103-
gh pr create --fill --reviewer stackabletech/developers --head "$CHANGELOG_BRANCH" --base main
104+
git push -u "${REMOTE}" "${CHANGELOG_BRANCH}"
105+
gh pr create --reviewer stackabletech/developers --base main --head "${CHANGELOG_BRANCH}" --title "chore: Update changelog from release ${RELEASE_TAG}" --body "${PR_MSG}"
106+
else
107+
echo "(Dry-run: not pushing...)"
108+
git push --dry-run "${REMOTE}" "${CHANGELOG_BRANCH}"
109+
gh pr create --reviewer stackabletech/developers --dry-run --base main --head "${CHANGELOG_BRANCH}" --title "chore: Update changelog from release ${RELEASE_TAG}" --body "${PR_MSG}"
104110
fi
105111
done < <(yq '... comments="" | .operators[] ' "$INITIAL_DIR"/release/config.yaml)
106112
}
107113

108114
# Check that the docker-images repo has been cloned locally, and that the release
109115
# branch and tag exists.
110-
check_docker_images() {
111-
echo "docker-images"
116+
check_products() {
112117
if [ ! -d "$TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO" ]; then
113-
echo "Expected folder is missing: $TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO"
114-
exit 1
118+
echo "Cloning folder: $TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO"
119+
# $TEMP_RELEASE_FOLDER has already been created in main()
120+
git clone "git@github.com:stackabletech/${DOCKER_IMAGES_REPO}.git" "$TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO"
115121
fi
116-
117122
cd "$TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO"
118123

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
124+
if ! git diff-index --quiet HEAD --; then
125+
>&2 echo "Dirty git index for $DOCKER_IMAGES_REPO. Check working tree or staged changes. Exiting."
126+
exit 2
123127
fi
124-
BRANCH_EXISTS=$(git branch | grep "$RELEASE_BRANCH")
128+
129+
BRANCH_EXISTS=$(git branch -a | grep "$RELEASE_BRANCH")
125130
if [ -z "${BRANCH_EXISTS}" ]; then
126-
echo "Expected release branch is missing: $DOCKER_IMAGES_REPO/$RELEASE_BRANCH"
131+
>&2 echo "Expected release branch is missing: $DOCKER_IMAGES_REPO/$RELEASE_BRANCH"
127132
exit 1
128133
fi
134+
129135
git fetch --tags
130136
TAG_EXISTS=$(git tag | grep "$RELEASE_TAG")
131137
if [ -z "${TAG_EXISTS}" ]; then
132-
echo "Expected tag $RELEASE_TAG missing for $DOCKER_IMAGES_REPO"
138+
>&2 echo "Expected tag $RELEASE_TAG missing for $DOCKER_IMAGES_REPO"
133139
exit 1
134140
fi
135141
}
136142

137143
# Update the docker-images changelogs on main, and check they do not differ from
138144
# the changelog in the release branch.
139-
update_docker_images() {
145+
update_products() {
140146
cd "$TEMP_RELEASE_FOLDER/$DOCKER_IMAGES_REPO"
141147
# New branch that updates the CHANGELOG
142-
CHANGELOG_BRANCH="update-changelog-from-release-$RELEASE_TAG"
148+
CHANGELOG_BRANCH="chore/update-changelog-from-release-$RELEASE_TAG"
143149
# Branch out from main
144150
git switch -c "$CHANGELOG_BRANCH" main
145151
# Checkout CHANGELOG changes from the release tag
@@ -156,8 +162,12 @@ update_docker_images() {
156162
git commit -sm "Update CHANGELOG.md from release $RELEASE_TAG"
157163
# Maybe push and create pull request
158164
if "$PUSH"; then
159-
git push -u "$REMOTE" "$CHANGELOG_BRANCH"
160-
gh pr create --fill --reviewer stackabletech/developers --head "$CHANGELOG_BRANCH" --base main
165+
git push -u "${REMOTE}" "${CHANGELOG_BRANCH}"
166+
gh pr create --reviewer stackabletech/developers --base main --head "${CHANGELOG_BRANCH}" --title "chore: Update changelog from release ${RELEASE_TAG}" --body "${PR_MSG}"
167+
else
168+
echo "(Dry-run: not pushing...)"
169+
git push --dry-run "${REMOTE}" "${CHANGELOG_BRANCH}"
170+
gh pr create --reviewer stackabletech/developers --dry-run --base main --head "${CHANGELOG_BRANCH}" --title "chore: Update changelog from release ${RELEASE_TAG}" --body "${PR_MSG}"
161171
fi
162172
}
163173

@@ -181,15 +191,20 @@ main() {
181191
exit 1
182192
fi
183193

194+
if [ ! -d "$TEMP_RELEASE_FOLDER" ]; then
195+
echo "Creating folder for cloning docker images and operators: [$TEMP_RELEASE_FOLDER]"
196+
mkdir -p "$TEMP_RELEASE_FOLDER"
197+
fi
198+
184199
if [ "products" == "$WHAT" ] || [ "all" == "$WHAT" ]; then
185200
# sanity checks before we start: folder, branches etc.
186201
# deactivate -e so that piped commands can be used
187202
set +e
188-
check_docker_images
203+
check_products
189204
set -e
190205

191206
echo "Update $DOCKER_IMAGES_REPO main changelog for release $RELEASE_TAG"
192-
update_docker_images
207+
update_products
193208
fi
194209
if [ "operators" == "$WHAT" ] || [ "all" == "$WHAT" ]; then
195210
# sanity checks before we start: folder, branches etc.

0 commit comments

Comments
 (0)