844c8ec383
Change-Id: I93e7b9d355870b0528a0ac3382fba1a10a558d45 Signed-off-by: Michal Berger <michalx.berger@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1718 Community-CI: Mellanox Build Bot Reviewed-by: Karol Latecki <karol.latecki@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
246 lines
6.3 KiB
Bash
Executable File
246 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# BSD LICENSE
|
|
#
|
|
# Copyright (c) 2018 by NetApp, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in
|
|
# the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# * Neither the name of Intel Corporation nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
if [ -z "${MAKE}" ]; then
|
|
export MAKE=make
|
|
fi
|
|
|
|
if [ -z "${GIT}" ]; then
|
|
export GIT=git
|
|
fi
|
|
|
|
if [ -z "${READLINK}" ]; then
|
|
export READLINK=readlink
|
|
fi
|
|
|
|
AUTOTEST_DRIVER_PATH=$($READLINK -f ${BASH_SOURCE%/*})
|
|
SPDK_AUTOTEST_LOCAL_PATH=$PWD
|
|
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
|
|
BUILD_NAME="build-${TIMESTAMP}"
|
|
|
|
# The command line help
|
|
display_help() {
|
|
echo
|
|
echo "Usage: $0 -d <path_to_spdk_tree> [-h] | [-q] | [-n]"
|
|
echo " -d : Specify a path to an SPDK source tree"
|
|
echo " -q : No output to screen"
|
|
echo " -n : Noop - dry-run"
|
|
echo " -h : This help"
|
|
echo
|
|
echo "Examples:"
|
|
echo " run-spdk-autotest.sh -d . -q"
|
|
echo " run-spdk-autotest.sh -d /home/vagrant/spdk_repo/spdk"
|
|
echo
|
|
}
|
|
|
|
set -e
|
|
|
|
NOOP=0
|
|
METHOD=0
|
|
V=1
|
|
OPTIND=1 # Reset in case getopts has been used previously in the shell.
|
|
while getopts "d:qhn" opt; do
|
|
case "$opt" in
|
|
d)
|
|
SPDK_SOURCE_PATH=$($READLINK -f $OPTARG)
|
|
echo Using SPDK source at ${SPDK_SOURCE_PATH}
|
|
METHOD=1
|
|
;;
|
|
q)
|
|
V=0
|
|
;;
|
|
n)
|
|
NOOP=1
|
|
;;
|
|
h)
|
|
display_help >&2
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Invalid option"
|
|
echo ""
|
|
display_help >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${SPDK_SOURCE_PATH}" ]; then
|
|
echo "Error: Must specify a source path "
|
|
display_help
|
|
exit 1
|
|
fi
|
|
|
|
# The following code verifies the input parameters and sets up the following variables:
|
|
#
|
|
# SPDK_AUTOTEST_LOCAL_PATH
|
|
# GIT_REPO_PATH
|
|
# GIT_BRANCH
|
|
#
|
|
|
|
case "$METHOD" in
|
|
1)
|
|
if [ ! -d "${SPDK_SOURCE_PATH}" ]; then
|
|
echo "${SPDK_SOURCE_PATH} does not exist!"
|
|
exit 1
|
|
fi
|
|
if [ ! -d "${SPDK_SOURCE_PATH}/.git" ]; then
|
|
echo "${SPDK_SOURCE_PATH} is not a git repository"
|
|
exit 1
|
|
fi
|
|
|
|
GIT_REPO_SRC_DIR=$($READLINK -f "${SPDK_SOURCE_PATH}" | tr -t '/' ' ' | awk '{print $NF}')
|
|
|
|
if [ ! "${GIT_REPO_SRC_DIR}" = "spdk" ]; then
|
|
echo "The ${SPDK_SOURCE_PATH} git repository is not named \"spdk\""
|
|
exit 1
|
|
fi
|
|
|
|
pushd "${SPDK_SOURCE_PATH}"
|
|
GIT_REPO_SRC=$(git rev-parse --show-toplevel)
|
|
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
popd
|
|
|
|
if [ "${SPDK_AUTOTEST_LOCAL_PATH}" = "${SPDK_SOURCE_PATH}" ]; then
|
|
SPDK_AUTOTEST_LOCAL_PATH=$($READLINK -f ${SPDK_AUTOTEST_LOCAL_PATH}/..)
|
|
echo "Set SPDK_AUTOTEST_LOCAL_PATH to ${SPDK_AUTOTEST_LOCAL_PATH}"
|
|
fi
|
|
|
|
if [ -d "${SPDK_AUTOTEST_LOCAL_PATH}/${GIT_BRANCH}" ]; then
|
|
if [ -d "${SPDK_AUTOTEST_LOCAL_PATH}/${GIT_BRANCH}/.git" ]; then
|
|
echo "${SPDK_AUTOTEST_LOCAL_PATH}/${GIT_BRANCH} is a git repository!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
GIT_REPO_PATH="${SPDK_AUTOTEST_LOCAL_PATH}/${GIT_BRANCH}/${BUILD_NAME}"
|
|
;;
|
|
*)
|
|
echo "Internal Error: Must specify a source path or branch name"
|
|
display_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
AUTOTEST_RESULTS="${SPDK_AUTOTEST_LOCAL_PATH}/${GIT_BRANCH}/${BUILD_NAME}"
|
|
AUTOTEST_OUTPUT_PATH="${GIT_REPO_PATH}/output"
|
|
rootdir="${GIT_REPO_PATH}/spdk"
|
|
BUILD_LOG_FILE="${AUTOTEST_OUTPUT_PATH}/build.log"
|
|
|
|
if [[ ${NOOP} -eq 1 ]]; then
|
|
echo "AUTOTEST_DRIVER_PATH $AUTOTEST_DRIVER_PATH"
|
|
#echo "SPDK_AUTOTEST_LOCAL_PATH $SPDK_AUTOTEST_LOCAL_PATH"
|
|
echo "AUTOTEST_OUTPUT_PATH $AUTOTEST_OUTPUT_PATH"
|
|
#echo "rootdir $rootdir"
|
|
echo "BUILD_LOG_FILE $BUILD_LOG_FILE"
|
|
#echo "GIT_BRANCH $GIT_BRANCH"
|
|
#echo "BUILD_NAME $BUILD_NAME"
|
|
echo "GIT_REPO_PATH $GIT_REPO_PATH"
|
|
echo "AUTOTEST_RESULTS $AUTOTEST_RESULTS"
|
|
fi
|
|
|
|
#
|
|
# I'd like to keep these files under source control
|
|
#
|
|
if [[ -e "${AUTOTEST_DRIVER_PATH}/autorun-spdk.conf" ]]; then
|
|
conf="${AUTOTEST_DRIVER_PATH}/autorun-spdk.conf"
|
|
fi
|
|
if [[ -e ~/autorun-spdk.conf ]]; then
|
|
conf=~/autorun-spdk.conf
|
|
fi
|
|
|
|
if [[ -z $conf ]]; then
|
|
echo Conf file not found.
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -pv --mode=775 "${AUTOTEST_OUTPUT_PATH}"
|
|
rm -f latest
|
|
ln -sv ${GIT_REPO_PATH} latest
|
|
|
|
if [[ ${NOOP} -eq 0 ]]; then
|
|
echo V=$V
|
|
if [[ $V -eq 0 ]]; then
|
|
echo Quieting output
|
|
exec 3>&1 4>&2 > "${BUILD_LOG_FILE}" 2>&1
|
|
else
|
|
echo Teeing to ${BUILD_LOG_FILE}
|
|
exec > >(tee -a "${BUILD_LOG_FILE}") 2>&1
|
|
fi
|
|
|
|
case "$METHOD" in
|
|
1)
|
|
echo "rsync git repository from ${GIT_REPO_SRC} to ${GIT_REPO_PATH}"
|
|
rsync -av "${GIT_REPO_SRC}" "${GIT_REPO_PATH}"
|
|
pushd "${GIT_REPO_PATH}/spdk"
|
|
sudo "${MAKE}" clean -j $(nproc)
|
|
sudo "${GIT}" clean -d -f
|
|
popd
|
|
;;
|
|
*)
|
|
echo "Internal Error: Must specify a source path or branch name"
|
|
display_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
trap "echo ERROR; exit" INT TERM EXIT
|
|
|
|
pushd "${AUTOTEST_OUTPUT_PATH}"
|
|
export output_dir="${AUTOTEST_OUTPUT_PATH}"
|
|
|
|
# Runs agent scripts
|
|
"${rootdir}/autobuild.sh" "$conf"
|
|
sudo -E "${rootdir}/autotest.sh" "$conf"
|
|
"${rootdir}/autopackage.sh" "$conf"
|
|
sudo -E "${rootdir}/autorun_post.py" -d "${AUTOTEST_OUTPUT_PATH}" -r "${rootdir}"
|
|
|
|
echo "All Tests Passed" > ${GIT_REPO_PATH}/passed
|
|
|
|
# Redirect back to screen
|
|
if [[ $V -eq 0 ]]; then
|
|
echo Redirect to screen
|
|
exec 1>&3 2>&4 > >(tee -a "${BUILD_LOG_FILE}") 2>&1
|
|
fi
|
|
|
|
popd
|
|
|
|
fi
|
|
|
|
echo "all tests passed"
|
|
|
|
echo Output directory: ${GIT_REPO_PATH}
|
|
echo Build log: "${BUILD_LOG_FILE}"
|