-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[devtool] Added beta-signoff.sh to automate the beta release process. (…
…#1432) The script beta-signoff.sh is used when you are ready to publish the beta release out of the temporary beta branch created from beta-branchoff.sh. It merges beta changes to 'beta' branch and publish a beta release using 'hub' command onto Github, a release tag will also be tagged. The commits on temporary beta release branch will also be rebased back to master branch after the release, you may also need to resolve the merge / rebase conflicts if possible during the process. resolve #1431
- Loading branch information
1 parent
c99066b
commit eddf67e
Showing
3 changed files
with
193 additions
and
97 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/usr/bin/env bash | ||
|
||
# This script publishes the latest beta version of the project, merge beta changes to beta branch, and tags the beta release, then rebase the changes onto master branch, and cleanup temporary release branches as well. | ||
|
||
dir_name=$(dirname $0) | ||
source ${dir_name}/common.sh | ||
|
||
command -v hub > /dev/null 2>&1 || { error "The signoff process needs command 'hub', Use 'brew install hub' to install it. exit."; exit 1; } | ||
|
||
prepareWorkingDir | ||
|
||
latest_ver=$(latestNonRCVersion) | ||
beta_ver="0.0.1-beta1" | ||
if [ -z "$latest_ver" ]; then | ||
info "Use ${YELLOW}$beta_ver${RESTORE} as the version number." | ||
else | ||
beta_ver=$(increaseBetaVersion "$latest_ver") | ||
fi | ||
|
||
info "\nThe latest non-RC version is: ${CYAN}'$latest_ver'${RESTORE}" | ||
info "This beta version number should be: ${CYAN}'$beta_ver'${RESTORE}" | ||
|
||
remote_branch=$(git branch -r | awk '/'"$beta_ver"'-[0-9]+/ {print $1}') | ||
if [ ! "$remote_branch" ]; then | ||
warning "Remote branch for beta version $beta_ver has not been created, which means you haven't started your beta release process. Run 'beta-branchoff.sh' to start the beta release process first." | ||
exit 1 | ||
fi | ||
|
||
info "Remote branch name: $remote_branch" | ||
|
||
latest_sha=$(git show $remote_branch --format=%h -s) | ||
notice "\nMake sure the latest commit SHA on '$remote_branch' is:" | ||
notice "${GREEN}$latest_sha${RESTORE}" | ||
notice "If it is not the beta release point you want, update the '$remote_branch' first." | ||
notice "Also make sure you have the permisison to push branch onto your $remote." | ||
|
||
read -e -p "Continue? [Y/n] " -n 1 | ||
shouldContinue=${REPLY:=y} | ||
if [ ${shouldContinue,,} = n ]; then | ||
info "Sure, bye." | ||
exit 0 | ||
fi | ||
|
||
stashLocalChanges | ||
|
||
beta_branch=$(git branch -r | awk '/'"$remote"'\/beta$/ {print $1}') | ||
if [ ! "$beta_branch" ]; then | ||
error "Failed to find ${YELLOW}beta${RESTORE} branch on $remote, create it first before release." | ||
exit 1 | ||
fi | ||
|
||
info "Merge beta release commit to beta branch...\n" | ||
git checkout -B beta "$remote/beta" | ||
git merge -q --no-summary --no-ff $latest_sha -m "Merge beta release: $beta_ver" --signoff | ||
if [ $? -ne 0 ]; then | ||
error "\nFailed to merge beta release changes $latest_sha onto beta, please take a look and merge it manually." | ||
info "NOTICE: An interactive shell will be created to resolve the merge conflicts, please use ${YELLOW}git merge --continue${RESTORE} after conflicts get resolved, and ${YELLOW}exit${RESTORE} the interactive shell to continue.\n" | ||
bash | ||
notice "\nMerge conflicts resolved." | ||
fi | ||
info "Beta release changes merged into beta branch.\n" | ||
|
||
git push "$remote" beta:beta | ||
info "\n${GREEN}Done.${RESTORE}" | ||
|
||
info "\nCreating beta release: ${YELLOW}$beta_ver${RESTORE}...\n" | ||
hub release create -m "Beta Release: $beta_ver" -t "beta" $beta_ver | ||
git fetch "$remote" | ||
info "\n${GREEN}Released.${RESTORE}" | ||
|
||
info "\nRebase beta release commit back onto $remote/master branch..." | ||
local_branch=$(echo $remote_branch | awk -F '/' '{print $2}'); | ||
git checkout -B "$local_branch" "$remote_branch" | ||
git rebase $remote/master | ||
if [ $? -ne 0 ]; then | ||
error "\nFailed to rebase beta release changes $remote_branch onto master, please take a look and rebase it manually." | ||
info "NOTICE: An interactive shell will be created to resolve the rebase conflicts, please use ${YELLOW}git rebase --continue${RESTORE} after conflicts get resolved, and ${YELLOW}exit${RESTORE} the interactive shell to continue.\n" | ||
bash | ||
notice "\nRebase conflicts resolved." | ||
fi | ||
info "Beta release changes rebased $remote_branch onto master." | ||
git push "$remote" "$local_branch":master | ||
info "\n${GREEN}Done.${RESTORE}" | ||
|
||
info "\nClean up local and remote beta release branches..." | ||
git checkout master | ||
git pull --rebase | ||
git branch -D "$local_branch" | ||
git push "$remote" :"$local_branch" | ||
info "\n${GREEN}Done.${RESTORE}" |
This file contains 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