Merge changes from topic 'improve-linting'
[releng/builder.git] / jjb / autorelease / include-raw-autorelease-notify-build-failure.sh
index 028911076d17fe4a9b80c7a8d762fb6175992727..b113636818c283e84ce03f942719b015a0784603 100644 (file)
@@ -9,59 +9,77 @@
 # http://www.eclipse.org/legal/epl-v10.html
 ##############################################################################
 
-#RELEASE_EMAIL="release@lists.opendaylight.org"
-RELEASE_EMAIL="abelur@linuxfoundation.org, thanh.ha@linuxfoundation.org"
+RELEASE_EMAIL="release@lists.opendaylight.org"
 ARCHIVES_DIR="$JENKINS_HOSTNAME/$JOB_NAME/$BUILD_NUMBER"
 CONSOLE_LOG="/tmp/autorelease-build.log"
-
-BODY="Please refer to the logs server URL for console logs when possible
-and use the Jenkins Build URL as a last resort.
-
-Console Logs URL:
-https://logs.opendaylight.org/$SILO/$ARCHIVES_DIR
-
-Jenkins Build URL:
-$BUILD_URL"
+STREAM=${JOB_NAME#*-*e-}
 
 # get console logs
-wget -O $CONSOLE_LOG ${BUILD_URL}consoleText
+wget -O "$CONSOLE_LOG" "${BUILD_URL}consoleText"
 
-# get the failed project or artifactid
-TEMP=`awk '/Reactor Summary:/{flag=1;next} \
-           /Final Memory:/{flag=0}flag' $CONSOLE_LOGS \
-           | grep '. FAILURE \[' | awk -F'[].]' '{gsub(/ /, "", $2); print $2 }'`
+# extract the failing project or artifactid
+REACTOR_INFO=$(awk '/Reactor Summary:/ { flag=1 }
+          flag {
+             if ( sub(/^\[(INFO)\]/,"") && sub(/FAILURE \[.*/,"") ) {
+                 gsub(/[[:space:]]*::[[:space:]]*/,"::")
+                 gsub(/^[[:space:]]+|[[:space:]]+$|[.]/,"")
+                 print
+             }
+          }
+          /Final Memory:/ { flag=0 }' $CONSOLE_LOG)
 
 # check for project format
-if [[ ${TEMP} =~ .*::*.*::*. ]]; then
+if [[ ${REACTOR_INFO} =~ .*::*.*::*. ]]; then
     # extract project and artifactid from full format
-         PROJECT=`echo ${TEMP} | awk -F'::' '{ print $2 }'`
-         ARTIFACTID=`echo ${TEMP} |awk -F'::' '{ print $3 }'`
+    ODL=$(echo "${REACTOR_INFO}" | awk -F'::' '{ gsub(/^[ \t]+|[ \t]+$/, "", $1); print $1 }')
+    PROJECT=$(echo "${REACTOR_INFO}" | awk -F'::' '{ gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2 }')
+    ARTIFACTID=$(echo "${REACTOR_INFO}" | awk -F'::' '{ gsub(/^[ \t]+|[ \t]+$/, "", $3); print $3 }')
 else
-         # set ARTIFACTID to partial format
-         ARTIFACTID=${TEMP}
+    # set ARTIFACTID to partial format
+    ODL=""
+    PROJECT=""
+    ARTIFACTID=$(echo "${REACTOR_INFO}" | awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }')
 fi
 
+# Construct email subject & body
+PROJECT_STRING=${PROJECT:+" from $PROJECT"}
+SUBJECT="[release] Autorelease $STREAM failed to build $ARTIFACTID$PROJECT_STRING"
+BODY="Attention$PROJECT_STRING,
+
+Autorelease $STREAM failed to build $ARTIFACTID$PROJECT_STRING in build
+$BUILD_NUMBER. Attached is a snippet of the error message related to the
+failure that we were able to automatically parse as well as console logs.
+
+Console Logs:
+https://logs.opendaylight.org/$SILO/$ARCHIVES_DIR
+
+Jenkins Build:
+$BUILD_URL
+
+Please review and provide an ETA on when a fix will be available.
+
+Thanks,
+ODL releng/autorelease team
+"
+
 # check if remote staging is complete successfully
-BUILD_STATUS=`awk '/\[INFO\] Remote staging finished/{flag=1;next} \
-                   /Total time:/{flag=0}flag' $CONSOLE_LOG \
-                   | grep '\] BUILD' | awk '{print $3}'`
+BUILD_STATUS=$(awk '/\[INFO\] Remote staging finished/{flag=1;next}/Total time:/{flag=0}flag' $CONSOLE_LOG \
+                   | grep '\] BUILD' | awk '{print $3}')
 
 if [ ! -z "${ARTIFACTID}" ] && [[ "${BUILD_STATUS}" != "SUCCESS" ]]; then
     # project search pattern should handle both scenarios
     # 1. Full format:    ODL :: $PROJECT :: $ARTIFACTID
     # 2. Partial format: Building $ARTIFACTID
-    awk "/\[INFO\] Building ${ARTIFACTID} / || /ODL :: ${PROJECT} :: ${ARTIFACTID} /{flag=1;next} \
-          /Reactor Summary:/{flag=0}flag" $CONSOLE_LOG > /tmp/error_msg
+    sed -e "/\[INFO\] Building \(${ARTIFACTID} \|${ODL} :: ${PROJECT} :: ${ARTIFACTID} \)/,/Reactor Summary:/!d;//d" \
+          $CONSOLE_LOG > /tmp/error_msg
 
-    if [ -z "${PROJECT}" ]; then
-        PROJECT=${ARTIFACTID}
-        # TODO: unset the below line when ready to deploy to real lists
-        # RELEASE_EMAIL = "${RELEASE_EMAIL}, ${PROJECT}-dev@opendaylight.org"
+    if [ -n "${PROJECT}" ]; then
+        RELEASE_EMAIL="${RELEASE_EMAIL}, ${PROJECT}-dev@opendaylight.org"
     fi
 
-    SUBJECT="[release] Autorelease build failure: ${PROJECT}"
-
-    echo "${BODY}" | mail -A /tmp/error_msg -s "${SUBJECT}" "${RELEASE_EMAIL}"
+    echo "${BODY}" | mail -a /tmp/error_msg \
+        -S "from=Jenkins <jenkins-dontreply@opendaylight.org>" \
+        -s "${SUBJECT}" "${RELEASE_EMAIL}"
 fi
 
 rm $CONSOLE_LOG