#!/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}" }