You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/06/09 08:55:02 UTC

[camel] branch camel-3.20.x updated: CAMEL-19427: added a tester bot for the core code

This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.20.x by this push:
     new c783f69fa03 CAMEL-19427: added a tester bot for the core code
c783f69fa03 is described below

commit c783f69fa039a9c3fa105cf1058ac702dbb72fe5
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Jun 8 10:16:40 2023 +0200

    CAMEL-19427: added a tester bot for the core code
---
 .github/actions/quick-test/quick-test.sh | 147 +++++++++++++++++++++----------
 .github/workflows/component-pr.yaml      |  50 ++++++++---
 2 files changed, 140 insertions(+), 57 deletions(-)

diff --git a/.github/actions/quick-test/quick-test.sh b/.github/actions/quick-test/quick-test.sh
index e1051cc41d3..5a1ac781dba 100755
--- a/.github/actions/quick-test/quick-test.sh
+++ b/.github/actions/quick-test/quick-test.sh
@@ -34,6 +34,14 @@ testDate=$(date '+%Y-%m-%d-%H%M%S')
 logDir=${basedir}/automated-build-log
 testHost=$(hostname)
 
+# How to test this code:
+#
+# Set the GITHUB_STEP_SUMMARY variable and select a commit range containing changes core, components or both:
+# GITHUB_STEP_SUMMARY=$HOME/tmp/step-summary.txt  ./.github/actions/quick-test/quick-test.sh beginning end.
+#
+# For instance:
+# GITHUB_STEP_SUMMARY=$HOME/tmp/step-summary.txt  ./.github/actions/quick-test/quick-test.sh 74e90da8ec55afe5065d5de495df7fe7a 9e05505d7eaad98c55d67a09cae8aa9505253c72
+
 function notifySuccess() {
   local component=$1
   local total=$2
@@ -52,6 +60,39 @@ function notifyError() {
   echo "| ${component} | :x: fail" >> $GITHUB_STEP_SUMMARY
 }
 
+function resetCounters() {
+  current=0
+  failures=0
+  successes=0
+}
+
+function setResultValue() {
+  local value=$1
+  local file=$2
+
+  echo "$1" > "$file"
+}
+
+function setComponentTestResults() {
+  local tested=$1
+  local failures=$2
+  local successes=$3
+
+  setResultValue "$tested" "${logDir}/components-tested"
+  setResultValue "$failures" "${logDir}/components-failures"
+  setResultValue "$successes" "${logDir}/components-successes"
+}
+
+function setCoreTestResults() {
+  local tested=$1
+  local failures=$2
+  local successes=$3
+
+  setResultValue "$tested" "${logDir}/core-tested"
+  setResultValue "$failures" "${logDir}/core-failures"
+  setResultValue "$successes" "${logDir}/core-successes"
+}
+
 function runTest() {
   local component=$1
   local total=$2
@@ -104,62 +145,74 @@ function coreTest() {
   find . -iname '*test*.log' -exec mv {} "${logDir}"/ \;
 }
 
-function main() {
-  local current=0
-  local startCommit=${1:-""}
-  local endCommit=${2:-""}
-
-  mkdir -p "${logDir}"
+function testComponents() {
+    local current=0
+    local startCommit=${1:-""}
+    local endCommit=${2:-""}
 
-  echo "Searching for camel core changes"
-  local core=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^core' | grep -v -e '^$' | cut -d / -f 1 | uniq | sort)
-  if [[ ! -z "${core}" ]] ; then
-    coreTest
-  fi
+    mkdir -p "${logDir}"
 
-  echo "Searching for modified components"
-  local components=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^components' | grep -v "camel-aws" | grep -v -e '^$' | cut -d / -f 1-2 | uniq | sort)
-  local componentsAws=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^components' | grep "camel-aws" | grep -v -e '^$' | cut -d / -f 1-3 | uniq | sort)
+    echo "Searching for modified components"
+    local components=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^components' | grep -v "camel-aws" | grep -v -e '^$' | cut -d / -f 1-2 | uniq | sort)
+    local componentsAws=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^components' | grep "camel-aws" | grep -v -e '^$' | cut -d / -f 1-3 | uniq | sort)
 
-  if [[ -z "${components}" ]] ; then
-    components="${componentsAws}"
-  else
-    components=$(printf '%s\n%s' "${components}" "${componentsAws}")
-  fi
+    if [[ -z "${components}" ]] ; then
+      components="${componentsAws}"
+    else
+      components=$(printf '%s\n%s' "${components}" "${componentsAws}")
+    fi
 
-  local total=$(echo "${components}" | grep -v -e '^$' | wc -l)
+    local total=$(echo "${components}" | grep -v -e '^$' | wc -l)
 
-  echo "${total}" > "${logDir}/total"
-  if [[ ${total} -eq 0 ]]; then
-    echo "0" > "${logDir}/tested"
-    echo "0" > "${logDir}/failures"
-    echo "0" > "${logDir}/successes"
-    exit 0
-  else
-    if [[ ${total} -gt ${maxNumberOfTestableComponents} ]]; then
-      echo "0" > "${logDir}/tested"
-      echo "0" > "${logDir}/failures"
-      echo "0" > "${logDir}/successes"
+    echo "${total}" > "${logDir}/components-total"
+    if [[ ${total} -eq 0 ]]; then
+      setComponentTestResults 0 0 0
       exit 0
+    else
+      if [[ ${total} -gt ${maxNumberOfTestableComponents} ]]; then
+        setComponentTestResults 0 0 0
+        exit 0
+      fi
     fi
-  fi
 
-  echo "It will test the following ${total} components:"
-  echo "${components}"
+    echo "It will test the following ${total} components:"
+    echo "${components}"
 
-  echo "" >> $GITHUB_STEP_SUMMARY
-  echo "| Component | Result |" >> $GITHUB_STEP_SUMMARY
-  echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
-  current=0
-  for component in $(echo $components); do
-    ((current++))
-    componentTest "${component}" "${total}" "${current}"
-  done
-
-  echo "${total}" > "${logDir}/tested"
-  echo "${failures}" > "${logDir}/failures"
-  echo "${successes}" > "${logDir}/successes"
-  exit "${failures}"
+    echo "" >> $GITHUB_STEP_SUMMARY
+    echo "| Component | Result |" >> $GITHUB_STEP_SUMMARY
+    echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
+
+    resetCounters
+    for component in $(echo $components); do
+      ((current++))
+      componentTest "${component}" "${total}" "${current}"
+    done
+
+    setComponentTestResults "$total" "$failures" "$successes"
+
+    exit "${failures}"
+}
+
+function testCore() {
+    local current=0
+    local startCommit=${1:-""}
+    local endCommit=${2:-""}
+
+    mkdir -p "${logDir}"
+    resetCounters
+
+    setCoreTestResults 0 0 0
+    echo "Searching for camel core changes"
+    local core=$(git diff "${startCommit}..${endCommit}" --name-only --pretty=format:"" | grep -e '^core' | grep -v -e '^$' | cut -d / -f 1 | uniq | sort)
+    if [[ ! -z "${core}" ]] ; then
+      coreTest
+      setCoreTestResults "1" "$failures" "$successes"
+    fi
+}
+
+function main() {
+  testCore "$@"
+  testComponents "$@"
 }
 
 main "$@"
diff --git a/.github/workflows/component-pr.yaml b/.github/workflows/component-pr.yaml
index cdcd9e5e516..b07cd5c8796 100644
--- a/.github/workflows/component-pr.yaml
+++ b/.github/workflows/component-pr.yaml
@@ -95,29 +95,59 @@ jobs:
           script: |
             let fs = require('fs');
             let issue_number = Number(fs.readFileSync('./pr_number'));
-            let total = Number(fs.readFileSync('./total'));
-            let tested = Number(fs.readFileSync('./tested'));
-            let failures = Number(fs.readFileSync('./failures'));
-            let successes = Number(fs.readFileSync('./successes'));
+            let componentsTotal = Number(fs.readFileSync('./components-total'));
+            let componentsTested = Number(fs.readFileSync('./components-tested'));
+            let componentsFailures = Number(fs.readFileSync('./components-failures'));
+            let componentsSuccesses = Number(fs.readFileSync('./components-successes'));
                                 
             var message = ""
 
-            if (tested === 0) {
-              if (total === 0) {
+            if (componentsTested === 0) {
+              if (componentsTotal === 0) {
                 message = ":no_entry_sign: There are (likely) no components to be tested in this PR"
               } else {
-                if (total > 20) {
-                  message = `:leftwards_arrow_with_hook: There are either **too many** changes to be tested in this PR or the code **needs be rebased**: (${total} components likely to be affected)`
+                if (componentsTotal > 20) {
+                  message = `:leftwards_arrow_with_hook: There are either **too many** changes to be tested in this PR or the code **needs be rebased**: (${componentsTotal} components likely to be affected)`
                 }
               }
             } else {
-              message = `### Components tested:
+              message = `### Components test results:
             
             | Total | Tested | Failed :x: | Passed :white_check_mark: | 
             | --- | --- | --- |  --- |
-            | ${total} | ${tested} | ${failures} | ${successes} |`
+            | ${componentsTotal} | ${componentsTested} | ${componentsFailures} | ${componentsSuccesses} |`
             }
 
+            await github.rest.issues.createComment({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  issue_number: issue_number,
+                  body: message
+            });
+      - uses: actions/github-script@v6
+        if: |
+          github.event_name == 'workflow_run'
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          script: |
+            let fs = require('fs');
+            let issue_number = Number(fs.readFileSync('./pr_number'));
+            let coreTested = Number(fs.readFileSync('./core-tested'));
+            let coreFailures = Number(fs.readFileSync('./core-failures'));
+            let coreSuccesses = Number(fs.readFileSync('./core-successes'));
+            
+            var message = ""
+            
+            if (coreTested === 0) {
+              message = ":no_entry_sign: There are (likely) no changes in core core to be tested in this PR"
+            } else {
+              message = `### Core test results:
+            
+            | Tested | Failed :x: | Passed :white_check_mark: | 
+            | --- | --- |  --- |
+            | ${coreTested} | ${coreFailures} | ${coreSuccesses} |`
+            }
+            
             await github.rest.issues.createComment({
                   owner: context.repo.owner,
                   repo: context.repo.repo,