From aa2b8ab81f66ab512722fb8782c95e1f5f895890 Mon Sep 17 00:00:00 2001 From: Sumedha Pramod Date: Fri, 30 Mar 2018 11:30:59 -0700 Subject: [PATCH] Chore: Only reset to upstream/master for major/minor releases (#750) * Chore: Only reset to upstream/master for major/minor releases * Chore: Ensure that the release script never pushes a blank release * Chore: Add log statements to clarify where script is resetting to --- build/release.sh | 60 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/build/release.sh b/build/release.sh index 1669abc03..d15e8761e 100755 --- a/build/release.sh +++ b/build/release.sh @@ -12,12 +12,11 @@ major_release=false minor_release=false patch_release=false - -reset_to_master() { - # Update to latest code on GitHub master - git checkout master || return 1 - +reset_tags() { # Wipe tags + echo "----------------------------------------------------------------------" + echo "Wiping local tags" + echo "----------------------------------------------------------------------" git tag -l | xargs git tag -d || return 1 # Add the upstream remote if it is not present @@ -26,9 +25,44 @@ reset_to_master() { fi # Fetch latest code with tags + echo "----------------------------------------------------------------------" + echo "Fetching latest upstream code + tags" + echo "----------------------------------------------------------------------" git fetch --tags github-upstream || return 1; +} + + +reset_to_previous_version() { + if OLD_VERSION === "XXX"; then + echo "----------------------------------------------------------------------" + echo "Error while cleaning workspace!" + echo "----------------------------------------------------------------------" + return 1; + fi + + # Reset and fetch upstream with tags + reset_tags || return 1; + + # Reset to previous release version and clear unstashed changes + echo "----------------------------------------------------------------------" + echo "Resetting to v" $OLD_VERSION + echo "----------------------------------------------------------------------" + git reset --hard OLD_VERSION || return 1 + git clean -f || return 1 +} + + +reset_to_master() { + # Update to latest code on GitHub master + git checkout master || return 1 + + # Reset and fetch upstream with tags + reset_tags || return 1; # Reset to latest code and clear unstashed changes + echo "----------------------------------------------------------------------" + echo "Resetting to upstream/master" + echo "----------------------------------------------------------------------" git reset --hard github-upstream/master || return 1 git clean -f || return 1 } @@ -44,6 +78,14 @@ increment_version() { # Old version OLD_VERSION=$(./build/current_version.sh) + # The current branch should not match the previous release tag + if [[ $(git log --oneline ...v$OLD_VERSION) == "" ]] ; then + echo "----------------------------------------------------" + echo "Your release has no new commits!" + echo "----------------------------------------------------" + exit 1 + fi + if $major_release; then echo "----------------------------------------------------------------------" echo "Bumping major version..." @@ -205,7 +247,13 @@ if ! push_new_release; then echo "Cleaning workspace by checking out master and removing tags" echo "----------------------------------------------------------------------" - if ! reset_to_master; then + + if $patch_release; then + # Only reset to previous version for patch releases + reset_to_previous_version || return 1 + + # Reset to upstream/master for major/minor releases + else if ! reset_to_master; then echo "----------------------------------------------------------------------" echo "Error while cleaning workspace!" echo "----------------------------------------------------------------------"