17c2aad20Sopenharmony_ci# This was borrowed from https://github.com/travis-ci/travis-build/tree/master/lib/travis/build/bash 27c2aad20Sopenharmony_ci# to get around https://github.com/travis-ci/travis-ci/issues/9979. It should probably be removed 37c2aad20Sopenharmony_ci# as soon as Travis CI has started to provide an easy way to export the functions to bash scripts. 47c2aad20Sopenharmony_ci 57c2aad20Sopenharmony_citravis_jigger() { 67c2aad20Sopenharmony_ci local cmd_pid="${1}" 77c2aad20Sopenharmony_ci shift 87c2aad20Sopenharmony_ci local timeout="${1}" 97c2aad20Sopenharmony_ci shift 107c2aad20Sopenharmony_ci local count=0 117c2aad20Sopenharmony_ci 127c2aad20Sopenharmony_ci echo -e "\\n" 137c2aad20Sopenharmony_ci 147c2aad20Sopenharmony_ci while [[ "${count}" -lt "${timeout}" ]]; do 157c2aad20Sopenharmony_ci count="$((count + 1))" 167c2aad20Sopenharmony_ci echo -ne "Still running (${count} of ${timeout}): ${*}\\r" 177c2aad20Sopenharmony_ci sleep 60 187c2aad20Sopenharmony_ci done 197c2aad20Sopenharmony_ci 207c2aad20Sopenharmony_ci echo -e "\\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"${*}\"${ANSI_RESET}\\n" 217c2aad20Sopenharmony_ci kill -9 "${cmd_pid}" 227c2aad20Sopenharmony_ci} 237c2aad20Sopenharmony_ci 247c2aad20Sopenharmony_citravis_wait() { 257c2aad20Sopenharmony_ci local timeout="${1}" 267c2aad20Sopenharmony_ci 277c2aad20Sopenharmony_ci if [[ "${timeout}" =~ ^[0-9]+$ ]]; then 287c2aad20Sopenharmony_ci shift 297c2aad20Sopenharmony_ci else 307c2aad20Sopenharmony_ci timeout=20 317c2aad20Sopenharmony_ci fi 327c2aad20Sopenharmony_ci 337c2aad20Sopenharmony_ci local cmd=("${@}") 347c2aad20Sopenharmony_ci local log_file="travis_wait_${$}.log" 357c2aad20Sopenharmony_ci 367c2aad20Sopenharmony_ci "${cmd[@]}" &>"${log_file}" & 377c2aad20Sopenharmony_ci local cmd_pid="${!}" 387c2aad20Sopenharmony_ci 397c2aad20Sopenharmony_ci travis_jigger "${!}" "${timeout}" "${cmd[@]}" & 407c2aad20Sopenharmony_ci local jigger_pid="${!}" 417c2aad20Sopenharmony_ci local result 427c2aad20Sopenharmony_ci 437c2aad20Sopenharmony_ci { 447c2aad20Sopenharmony_ci set +e 457c2aad20Sopenharmony_ci wait "${cmd_pid}" 2>/dev/null 467c2aad20Sopenharmony_ci result="${?}" 477c2aad20Sopenharmony_ci ps -p"${jigger_pid}" &>/dev/null && kill "${jigger_pid}" 487c2aad20Sopenharmony_ci set -e 497c2aad20Sopenharmony_ci } 507c2aad20Sopenharmony_ci 517c2aad20Sopenharmony_ci if [[ "${result}" -eq 0 ]]; then 527c2aad20Sopenharmony_ci echo -e "\\n${ANSI_GREEN}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" 537c2aad20Sopenharmony_ci else 547c2aad20Sopenharmony_ci echo -e "\\n${ANSI_RED}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" 557c2aad20Sopenharmony_ci fi 567c2aad20Sopenharmony_ci 577c2aad20Sopenharmony_ci echo -e "\\n${ANSI_GREEN}Log:${ANSI_RESET}\\n" 587c2aad20Sopenharmony_ci cat "${log_file}" 597c2aad20Sopenharmony_ci 607c2aad20Sopenharmony_ci return "${result}" 617c2aad20Sopenharmony_ci} 62