mirror of https://github.com/apache/cassandra
134 lines
5.8 KiB
Bash
Executable File
134 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
################################
|
|
#
|
|
# Prep
|
|
#
|
|
################################
|
|
|
|
[ $DEBUG ] && set -x
|
|
|
|
# variables, with defaults
|
|
[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname "$0")/..)"
|
|
[ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
|
|
|
|
# pre-conditions
|
|
command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 1; }
|
|
command -v git >/dev/null 2>&1 || { echo >&2 "git needs to be installed"; exit 1; }
|
|
command -v dch >/dev/null 2>&1 || { echo >&2 "dch needs to be installed"; exit 1; }
|
|
command -v dpkg-parsechangelog >/dev/null 2>&1 || { echo >&2 "dpkg-parsechangelog needs to be installed"; exit 1; }
|
|
command -v dpkg-buildpackage >/dev/null 2>&1 || { echo >&2 "dpkg-buildpackage needs to be installed"; exit 1; }
|
|
[ -d "${CASSANDRA_DIR}" ] || { echo >&2 "Directory ${CASSANDRA_DIR} must exist"; exit 1; }
|
|
[ -f "${CASSANDRA_DIR}/build.xml" ] || { echo >&2 "${CASSANDRA_DIR}/build.xml must exist"; exit 1; }
|
|
[ -d "${DIST_DIR}" ] || mkdir -p "${DIST_DIR}"
|
|
|
|
################################
|
|
#
|
|
# Main
|
|
#
|
|
################################
|
|
|
|
set -e
|
|
|
|
# note, this edits files in your working cassandra directory
|
|
pushd $CASSANDRA_DIR >/dev/null
|
|
export BUILD_DIR="$(realpath --relative-to=$CASSANDRA_DIR ${DIST_DIR})"
|
|
|
|
# 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
|
|
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.]+)(-(alpha|beta|rc)[0-9]+)?)$"
|
|
# Tentative release
|
|
regx_tag_tentative="(([0-9.]+)(-(alpha|beta|rc)[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 CASSANDRA_VERSION is -alphaN, -betaN, -rcN, it fails on the '-' char; replace with '~'
|
|
CASSANDRA_VERSION=${git_version/-/\~}
|
|
CASSANDRA_REVISION='1'
|
|
else
|
|
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 or SHA, 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' | sed 's/~/-/')
|
|
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. dpkg version is $git_version"
|
|
fi
|
|
fi
|
|
# if CASSANDRA_VERSION is -alphaN, -betaN, -rcN, it fails on the '-' char; replace with '~'
|
|
CASSANDRA_VERSION=${buildxml_version/-/\~}
|
|
dt=`date +"%Y%m%d"`
|
|
ref=`git rev-parse --short HEAD || ( grep -q GitSHA src/resources/org/apache/cassandra/config/version.properties && grep GitSHA src/resources/org/apache/cassandra/config/version.properties | cut -d"=" -f2 ) || echo unknown`
|
|
CASSANDRA_REVISION="${dt}git${ref}"
|
|
dch -D unstable -v "${CASSANDRA_VERSION}-${CASSANDRA_REVISION}" --package "cassandra" "building ${CASSANDRA_VERSION}-${CASSANDRA_REVISION}"
|
|
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' | sed 's/~/-/')
|
|
chl_expected="${buildxml_version}"
|
|
if [[ ! $changelog_version =~ $chl_expected ]]; then
|
|
echo "Error: changelog version (${changelog_version}) doesn't match expected (${chl_expected})">&2
|
|
exit 3
|
|
fi
|
|
|
|
# Version (base.version) in build.xml must be set manually as well. Let's validate the set value.
|
|
if [ $buildxml_version != $git_version ]; then
|
|
echo "Warning: build.xml version ($buildxml_version) not matching git/dpkg derived version ($git_version)">&2
|
|
fi
|
|
|
|
# build package
|
|
dpkg-buildpackage -rfakeroot -uc -us -tc --source-option=--tar-ignore=.git
|
|
|
|
set +e
|
|
# Move created artifacts to dist dir mapped to docker host directory (must have proper permissions)
|
|
mv ../cassandra[-_]*${CASSANDRA_VERSION}* "${DIST_DIR}"
|
|
# clean build deps
|
|
rm -f cassandra-build-deps_*
|
|
# restore debian/changelog
|
|
git restore debian/changelog || true
|
|
|
|
popd >/dev/null
|