blob: 5b3a5d9b0d039ccef38138f2aa9b8fb19b8acc73 [file] [log] [blame]
#!/usr/bin/env 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.
#
shopt -s nocasematch
function help {
echo " "
echo "usage: ${0}"
echo " -v/--version=<version> The version of the metron release. [Required]"
echo " -c/--candidate=<RC#> Defines the Release Candidate. [Required]"
echo " -b/--bro=<bro version> The version of the bro kafka plugin. [Optional]"
echo " -h/--help Usage information."
echo " "
echo "example: "
echo " metron-rc-check --version=0.4.2 --candidate=RC2 --bro=0.1.0"
echo " "
}
APACHE_REPO="https://dist.apache.org/repos/dist/"
METRON_DIST=${APACHE_REPO}"dev/metron/"
METRON_KEYS=${APACHE_REPO}"release/metron/KEYS"
# print help, if the user just runs this without any args
if [ "$#" -eq 0 ]; then
help
exit 1
fi
# handle command line options
for i in "$@"; do
case $i in
#
# VERSION: The release version of Metron to validate.
#
#
-v=*|--version=*)
VERSION="${i#*=}"
shift # past argument=value
;;
#
# RC: Defines the RC# to use
#
# -c=RC2
# --candidate=RC2
#
-c=*|--candidate=*)
CANDIDATE="${i#*=}"
shift # past argument=value
;;
#
# END: Defines the last commit to inspect
#
# -b=0.1.0
# --bro=0.1.0
#
-b=*|--bro=*)
BRO="${i#*=}"
shift # past argument=value
;;
#
# -h/--help
#
-h|--help)
help
exit 0
shift # past argument with no value
;;
#
# Unknown option
#
*)
UNKNOWN_OPTION="${i#*=}"
echo "Error: unknown option: $UNKNOWN_OPTION"
help
;;
esac
done
# validation
if [ -z "$VERSION" ]; then
echo "Missing -v/--version is is required"
exit 1
fi
if [[ "$VERSION" =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2} ]]; then
METRON_VERSION="$VERSION"
else
echo "[ERROR] "$VERSION" may not be a valid version number"
exit 1
fi
if [ -z "$CANDIDATE" ]; then
echo "Missing -c/--candidate which is required"
exit 1
fi
if [[ "$CANDIDATE" =~ ^RC[0-9]+ ]]; then
RC=$(echo "$CANDIDATE" | tr '[:upper:]' '[:lower:]')
UPPER_RC=$(echo "$CANDIDATE" | tr '[:lower:]' '[:upper:]')
elif [[ "$CANDIDATE" =~ ^[0-9]+ ]]; then
RC=rc"$CANDIDATE"
UPPER_RC=RC"$CANDIDATE"
else
echo "[ERROR] invalid RC, valid is RC# or just #"
exit 1
fi
# validating the bro plugin is not required
if [ -n "$BRO" ]; then
if [[ "$BRO" =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2} ]]; then
BRO_VERSION="$BRO"
else
echo "[ERROR] $BRO may not be a valid version number"
exit 1
fi
fi
echo "Metron Version $METRON_VERSION"
echo "Release Candidate $RC"
if [ -n "$BRO" ]; then
echo "Bro Plugin Version $BRO_VERSION"
fi
METRON_RC_DIST="$METRON_DIST$METRON_VERSION-$UPPER_RC"
echo "Metron RC Distribution Root is $METRON_RC_DIST"
# working directory
WORK="$HOME/tmp/metron-$METRON_VERSION-$RC"
# handle tilde expansion
WORK="${WORK/#\~/$HOME}"
# warn the user if the working directory exists
if [ -d "$WORK" ]; then
echo "[ERROR] Directory $WORK exists, please rename it and start over"
exit 1
fi
if [ ! -d "$WORK" ]; then
mkdir -p "$WORK"
fi
echo "Working directory $WORK"
METRON_ASSEMBLY="$METRON_RC_DIST/apache-metron_$METRON_VERSION-$RC.tar.gz"
METRON_ASSEMBLY_SIG="$METRON_ASSEMBLY.asc"
echo "Downloading $METRON_KEYS"
if ! wget -P "$WORK" "$METRON_KEYS" ; then
echo "[ERROR] Failed to download $METRON_KEYS"
exit 1
fi
echo "Downloading $METRON_ASSEMBLY"
if ! wget -P "$WORK" "$METRON_ASSEMBLY" ; then
echo "[ERROR] Failed to download $METRON_ASSEMBLY"
exit 1
fi
echo "Downloading $METRON_ASSEMBLY_SIG"
if ! wget -P "$WORK" "$METRON_ASSEMBLY_SIG" ; then
echo "[ERROR] Failed to download $METRON_ASSEMBLY_SIG"
exit 1
fi
if [ -n "$BRO" ]; then
METRON_KAFKA_BRO_ASSEMBLY="$METRON_RC_DIST/apache-metron-bro-plugin-kafka_$BRO_VERSION-$RC.tar.gz"
METRON_KAFKA_BRO_ASSEMBLY_ASC="$METRON_KAFKA_BRO_ASSEMBLY.asc"
echo "Downloading $METRON_KAFKA_BRO_ASSEMBLY"
if ! wget -P "$WORK" "$METRON_KAFKA_BRO_ASSEMBLY" ; then
echo "[ERROR] Failed to download $METRON_KAFKA_BRO_ASSEMBLY"
exit 1
fi
echo "Downloading $METRON_KAFKA_BRO_ASSEMBLY_ASC"
if ! wget -P "$WORK" "$METRON_KAFKA_BRO_ASSEMBLY_ASC" ; then
echo "[ERROR] Failed to download $METRON_KAFKA_BRO_ASSEMBLY_ASC"
exit 1
fi
fi
cd "$WORK" || exit 1
echo "importing metron keys"
if ! gpg --import KEYS ; then
echo "[ERROR] failed to import KEYS"
exit 1
fi
echo "Verifying Metron Assembly"
if ! gpg --verify ./"apache-metron_$METRON_VERSION-$RC.tar.gz.asc" "apache-metron_$METRON_VERSION-$RC.tar.gz" ; then
echo "[ERROR] failed to verify Metron Assembly"
exit 1
fi
if [ -n "$BRO" ]; then
echo "Verifying Bro Kafka Plugin Assembly"
if ! gpg --verify ./"apache-metron-bro-plugin-kafka_$BRO_VERSION-$RC.tar.gz.asc" "apache-metron-bro-plugin-kafka_$BRO_VERSION-$RC.tar.gz" ; then
echo "[ERROR] failed to verify Bro Kafka Plugin Assembly"
exit 1
fi
if ! tar -xzf "apache-metron-bro-plugin-kafka_$BRO_VERSION-$RC.tar.gz" ; then
echo "[ERROR] failed to unpack Bro Kafka Plugin Assembly"
exit 1
fi
fi
echo "Unpacking Assemblies"
if ! tar -xzf "apache-metron_$METRON_VERSION-$RC.tar.gz" ; then
echo "[ERROR] failed to unpack Metron Assembly"
exit 1
fi
echo ""
echo ""
read -p " run test suite [install, unit tests, integration tests, ui tests, licenses, rpm build]? [yN] " -n 1 -r
echo
DID_BUILD=0
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd "apache-metron_${METRON_VERSION}-$RC" || exit 1
if ! mvn -q -T 2C -DskipTests clean install ; then
echo "[ERROR] failed to mvn install metron"
exit 1
fi
if ! mvn -q -T 2C surefire:test@unit-tests ; then
echo "[ERROR] failed unit tests"
exit 1
fi
if ! mvn -q surefire:test@integration-tests ; then
echo "[ERROR] failed integration tests"
exit 1
fi
if ! mvn -q test --projects metron-interface/metron-config ; then
echo "[ERROR] failed metron-config tests"
exit 1
fi
dev-utilities/build-utils/verify_licenses.sh | tee ../build-lic.log
cd metron-deployment || exit 1
if ! mvn -q package -DskipTests -P build-rpms ; then
echo "[ERROR] failed to build rpm"
exit 1
fi
cd .. || exit 1
DID_BUILD=1
fi
#ask if build test vagrant METRON
# run tests?
echo ""
echo ""
read -p " run vagrant full_dev? [yN] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd "$WORK/apache-metron_${METRON_VERSION}-$RC/metron-deployment/development/centos6" || exit 1
if [[ ${DID_BUILD} -ne 1 ]]; then
vagrant up
else
vagrant --ansible-skip-tags="build,sensors,quick-dev" up
fi
fi