Spdk/scripts/vagrant/run-autorun.sh
paul luse eb53c23236 add (c) and SPDX header to bash files as needed
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>
2022-11-29 08:27:51 +00:00

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}"