per Intel policy to include file commit date using git cmd below. The policy does not apply to non-Intel (C) notices. git log --follow -C90% --format=%ad --date default <file> | tail -1 and then pull just the year from the result. Intel copyrights were not added to files where Intel either had no contribution ot the contribution lacked substance (ie license header updates, formatting changes, etc) For intel copyrights added, --follow and -C95% were used. Signed-off-by: paul luse <paul.e.luse@intel.com> Change-Id: I2ef86976095b88a9bf5b1003e59f3943cd6bbe4c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15209 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
217 lines
4.9 KiB
Bash
Executable File
217 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright (C) 2018 Intel Corporation.
|
|
# Copyright (c) 2018 by NetApp, Inc.
|
|
# All Rights Reserved.
|
|
|
|
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}"
|