Created
November 10, 2022 14:38
-
-
Save pohly/a1b8d1b53792e7ddb5789f8f35b7f894 to your computer and use it in GitHub Desktop.
Update script for release-tools in github.com repos
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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