diff --git a/scripts/verify-replace.sh b/scripts/verify-replace.sh index 1df85273..0fe65767 100755 --- a/scripts/verify-replace.sh +++ b/scripts/verify-replace.sh @@ -5,7 +5,13 @@ GH_BASE_URL_KS=https://github.com/kubesaw/ GH_BASE_URL_CRT=https://github.com/codeready-toolchain/ declare -a REPOS=("${GH_BASE_URL_KS}ksctl" "${GH_BASE_URL_CRT}host-operator" "${GH_BASE_URL_CRT}member-operator" "${GH_BASE_URL_CRT}registration-service" "${GH_BASE_URL_CRT}toolchain-e2e" "${GH_BASE_URL_CRT}toolchain-common") C_PATH=${PWD} -ERRORLIST=() +ERROR_REPO_LIST=() +ERROR_FILE_LIST=() +STD_OUT_FILE_LIST=() +GO_LINT_REGEX="[\s\w.\/]*:[0-9]*:[0-9]*:[\w\s)(*.\`]*" +ERROR_REGEX="[E\|e][R\|r][R\|r][O\|o][R\|r][:]*\|[F\|f][A\|a][I\|i][l\|L][:]*\|expected[:]*\|actual[:]*" #unit test or any other failure we log from our controllers or other places goes into stdoutput + #(since we log it and its not a failure in running the command or dependency check), + #hence making that regex too, to fetch the error more precisely echo Initiating verify-replace on dependent repos for repo in "${REPOS[@]}" @@ -14,28 +20,60 @@ do echo echo "$(basename ${repo})" echo - echo ========================================================================================= + echo ========================================================================================= repo_path=${BASE_REPO_PATH}/$(basename ${repo}) + err_file=$(mktemp ${BASE_REPO_PATH}/$(basename ${repo})-error.XXX) + echo "error output file : ${err_file}" + std_out_file=$(mktemp ${BASE_REPO_PATH}/$(basename ${repo})-output.XXX) + echo "std output file : ${std_out_file}" echo "Cloning repo in /tmp" git clone --depth=1 ${repo} ${repo_path} echo "Repo cloned successfully" cd ${repo_path} - if ! make pre-verify; then - ERRORLIST+="($(basename ${repo}))" + make pre-verify 2> >(tee ${err_file}) + rc=$? + if [ ${rc} -ne 0 ]; then + ERROR_REPO_LIST+="$(basename ${repo}) " + ERROR_FILE_LIST+="${err_file} " continue fi echo "Initiating 'go mod replace' of current api version in dependent repos" go mod edit -replace github.com/codeready-toolchain/api=${C_PATH} - make verify-dependencies || ERRORLIST+="($(basename ${repo}))" + make verify-dependencies 2> >(tee ${err_file}) 1> >(tee ${std_out_file}) + rc=$? + if [ ${rc} -ne 0 ]; then + ERROR_REPO_LIST+="$(basename ${repo}) " + ERROR_FILE_LIST+="${err_file} " + STD_OUT_FILE_LIST+="${std_out_file} " + fi echo echo ========================================================================================= - echo + echo done -if [ ${#ERRORLIST[@]} -ne 0 ]; then +echo "Summary" +if [ ${#ERROR_REPO_LIST[@]} -ne 0 ]; then echo "Below are the repos with error: " - for e in ${ERRORLIST[*]} + for error_repo_name in ${ERROR_REPO_LIST[*]} do - echo "${e}" + echo + echo ========================================================================================= + echo + echo "${error_repo_name} has the following errors " + echo + echo ========================================================================================= + echo + for error_file_name in ${ERROR_FILE_LIST[*]} + do + if [[ ${error_file_name} =~ ${error_repo_name} ]]; then + cat "${error_file_name}" + fi + done + for std_out_file_name in ${STD_OUT_FILE_LIST[*]} + do + if [[ ${std_out_file_name} =~ ${error_repo_name} ]]; then + cat "${std_out_file_name}" | grep -C 5 "${GO_LINT_REGEX}\|${ERROR_REGEX}" + fi + done done exit 1 else