From 96cc50e58e841bdbf7ff274e3c0910afb2aebeed Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Sun, 24 Oct 2021 16:03:44 -0700 Subject: [PATCH] Checkout a local branch, pull a remote branch --- scripts/release.sh | 58 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/scripts/release.sh b/scripts/release.sh index db4839b19..1edc060d1 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -67,14 +67,25 @@ set -o errexit set -o nounset set -o pipefail +# Verify git status +if git_status=$(git status --porcelain --untracked=no 2>/dev/null) && [[ -n "${git_status}" ]]; then + echo "!!! Dirty tree. Clean up and try again." + exit 1 +fi + +REPO_ROOT="$(git rev-parse --show-toplevel)" +declare -r REPO_ROOT +cd "${REPO_ROOT}" +declare -r REBASEMAGIC="${REPO_ROOT}/.git/rebase-apply" +if [[ -e "${REBASEMAGIC}" ]]; then + echo "!!! 'git rebase' or 'git am' in progress. Clean up and try again." + exit 1 +fi + # Set constants used by the client generator. export USERNAME=kubernetes # Set up utilities. -repo_root="$(git rev-parse --show-toplevel)" -declare -r repo_root -cd "${repo_root}" - source scripts/util/changelog.sh source scripts/util/kube_changelog.sh @@ -83,6 +94,45 @@ KUBERNETES_BRANCH=${KUBERNETES_BRANCH:-$(python3 "scripts/constants.py" KUBERNET CLIENT_VERSION=${CLIENT_VERSION:-$(python3 "scripts/constants.py" CLIENT_VERSION)} DEVELOPMENT_STATUS=${DEVELOPMENT_STATUS:-$(python3 "scripts/constants.py" DEVELOPMENT_STATUS)} +# Create a local branch +STARTINGBRANCH=$(git symbolic-ref --short HEAD) +declare -r STARTINGBRANCH +gitamcleanup=false +function return_to_kansas { + if [[ "${gitamcleanup}" == "true" ]]; then + echo + echo "+++ Aborting in-progress git am." + git am --abort >/dev/null 2>&1 || true + fi + + echo "+++ Returning you to the ${STARTINGBRANCH} branch and cleaning up." + git checkout -f "${STARTINGBRANCH}" >/dev/null 2>&1 || true +} +trap return_to_kansas EXIT + +remote_branch=upstream/master +if [[ $CLIENT_VERSION != *"snapshot"* ]]; then + remote_branch=upstream/release-"${CLIENT_VERSION%%.*}".0 +fi +echo "+++ Updating remotes..." +git remote update upstream origin +if ! git log -n1 --format=%H "${remote_branch}" >/dev/null 2>&1; then + echo "!!! '${remote_branch}' not found." + echo " (In particular, it needs to be a valid, existing remote branch that I can 'git checkout'.)" + exit 1 +fi + +newbranch="$(echo "automated-release-of-${CLIENT_VERSION}-${remote_branch}" | sed 's/\//-/g')" +newbranchuniq="${newbranch}-$(date +%s)" +declare -r newbranchuniq +echo "+++ Creating local branch ${newbranchuniq}" +git checkout -b "${newbranchuniq}" "${remote_branch}" + +# If it's an actual release, pull master branch +if [[ $CLIENT_VERSION != *"snapshot"* ]]; then + git pull -X theirs upstream master +fi + # Get Kubernetes API versions old_client_version=$(python3 "scripts/constants.py" CLIENT_VERSION) old_k8s_api_version=$(util::changelog::get_k8s_api_version "v$old_client_version")