#!/usr/bin/env bash
set -e
# Check we are within a git repo
git_dir = $( git rev-parse --show-toplevel )
if [ -z " ${ git_dir } " ] ; then
echo "Cannot determine top-level directory for git repo"
exit 1
fi
# Change to git top-level
cd ${ git_dir }
# Check we are in 'master' branch
branch_name = $( git symbolic-ref -q HEAD || echo )
branch_name = ${ branch_name ##refs/heads/ }
echo " Current git branch: ${ branch_name } "
if [ " ${ branch_name } " != "master" ] ; then
echo " Unexpected current branch ' ${ branch_name } ' - expecting 'master' "
echo "CTRL-C within 5 seconds to abort"
sleep 5
fi
# Extract short-form commit hash
short_hash = $( git rev-parse --short HEAD )
if [ -z " ${ short_hash } " ] ; then
echo "Unable to extract short-form current commit hash"
exit 1
fi
echo " HEAD commit is: ${ short_hash } "
# Check there are no uncommitted changes
uncommitted = $( git status --short --untracked-files= no )
if [ ! -z " ${ uncommitted } " ] ; then
echo "Cannot continue due to uncommitted files:"
echo " ${ uncommitted } "
exit 1
fi
# Determine project name
project = $( perl -n -e 'if (m/<artifactId>(\w+)<.artifactId>/) { print $1; exit }' pom.xml $)
if [ -z " ${ project } " ] ; then
echo "Unable to determine project name from pom.xml?"
exit 1
fi
# Actually rebuild JAR
echo " Building ${ project } JAR... "
mvn clean package 1>/tmp/${ project } -mvn-build.log 2>& 1
if [ " $? " != "0" -o ! -r target/${ project } *.jar ] ; then
echo " Maven build failed. For details, see /tmp/ ${ project } -mvn-build.log "
exit 1
fi
# Convert packaged JAR to XORed update form
echo " Building ${ project } .update... "
java -cp target/${ project } *.jar org.qortal.XorUpdate target/${ project } *.jar ${ project } .update
if [ " $? " != "0" ] ; then
echo "Failed to create XORed auto-update JAR"
exit 1
fi
# Create auto-update branch from this commit
update_branch = auto-update-${ short_hash }
if git show-ref --quiet --verify refs/heads/${ update_branch } ; then
echo " Existing auto-update branch based on this commit ( ${ short_hash } ) - deleting... "
git branch --delete --force ${ update_branch }
fi
echo " Checking out new auto-update branch based on this commit ( ${ short_hash } )... "
git checkout --orphan ${ update_branch }
git rm --cached -fr . 1>/dev/null
git add ${ project } .update
git commit --message " XORed, auto-update JAR based on commit ${ short_hash } "
git push --set-upstream origin --force-with-lease ${ update_branch }
branch_name = ${ branch_name -master }
echo " Changing back to ' ${ branch_name } ' branch "
git checkout --force ${ branch_name }