Skip to content

Instantly share code, notes, and snippets.

@pohly
Created November 10, 2022 14:38
Show Gist options
  • Save pohly/a1b8d1b53792e7ddb5789f8f35b7f894 to your computer and use it in GitHub Desktop.
Save pohly/a1b8d1b53792e7ddb5789f8f35b7f894 to your computer and use it in GitHub Desktop.
Update script for release-tools in github.com repos
#!/bin/sh -x
die () {
echo >&2 "\nERROR: $@\n"
exit 1
}
FILTER_BRANCH_SQUELCH_WARNING=1
export FILTER_BRANCH_SQUELCH_WARNING
while read org repo branches; do
if [ "$org" != "#" ]; then
(
cd $org/$repo || die "$org/$repo: does not exit"
git fetch origin || die "$org/$repo: git fetch"
for i in $branches; do
# Delete an existing branch and thus close pending PRs.
git push pohly :prow-update-$i
git checkout -B prow-update-$i origin/$i || die "$org/$repo:$i checkout"
rm -rf .git/MERGE*
old_commit=$(git rev-parse HEAD) || die "determine HEAD"
if ! git subtree pull --squash --prefix=release-tools https://github.com/kubernetes-csi/csi-release-tools.git master; then
# Sometimes "--squash" leads to merge conflicts. Because we know that "release-tools"
# is an unmodified copy of csi-release-tools, we can automatically resolve that
# by replacing it completely.
if [ -e .git/MERGE_MSG ] && [ -e .git/FETCH_HEAD ] && grep -q "^# Conflict" .git/MERGE_MSG; then
rm -rf release-tools
mkdir release-tools
git archive FETCH_HEAD | tar -C release-tools -xf - || die "failed to re-create release-tools from FETCH_HEAD"
git add release-tools || die "add release-tools"
git commit --file=.git/MERGE_MSG || die "commit squashed release-tools"
else
die "git subtree pull --squash failed, cannot reover."
fi
fi
new_commit=$(git rev-parse HEAD) || die "determine HEAD"
if [ "$old_commit" != "$new_commit" ]; then
changes=$(git log --no-merges --format=%B -n 1 HEAD)
# Avoid "Merge pull requests #<number>" in the new commit messages because
# https://github.com/kubernetes/release/blob/9d099f0757b46c7f3d209751e8e2a6056c8bca5b/pkg/notes/notes.go#L912
# will misinterpret them as pull requests from the current repo.
git filter-branch -f --msg-filter "sed -e 's;^\\([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]*\\) ;https://github.com/kubernetes-csi/csi-release-tools/commit/\\1 ;' -e 's;Merge pull request #\\([0-9]*\\);Merge https://github.com/kubernetes-csi/csi-release-tools/pull/\\1;'" origin/$i..HEAD
# Also make our PR message below nicer by turning commits and pull request numbers into URLs.
changes="$(echo "$changes" | sed -e 's;^\([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]*\) ;[\1](https://github.com/kubernetes-csi/csi-release-tools/commit/\1) ;' -e 's;Merge pull request #\([0-9]*\);Merge [pull request #\1](https://github.com/kubernetes-csi/csi-release-tools/pull/\1);')"
gofmt -w $(find . -name *.go | grep -v ./vendor) || die "gofmt failed"
git add -u || die "add -u"
release-tools/update-vendor.sh || die "update vendor"
go mod tidy || die "go mod tidy"
git add vendor || die "add vendor"
git add -u || die "add -u"
git commit --amend --no-edit || die "commit vendor"
make test || die "$org/$repo:$i make test"
git push pohly prow-update-$i || die "pohly:prow-update-$i push failed - probably there is already an unmerged branch and pending PR"
hub pull-request -F - -b $org/$repo:$i -h pohly/$repo:prow-update-$i <<EOF
$i: update release-tools
$changes
\`\`\`release-note
NONE
\`\`\`
EOF
if [ "$?" -ne 0 ]; then
die "$repo:$i pull-request"
fi
fi
done
) || die "$repo failed"
fi
done <<EOF
# kubernetes-csi csi-driver-host-path master
# kubernetes-csi csi-driver-iscsi master
# kubernetes-csi csi-driver-nfs master
# kubernetes-csi csi-lib-utils master
# kubernetes-csi csi-proxy master
# kubernetes-csi csi-test master
# kubernetes-csi external-attacher master
# kubernetes-csi external-health-monitor master
# kubernetes-csi external-provisioner master
# kubernetes-csi external-resizer master
# kubernetes-csi external-snapshotter master
kubernetes-csi livenessprobe master
# kubernetes-csi node-driver-registrar master
# kubernetes-csi volume-data-source-validator master
# kubernetes-csi lib-volume-populator master
# kubernetes-sigs gcp-compute-persistent-disk-csi-driver master
# kubernetes-sigs nfs-subdir-external-provisioner master
# kubernetes-sigs gluster-file-external-provisioner master
# kubernetes-csi external-snapshotter release-4.1
# kubernetes-csi external-snapshotter release-4.2
# kubernetes-csi external-snapshotter release-5.0
# kubernetes-csi external-snapshotter release-6.0
# kubernetes-csi external-attacher release-3.2
# kubernetes-csi external-attacher release-3.3
# kubernetes-csi external-attacher release-3.4
# kubernetes-csi external-provisioner release-2.2
# kubernetes-csi external-provisioner release-3.0
# kubernetes-csi external-provisioner release-3.1
# kubernetes-csi external-resizer release-1.2
# kubernetes-csi external-resizer release-1.3
# kubernetes-csi external-resizer release-1.4
# kubernetes-csi node-driver-registrar release-2.2
# kubernetes-csi node-driver-registrar release-2.3
# kubernetes-csi node-driver-registrar release-2.4
# kubernetes-csi node-driver-registrar release-2.5
# kubernetes-csi external-health-monitor release-0.3
# kubernetes-csi external-health-monitor release-0.4
EOF
# https://github.com/kubernetes-sigs/nfs-ganesha-server-and-external-provisioner/pull/77#issuecomment-982988638
# kubernetes-sigs nfs-ganesha-server-and-external-provisioner master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment