mirror of
https://github.com/Qortal/qortal.git
synced 2025-07-24 10:41:23 +00:00
Reworked/improved auto-update build/publish tools.
Instead of working on a single 'auto-update' branch, that needed to be rebased from master branch's HEAD, we create an orphan branch named after master:HEAD containing on the update file. This allows us to keep/delete updates on a per-commit basis and shows which commit each update is based upon. Added loads more checking.
This commit is contained in:
81
tools/build-auto-update.sh
Executable file
81
tools/build-auto-update.sh
Executable file
@@ -0,0 +1,81 @@
|
||||
#!/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 )
|
||||
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'"
|
||||
exit 1
|
||||
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}
|
||||
|
||||
echo "Changing back to 'master' branch"
|
||||
git checkout --force master
|
Reference in New Issue
Block a user