blob: 5524cac53de8d0d8f0df06bd7134377fa729e163 [file] [log] [blame]
#!/bin/bash
# This file contains bash functions which may be of use to our Jenkins jobs.
function process_git {
# Do not echo all commands to terminal.
set +x
local git_dir_path="${1}" ; shift || :
local post_clone_command="${1}" ; shift || :
# Do git processing for this Jenkins job which includes:
# - Recognizing existing git repo if appropriate.
# - Cloning git repo.
# - Running caller's post_clone_command.
# Description of argument(s):
# git_dir_path The location of the git dir path (e.g.
# "/home/johndoe/git/"). If the
# git_dir_path already exists and it was
# specified explicitly by the user, this
# function will neither clone the git repo
# to this path nor run the
# post_clone_commands, i.e. the indicated
# git repo will be used as-is.
# post_clone_command Any valid bash command to be run after git
# clone of openbmc-test-automation. Note
# that this is intended primarily for Open
# BMC Test code developers who may wish to
# cherry pick code changes for testing.
if [ -d "${git_dir_path}" -a "${git_dir_path}" != "${WORKSPACE}" ] ; then
echo "\"${git_dir_path}\" already exists and is not the standard" \
"location of \"${WORKSPACE}\" so no git processing is required."
return
fi
# Echo all subsequent commands to terminal.
set -x
mkdir -p "${git_dir_path}" || return 1
cd "${git_dir_path}" || return 1
echo "Remove old git repo files."
rm -Rf ./openbmc-build-scripts
rm -Rf ./openbmc-test-automation
git clone https://gerrit.openbmc-project.xyz/openbmc/openbmc-build-scripts\
|| return 1
git clone https://github.com/openbmc/openbmc-test-automation.git || return 1
if [ ! -z "${post_clone_command}" ] ; then
cd openbmc-test-automation || return 1
echo "Run the caller's post clone command."
eval "${post_clone_command}" || return 1
fi
}
function process_docker {
# Do not echo all commands to terminal.
set +x
local git_dir_path="${1}" ; shift || :
# Source the docker script to prepare our environment for calling docker.
# Description of argument(s):
# git_dir_path The location of the git dir path (e.g.
# "/home/johndoe/git/") to be used.
# Set global DOCKER_IMG_NAME.
DOCKER_IMG_NAME="openbmc/obmc-docker-image"
echo "Build the docker image required to execute the robot tests."
# Echo all subsequent commands to terminal.
set -x
cd "${git_dir_path}openbmc-build-scripts" || return 1
. "./scripts/build-qemu-robot-docker.sh" || return 1
cd "${git_dir_path}" || return 1
}
if ! test "${stock_robot_program_parms+defined}" ; then
readonly stock_robot_program_parms="openbmc_host openbmc_username"\
" openbmc_password os_host os_username os_password quiet debug test_mode"
readonly master_robot_gen_parms="console consolecolors outputdir output log"\
" report loglevel include"
fi
function run_docker_robot {
# Do not echo all commands to terminal.
set +x
local robot_file_path="${1}" ; shift || :
local robot_pgm_parms="${1-}" ; shift || :
local robot_gen_parms="${1:-${master_robot_gen_parms}}" ; shift || :
# Compose a robot command string and run it in a docker environment.
# Description of argument(s):
# robot_file_path The file path of the robot file (with or
# without .robot suffix). This file path is
# relative to the base git repository.
# robot_pgm_parms A space-separated list of parms which are
# to be passed to the robot program via the
# -v robot parameter. These parms will be
# processed in addition to the
# stock_robot_program_parms listed above.
# robot_gen_parms A space-separated list of general robot
# parameters understood by the robot program
# (e.g. consolecolors, etc).
# Strip, then re-append ".robot" so that the user can pass with or without
# the .robot suffix.
robot_file_path="${robot_file_path%.robot}.robot"
# Determine the robot_file_name form the robot_file_path.
local robot_file_name="${robot_file_path%.robot}"
robot_file_name="${robot_file_name##*/}"
local robot_short_file_name="${robot_file_name%.robot}"
# Set default values for robot_gen_parms.
local dft_console=dotted
local dft_consolecolors=off
local dft_outputdir=/status_dir
local dft_output=${robot_short_file_name}.output.xml
local dft_log=${robot_short_file_name}.log.html
local dft_report=${robot_short_file_name}.report.html
local dft_loglevel='TRACE'
local dft_include=''
local cmd_buf
# Loop through robot general parms setting any that have no value to a
# default value (defined above).
for parm_name in ${robot_gen_parms} ; do
# If the parm already has a value, continue to next loop iteration.
[ ! -z "${!parm_name-}" ] && continue || :
cmd_buf="${parm_name}=\"\${dft_${parm_name}}\""
eval ${cmd_buf}
done
local robot_cmd_buf='robot'
# Process our stock robot program parms along with the caller's
# robot_pgm_parms to add to the robot_cmd_buf.
local parm_name
local escape_quote_char="'\''"
for parm_name in ${stock_robot_program_parms} ${robot_pgm_parms} ; do
[ -z "${parm_name-}" ] && continue
robot_cmd_buf="${robot_cmd_buf} -v ${parm_name}:${!parm_name-}"
done
# Process the robot general parms to add to the robot_cmd_buf.
for parm_name in ${robot_gen_parms} ; do
robot_cmd_buf="${robot_cmd_buf} --${parm_name}=${!parm_name-}"
done
# Finally append the robot file path to the robot_cmd_buf.
additional_parms=" ${additional_parms-}"
robot_cmd_buf="${robot_cmd_buf}${additional_parms} ${HOME}/openbmc-test"
robot_cmd_buf="${robot_cmd_buf}-automation/${robot_file_path}"
# Run the docker container to execute the code update.
# The test results will be put in ${WORKSPACE}.
cmd_buf="docker run --user=root --env=HOME=${HOME} --env=PYTHONPATH=${HOME}"
cmd_buf="${cmd_buf}/openbmc-test-automation/lib --workdir=${HOME} --volume"
cmd_buf="${cmd_buf}=${git_dir_path}:${HOME} --volume=${WORKSPACE}:/status_"
cmd_buf="${cmd_buf}dir --tty ${DOCKER_IMG_NAME} python -m ${robot_cmd_buf}"
# Echo all subsequent commands to terminal.
set -x
eval "${cmd_buf}"
}