blob: 7da1d97e390ede205fb93e5cc0882c19adc2906c [file] [log] [blame]
#!/bin/bash -x
set -e
if [ "$#" -ne 1 ]; then
echo "$0 <branch>"
exit 1
fi
CASSANDRA_BRANCH=$1
cd $CASSANDRA_DIR
git fetch
git checkout $CASSANDRA_BRANCH || exit 1
# Used version for build will always depend on the git referenced used for checkout above
# Branches will always be created as snapshots, while tags are releases
tag=`git describe --tags --exact-match` 2> /dev/null || true
branch=`git symbolic-ref -q --short HEAD` 2> /dev/null || true
is_tag=false
is_branch=false
git_version=''
if [ "$tag" ]; then
is_tag=true
# Official release
regx_tag="cassandra-([0-9.]+)$"
# Tentative release
regx_tag_tentative="([0-9.]+)-tentative$"
if [[ $tag =~ $regx_tag ]] || [[ $tag =~ $regx_tag_tentative ]]; then
git_version=${BASH_REMATCH[1]}
else
echo "Error: could not recognize version from tag $tag">&2
exit 2
fi
elif [ "$branch" ]; then
# Dev branch
is_branch=true
regx_branch="cassandra-([0-9.]+)$"
if [[ $branch =~ $regx_branch ]]; then
git_version=${BASH_REMATCH[1]}
else
# This could be either trunk or any dev branch, so we won't be able to get the version
# from the branch name. In this case, fall back to debian change log version.
git_version=$(dpkg-parsechangelog | sed -ne 's/^Version: \([^-|~|+]*\).*/\1/p')
if [ -z $git_version ]; then
echo "Error: could not recognize version from branch $branch">&2
exit 2
else
echo "Warning: could not recognize version from branch, using dpkg version: $git_version"
fi
fi
else
echo "Error: invalid git reference; must either be branch or tag">&2
exit 1
fi
# The version used for the deb build process will the current version in the debian/changelog file.
# See debian/rules for how the value is read. The only thing left for us to do here is to check if
# the changes file contains the correct version for the checked out git revision. The version value
# has to be updated manually by a committer and we only warn and abort on mismatches here.
changelog_version=$(dpkg-parsechangelog | sed -ne 's/^Version: \([^~|+]*\).*/\1/p')
chl_expected="$git_version"
if $is_branch ; then
chl_expected="${git_version}[0-9.]*-SNAPSHOT"
fi
if [[ ! $changelog_version =~ $chl_expected ]]; then
echo "Error: changelog version seems to be missing -SNAPSHOT suffix for branch">&2
exit 3
fi
# Version (base.version) in build.xml must be set manually as well. Let's validate the set value.
buildxml_version=`grep 'property\s*name="base.version"' build.xml |sed -ne 's/.*value="\([^"]*\)".*/\1/p'`
if [ $buildxml_version != $git_version ]; then
echo "Error: build.xml version ($buildxml_version) not matching git tag derived version ($git_version)">&2
exit 4
fi
# Install build dependencies and build package
echo "y" | sudo mk-build-deps --install
dpkg-buildpackage -uc -us
# Copy created artifacts to dist dir mapped to docker host directory (must have proper permissions)
cp ../cassandra[-_]* $DEB_DIST_DIR