diff --git a/hack/make-rules/verify.sh b/hack/make-rules/verify.sh
index dbcdf577a79..30a9a5bf7db 100755
--- a/hack/make-rules/verify.sh
+++ b/hack/make-rules/verify.sh
@@ -127,10 +127,10 @@ function run-cmd {
local tr
if ${SILENT}; then
- juLog -output="${output}" -class="verify" -name="${testname}" "$@" &> /dev/null
+ juLog -output="${output}" -class="verify" -name="${testname}" -fail="^ERROR: " "$@" &> /dev/null
tr=$?
else
- juLog -output="${output}" -class="verify" -name="${testname}" "$@"
+ juLog -output="${output}" -class="verify" -name="${testname}" -fail="^ERROR: " "$@"
tr=$?
fi
return ${tr}
diff --git a/hack/verify-golangci-lint.sh b/hack/verify-golangci-lint.sh
index 5d4925ea899..7dd154ea05f 100755
--- a/hack/verify-golangci-lint.sh
+++ b/hack/verify-golangci-lint.sh
@@ -97,6 +97,19 @@ if [ "${golangci_config}" ]; then
golangci+=(--config="${golangci_config}")
fi
+# Below the output of golangci-lint is going to be piped into sed to add
+# a prefix to each output line. This helps make the output more visible
+# in the Prow log viewer ("error" is a key word there) and ensures that
+# only those lines get included as failure message in a JUnit file
+# by "make verify".
+#
+# The downside is that the automatic detection whether to colorize output
+# doesn't work anymore, so here we force it ourselves when connected to
+# a tty.
+if tty -s; then
+ golangci+=(--color=always)
+fi
+
if [ "$base" ]; then
# Must be a something that git can resolve to a commit.
# "git rev-parse --verify" checks that and prints a detailed
@@ -139,15 +152,15 @@ res=0
run () {
if [[ "${#targets[@]}" -gt 0 ]]; then
echo "running ${golangci[*]} ${targets[*]}" >&2
- "${golangci[@]}" "${targets[@]}" >&2 || res=$?
+ "${golangci[@]}" "${targets[@]}" 2>&1 | sed -e 's;^;ERROR: ;' >&2 || res=$?
else
echo "running ${golangci[*]} ./..." >&2
- "${golangci[@]}" ./... >&2 || res=$?
+ "${golangci[@]}" ./... 2>&1 | sed -e 's;^;ERROR: ;' >&2 || res=$?
for d in staging/src/k8s.io/*; do
MODPATH="staging/src/k8s.io/$(basename "${d}")"
echo "running ( cd ${KUBE_ROOT}/${MODPATH}; ${golangci[*]} --path-prefix ${MODPATH} ./... )"
pushd "${KUBE_ROOT}/${MODPATH}" >/dev/null
- "${golangci[@]}" --path-prefix "${MODPATH}" ./... >&2 || res=$?
+ "${golangci[@]}" --path-prefix "${MODPATH}" ./... 2>&1 | sed -e 's;^;ERROR: ;' >&2 || res=$?
popd >/dev/null
done
fi
diff --git a/third_party/forked/shell2junit/sh2ju.sh b/third_party/forked/shell2junit/sh2ju.sh
index 5a136a99603..29a820ac9d1 100755
--- a/third_party/forked/shell2junit/sh2ju.sh
+++ b/third_party/forked/shell2junit/sh2ju.sh
@@ -18,6 +18,10 @@
### -name="TestName" : the test name which will be shown in the junit report
### -error="RegExp" : a regexp which sets the test as failure when the output matches it
### -ierror="RegExp" : same as -error but case insensitive
+### -fail="RegExp" : Any line from stderr which contains this pattern becomes part of
+### the failure messsage, without the text matching that pattern.
+### Example: -failure="^ERROR: "
+### Default is to use the entire stderr as failure message.
### -output="Path" : path to output directory, defaults to "./results"
### - Junit reports are left in the folder 'result' under the directory where the script is executed.
### - Configure Jenkins to parse junit files from the generated folder
@@ -61,6 +65,7 @@ function juLog() {
errfile=/tmp/evErr.$$.log
date="$(which gdate 2>/dev/null || which date)"
asserts=00; errors=0; total=0; content=""
+ local failureRe=""
# parse arguments
ya=""; icase=""
@@ -70,6 +75,7 @@ function juLog() {
-class=*) class="$(echo "$1" | ${SED} -e 's/-class=//')"; shift;;
-ierror=*) ereg="$(echo "$1" | ${SED} -e 's/-ierror=//')"; icase="-i"; shift;;
-error=*) ereg="$(echo "$1" | ${SED} -e 's/-error=//')"; shift;;
+ -fail=*) failureRe="$(echo "$1" | ${SED} -e 's/-fail=//')"; shift;;
-output=*) juDIR="$(echo "$1" | ${SED} -e 's/-output=//')"; shift;;
*) ya=1;;
esac
@@ -135,9 +141,21 @@ function juLog() {
# write the junit xml report
## failure tag
- [[ ${err} = 0 ]] && failure="" || failure="
-
+ local failure=""
+ if [[ ${err} != 0 ]]; then
+ local failureMsg
+ if [ -n "${failureRe}" ]; then
+ failureMsg="$(echo "${errMsg}" | grep -e "${failureRe}" | ${SED} -e "s;${failureRe};;")"
+ if [ -z "${failureMsg}" ]; then
+ failureMsg="see stderr for details"
+ fi
+ else
+ failureMsg="${errMsg}"
+ fi
+ failure="
+
"
+ fi
## testcase tag
content="${content}