docker-minecraft-server/docker-versions-create.sh

99 lines
2.8 KiB
Bash
Raw Normal View History

2019-11-16 14:46:52 +00:00
#!/bin/bash
#set -x
# Use this variable to indicate a list of branches that docker hub is watching
branches_list=('openj9' 'openj9-nightly' 'adopt11')
2019-11-16 14:46:52 +00:00
2020-03-06 15:52:17 +00:00
. /start-utils
2019-11-16 14:46:52 +00:00
function TrapExit {
2020-03-06 15:52:17 +00:00
log "Checking out back in master"
2019-11-16 14:46:52 +00:00
git checkout master
}
batchMode=false
while getopts "b" arg
do
case $arg in
b)
batchMode=true
;;
*)
2020-03-06 15:52:17 +00:00
log "Unsupported arg $arg"
exit 2
;;
esac
done
2020-03-06 15:52:17 +00:00
${batchMode} && log "Using batch mode"
2019-11-16 14:46:52 +00:00
trap TrapExit EXIT SIGTERM
2020-03-06 15:52:17 +00:00
test -d ./.git || { log ".git folder was not found. Please start this script from root directory of the project!";
2019-11-16 14:46:52 +00:00
exit 1; }
# Making sure we are in master
git checkout master
2020-03-06 15:52:17 +00:00
git pull --all || { log "Can't pull the repo!"; \
2019-11-16 14:46:52 +00:00
exit 1; }
git_branches=$(git branch -a)
for branch in "${branches_list[@]}"; do
if [[ "$git_branches" != *"$branch"* ]]; then
2020-03-06 15:52:17 +00:00
log "Can't update $branch because I can't find it in the list of branches."
2019-11-16 14:46:52 +00:00
exit 1
else
2020-03-06 15:52:17 +00:00
log "Branch $branch found. Working with it."
git checkout "$branch" || { log "Can't checkout into the branch. Don't know the cause."; \
2019-11-16 14:46:52 +00:00
exit 1; }
proceed='False'
while [[ "$proceed" == "False" ]]; do
# Ensure local branch is aligned with remote since docker-versions-create may have been run elsewhere
git pull
if git merge -m 'Auto-merging via docker-versions-create' master; then
2019-11-16 14:46:52 +00:00
proceed="True"
2020-03-06 15:52:17 +00:00
log "Branch $branch updated to current master successfully"
2019-11-16 14:46:52 +00:00
# pushing changes to remote for this branch
git commit -m "Auto merge branch with master" -a
# push may fail if remote doesn't have this branch yet. In this case - sending branch
2020-03-06 15:52:17 +00:00
git push || git push -u origin "$branch" || { log "Can't push changes to the origin."; exit 1; }
elif ${batchMode}; then
status=$?
2020-03-06 15:52:17 +00:00
log "Git merge failed in batch mode"
exit ${status}
# and trap exit gets us back to master
2019-11-16 14:46:52 +00:00
else
cat<<EOL
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Master merge in the branch $branch encountered an error!
You may try to fix the error and merge again. (Commit changes)
Or skip this branch merge completely.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EOL
printf "Should we try again? (y):"
read -r answer
2019-11-16 14:46:52 +00:00
if [[ "$answer" == '' ]] || [[ "$answer" == 'y' ]] || [[ "$answer" == 'Y' ]]; then
# If you use non-local editor or files are changed in repo
cat <<EOL
The following commands may encounter an error!
This is completely fine if the changes were made locally and remote branch doesn't know about them.
EOL
# Updating branch from remote before trying again
git checkout master
git fetch --all
git pull -a
git checkout "$branch"
continue
else
break
fi
fi
done
fi
done