Improve test tag string parsing 33/23433/9
authorVratko Polak <vrpolak@cisco.com>
Fri, 15 Nov 2019 16:27:43 +0000 (17:27 +0100)
committerVratko Polak <vrpolak@cisco.com>
Mon, 18 Nov 2019 13:41:21 +0000 (13:41 +0000)
Instead of just adding the missing -clx,
the new way aims to be forward compatible.

The new implementation is quite permissive,
ignoring all "word" chars sticking to the trigger word
and returning everything after that and space up to the endline.

+ Unified perftest and devicetest handling.
 + Consequently, triggers like "devicetest-1n-skx GBP" will work now.

Change-Id: I3bda6105195180d35a589a75318f569e36f03461
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
resources/libraries/bash/function/common.sh

index 89e1af1..1ef7c93 100644 (file)
@@ -490,41 +490,32 @@ function get_test_tag_string () {
     # - TEST_CODE - The test selection string from environment or argument.
     # Variables set:
     # - TEST_TAG_STRING - The string following trigger word in gerrit comment.
     # - TEST_CODE - The test selection string from environment or argument.
     # Variables set:
     # - TEST_TAG_STRING - The string following trigger word in gerrit comment.
-    #   May be empty, not set on event types not adding comment.
+    #   May be empty, or even not set on event types not adding comment.
 
     # TODO: ci-management scripts no longer need to perform this.
 
     set -exuo pipefail
 
 
     # TODO: ci-management scripts no longer need to perform this.
 
     set -exuo pipefail
 
-    trigger=""
     if [[ "${GERRIT_EVENT_TYPE-}" == "comment-added" ]]; then
         case "${TEST_CODE}" in
             *"device"*)
     if [[ "${GERRIT_EVENT_TYPE-}" == "comment-added" ]]; then
         case "${TEST_CODE}" in
             *"device"*)
-                # On parsing error, ${trigger} stays empty.
-                trigger="$(echo "${GERRIT_EVENT_COMMENT_TEXT}" \
-                    | grep -oE '(devicetest$|devicetest[[:space:]].+$)' \
-                    || true)"
-                # Set test tags as string.
-                TEST_TAG_STRING="${trigger#$"devicetest"}"
+                trigger="devicetest"
                 ;;
             *"perf"*)
                 ;;
             *"perf"*)
-                # On parsing error, ${trigger} stays empty.
-                comment="${GERRIT_EVENT_COMMENT_TEXT}"
-                # As "perftest" can be followed by something, we substitute it.
-                comment="${comment/perftest-2n/perftest}"
-                comment="${comment/perftest-3n/perftest}"
-                comment="${comment/perftest-hsw/perftest}"
-                comment="${comment/perftest-skx/perftest}"
-                comment="${comment/perftest-dnv/perftest}"
-                comment="${comment/perftest-tsh/perftest}"
-                tag_string="$(echo "${comment}" \
-                    | grep -oE '(perftest$|perftest[[:space:]].+$)' || true)"
-                # Set test tags as string.
-                TEST_TAG_STRING="${tag_string#$"perftest"}"
+                trigger="perftest"
                 ;;
             *)
                 die "Unknown specification: ${TEST_CODE}"
         esac
                 ;;
             *)
                 die "Unknown specification: ${TEST_CODE}"
         esac
+        # Ignore lines not containing the trigger word.
+        comment=$(fgrep "${trigger}" <<< "${GERRIT_EVENT_COMMENT_TEXT}") || true
+        # The vpp-csit triggers trail stuff we are not interested in.
+        # Removing them and trigger word: https://unix.stackexchange.com/a/13472
+        # (except relying on \s whitespace, \S non-whitespace and . both).
+        # The last string is concatenated, only the middle part is expanded.
+        cmd=("grep" "-oP" '\S*'"${trigger}"'\S*\s\K.+$') || die "Unset trigger?"
+        # On parsing error, TEST_TAG_STRING probably stays empty.
+        TEST_TAG_STRING=$("${cmd[@]}" <<< "${comment}") || true
     fi
 }
 
     fi
 }