1#!/bin/bash 2 3# This file contains bash functions which may be of use to our Jenkins jobs. 4 5 6function process_git { 7 # Do not echo all commands to terminal. 8 set +x 9 local git_dir_path="${1}" ; shift || : 10 local post_clone_command="${1}" ; shift || : 11 12 # Do git processing for this Jenkins job which includes: 13 # - Recognizing existing git repo if appropriate. 14 # - Cloning git repo. 15 # - Running caller's post_clone_command. 16 17 # Description of argument(s): 18 # git_dir_path The location of the git dir path (e.g. 19 # "/home/johndoe/git/"). If the 20 # git_dir_path already exists and it was 21 # specified explicitly by the user, this 22 # function will neither clone the git repo 23 # to this path nor run the 24 # post_clone_commands, i.e. the indicated 25 # git repo will be used as-is. 26 # post_clone_command Any valid bash command to be run after git 27 # clone of openbmc-test-automation. Note 28 # that this is intended primarily for Open 29 # BMC Test code developers who may wish to 30 # cherry pick code changes for testing. 31 32 if [ -d "${git_dir_path}" -a "${git_dir_path}" != "${WORKSPACE}" ] ; then 33 echo "\"${git_dir_path}\" already exists and is not the standard" \ 34 "location of \"${WORKSPACE}\" so no git processing is required." 35 return 36 fi 37 38 # Echo all subsequent commands to terminal. 39 set -x 40 mkdir -p "${git_dir_path}" || return 1 41 cd "${git_dir_path}" || return 1 42 43 echo "Remove old git repo files." 44 rm -Rf ./openbmc-build-scripts 45 rm -Rf ./openbmc-test-automation 46 47 git clone https://gerrit.openbmc-project.xyz/openbmc/openbmc-build-scripts\ 48 || return 1 49 git clone https://github.com/openbmc/openbmc-test-automation.git || return 1 50 51 if [ ! -z "${post_clone_command}" ] ; then 52 cd openbmc-test-automation || return 1 53 echo "Run the caller's post clone command." 54 eval "${post_clone_command}" || return 1 55 fi 56 57} 58 59 60function process_docker { 61 # Do not echo all commands to terminal. 62 set +x 63 local git_dir_path="${1}" ; shift || : 64 65 # Source the docker script to prepare our environment for calling docker. 66 67 # Description of argument(s): 68 # git_dir_path The location of the git dir path (e.g. 69 # "/home/johndoe/git/") to be used. 70 71 # Set global DOCKER_IMG_NAME. 72 DOCKER_IMG_NAME="openbmc/obmc-docker-image" 73 74 echo "Build the docker image required to execute the robot tests." 75 # Echo all subsequent commands to terminal. 76 set -x 77 cd "${git_dir_path}openbmc-build-scripts" || return 1 78 . "./scripts/build-qemu-robot-docker.sh" || return 1 79 80 cd "${git_dir_path}" || return 1 81 82} 83 84 85if ! test "${stock_robot_program_parms+defined}" ; then 86 readonly stock_robot_program_parms="openbmc_host openbmc_username"\ 87" openbmc_password os_host os_username os_password quiet debug test_mode" 88 readonly master_robot_gen_parms="console consolecolors outputdir output log"\ 89" report loglevel include" 90fi 91function run_docker_robot { 92 # Do not echo all commands to terminal. 93 set +x 94 local robot_file_path="${1}" ; shift || : 95 local robot_pgm_parms="${1-}" ; shift || : 96 local robot_gen_parms="${1:-${master_robot_gen_parms}}" ; shift || : 97 98 # Compose a robot command string and run it in a docker environment. 99 100 # Description of argument(s): 101 # robot_file_path The file path of the robot file (with or 102 # without .robot suffix). This file path is 103 # relative to the base git repository. 104 # robot_pgm_parms A space-separated list of parms which are 105 # to be passed to the robot program via the 106 # -v robot parameter. These parms will be 107 # processed in addition to the 108 # stock_robot_program_parms listed above. 109 # robot_gen_parms A space-separated list of general robot 110 # parameters understood by the robot program 111 # (e.g. consolecolors, etc). 112 113 # Strip, then re-append ".robot" so that the user can pass with or without 114 # the .robot suffix. 115 robot_file_path="${robot_file_path%.robot}.robot" 116 117 # Determine the robot_file_name form the robot_file_path. 118 local robot_file_name="${robot_file_path%.robot}" 119 robot_file_name="${robot_file_name##*/}" 120 local robot_short_file_name="${robot_file_name%.robot}" 121 122 # Set default values for robot_gen_parms. 123 local dft_console=dotted 124 local dft_consolecolors=off 125 local dft_outputdir=/status_dir 126 local dft_output=${robot_short_file_name}.output.xml 127 local dft_log=${robot_short_file_name}.log.html 128 local dft_report=${robot_short_file_name}.report.html 129 local dft_loglevel='TRACE' 130 local dft_include='' 131 132 local cmd_buf 133 # Loop through robot general parms setting any that have no value to a 134 # default value (defined above). 135 for parm_name in ${robot_gen_parms} ; do 136 # If the parm already has a value, continue to next loop iteration. 137 [ ! -z "${!parm_name-}" ] && continue || : 138 cmd_buf="${parm_name}=\"\${dft_${parm_name}}\"" 139 eval ${cmd_buf} 140 done 141 142 local robot_cmd_buf='robot' 143 # Process our stock robot program parms along with the caller's 144 # robot_pgm_parms to add to the robot_cmd_buf. 145 local parm_name 146 local escape_quote_char="'\''" 147 for parm_name in ${stock_robot_program_parms} ${robot_pgm_parms} ; do 148 [ -z "${parm_name-}" ] && continue 149 robot_cmd_buf="${robot_cmd_buf} -v ${parm_name}:${!parm_name-}" 150 done 151 152 # Process the robot general parms to add to the robot_cmd_buf. 153 for parm_name in ${robot_gen_parms} ; do 154 robot_cmd_buf="${robot_cmd_buf} --${parm_name}=${!parm_name-}" 155 done 156 157 # Finally append the robot file path to the robot_cmd_buf. 158 additional_parms=" ${additional_parms-}" 159 robot_cmd_buf="${robot_cmd_buf}${additional_parms} ${HOME}/openbmc-test" 160 robot_cmd_buf="${robot_cmd_buf}-automation/${robot_file_path}" 161 162 # Run the docker container to execute the code update. 163 # The test results will be put in ${WORKSPACE}. 164 165 cmd_buf="docker run --user=root --env=HOME=${HOME} --env=PYTHONPATH=${HOME}" 166 cmd_buf="${cmd_buf}/openbmc-test-automation/lib --workdir=${HOME} --volume" 167 cmd_buf="${cmd_buf}=${git_dir_path}:${HOME} --volume=${WORKSPACE}:/status_" 168 cmd_buf="${cmd_buf}dir --tty ${DOCKER_IMG_NAME} python -m ${robot_cmd_buf}" 169 # Echo all subsequent commands to terminal. 170 set -x 171 eval "${cmd_buf}" 172 173} 174