blob: 80a94e0507ac796ddfb878177bfd3efc0c7eaa89 [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 pull
# clear and refetch tags to account for re-tagging a new sha
git tag -d $(git tag) > /dev/null
git fetch --tags > /dev/null 2>&1
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=''
# Parse version from build.xml so we can verify version against release tags and use the build.xml version
# for any branches. Truncate from snapshot suffix if needed.
buildxml_version=`grep 'property\s*name="base.version"' build.xml |sed -ne 's/.*value="\([^"]*\)".*/\1/p'`
regx_snapshot="([0-9.]+)-SNAPSHOT$"
if [[ $buildxml_version =~ $regx_snapshot ]]; then
buildxml_version=${BASH_REMATCH[1]}
fi
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
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
CASSANDRA_VERSION=$git_version
CASSANDRA_REVISION='1'
elif [ "$branch" ]; then
# Dev branch
is_branch=true
# 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 version specified in build.xml.
CASSANDRA_VERSION="${buildxml_version}"
dt=`date +"%Y%m%d"`
ref=`git rev-parse --short HEAD`
CASSANDRA_REVISION="${dt}git${ref}"
else
echo "Error: invalid git reference; must either be branch or tag">&2
exit 1
fi
# javadoc target is broken in docker without this mkdir
mkdir -p ./build/javadoc
# Artifact will only be used internally for build process and won't be found with snapshot suffix
ant artifacts -Drelease=true
cp ./build/apache-cassandra-*-src.tar.gz ${RPM_BUILD_DIR}/SOURCES/
# if CASSANDRA_VERSION is -alphaN, -betaN, -rcN, then rpmbuild fails on the '-' char; replace with '~'
CASSANDRA_VERSION=${CASSANDRA_VERSION/-/\~}
rpmbuild --define="version ${CASSANDRA_VERSION}" --define="revision ${CASSANDRA_REVISION}" -ba ./redhat/cassandra.spec
cp $RPM_BUILD_DIR/SRPMS/*.rpm $RPM_BUILD_DIR/RPMS/noarch/*.rpm $RPM_DIST_DIR