Enable upload of vpp & hicn verify docs to s3 7day retention bucket
[ci-management.git] / jjb / global-macros.yaml
index e1b1efa..ca925eb 100644 (file)
-# Global macros
+# Copyright (c) 2021 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+# Global macros.
 
 #### PARAMETERS
+# Keep 'parameter' entries ordered alphabetically, please.
 - parameter:
-    name: project-parameter
+    name: arch-parameter
     parameters:
-        - string:
-            name: PROJECT
-            default: '{project}'
-            description: "JJB configured PROJECT parameter to identify a Gerrit project"
+      - string:
+          name: ARCH
+          default: '{arch}'
+          description: "Architecture parameter"
 
 - parameter:
-    name: gerrit-parameter
+    name: compiler-parameter
     parameters:
-        - string:
-            name: GERRIT_BRANCH
-            default: '{branch}'
-            description: "JJB configured GERRIT_BRANCH parameter"
+      - string:
+          name: CC
+          default: '{cc}'
+          description: "CC parameter, can be gnu or clang"
 
 - parameter:
-    name: gerrit-project-parameter
+    name: make-parallel-jobs-parameter
     parameters:
-        - string:
-            name: GERRIT_PROJECT
-            default: '{project}'
-            description: "GERRIT_PROJECT parameter if not given by trigger"
+      - string:
+          name: MAKE_PARALLEL_JOBS
+          default: '{make-parallel-jobs}'
+          description: "The number of cores to use for builds."
 
 - parameter:
-    name: os-parameter
+    name: make-test-os-parameter
+    parameters:
+      - string:
+          name: MAKE_TEST_OS
+          default: '{make-test-os}'
+          description: "The OS on which 'make test' is run."
+
+- parameter:
+    name: make-test-multiworker-os-parameter
+    parameters:
+      - string:
+          name: MAKE_TEST_MULTIWORKER_OS
+          default: '{make-test-multiworker-os}'
+          description: "The OS on which 'make test' is run with multiple VPP workers."
+
+- parameter:
+    name: csit-fail-on-crc-mismatch-parameter
+    parameters:
+      - string:
+          name: FDIO_CSIT_FAIL_ON_CRC_MISMATCH
+          default: '{fail-on-crc-mismatch}'
+          description: "If true, CRC is checked, else compatibility is tested."
+
+- parameter:
+    name: csit-perf-trial-duration-parameter
+    parameters:
+      - string:
+          name: CSIT_PERF_TRIAL_DURATION
+          default: "{csit-perf-trial-duration}"
+          description: "Duration of a trial measurement in BMRR tests."
+
+- parameter:
+    name: csit-perf-trial-multiplicity-parameter
     parameters:
-        - string:
-            name: OS
-            default: '{os}'
-            description: "OS parameter"
+      - string:
+          name: CSIT_PERF_TRIAL_MULTIPLICITY
+          default: "{csit-perf-trial-multiplicity}"
+          description: "Number of subsamples for BMRR tests."
+
+- parameter:
+    name: gerrit-csit-refspec-parameter
+    parameters:
+      - string:
+          name: CSIT_REF
+          default: ''
+          # yamllint disable-line rule:line-length
+          description: "GERRIT_REFSPEC parameter to override separately cloned CSIT repository, leave empty for autodetection / no override."
+
+- parameter:
+    name: gerrit-event-comment-text-parameter
+    parameters:
+      - string:
+          name: GERRIT_EVENT_COMMENT_TEXT
+          default: ''
+          # yamllint disable-line rule:line-length
+          description: "GERRIT_EVENT_COMMENT_TEXT parameter not given by trigger"
+
+- parameter:
+    name: gerrit-event-type-parameter
+    parameters:
+      - string:
+          name: GERRIT_EVENT_TYPE
+          default: ''
+          description: "GERRIT_EVENT_TYPE parameter not given by trigger"
+
+- parameter:
+    name: gerrit-parameter
+    parameters:
+      - string:
+          name: GERRIT_BRANCH
+          default: '{branch}'
+          description: "JJB configured GERRIT_BRANCH parameter"
+
+- parameter:
+    name: gerrit-project-parameter
+    parameters:
+      - string:
+          name: GERRIT_PROJECT
+          default: '{project}'
+          description: "GERRIT_PROJECT parameter if not given by trigger"
 
 - parameter:
     name: gerrit-refspec-parameter
     parameters:
-        - string:
-            name: GERRIT_REFSPEC
-            default: '{refspec}'
-            description: "GERRIT_REFSPEC parameter not given by trigger"
+      - string:
+          name: GERRIT_REFSPEC
+          default: '{refspec}'
+          description: "GERRIT_REFSPEC parameter not given by trigger"
 
 - parameter:
-    name: maven-project-parameter
+    name: is-csit-vpp-job-parameter
     parameters:
-        - string:
-            name: MAVEN_SELECTOR
-            default: '{maven}'
-            description: 'Maven selector to be used by shell scripts'
+      - string:
+          name: IS_CSIT_VPP_JOB
+          default: '{is-csit-vpp-job}'
+          description: "Parameter is True if this is a CSIT vpp job."
 
 - parameter:
     name: maven-exec
     parameters:
       - string:
           name: MVN
+          # yamllint disable-line rule:line-length
           default: '/w/tools/hudson.tasks.Maven_MavenInstallation/{maven-version}/bin/mvn'
           description: 'Maven selector to be used by shell scripts'
 
 - parameter:
-    name: repo-name-parameter
+    name: maven-project-parameter
     parameters:
-        - string:
-            name: REPO_NAME
-            default: '{repo-name}'
-            description: 'Name of repo to which to publish packaging'
+      - string:
+          name: MAVEN_SELECTOR
+          default: '{maven}'
+          description: 'Maven selector to be used by shell scripts'
 
 - parameter:
-    name: compiler-parameter
+    name: mode-parameter
     parameters:
-        - string:
-            name: CC
-            default: '{cc}'
-            description: "CC parameter, can be gnu or clang"
+      - string:
+          name: MODE
+          default: '{mode}'
+          description: "mode parameter to be used in shell scripts."
 
 - parameter:
-    name: is-csit-vpp-job-parameter
+    name: os-parameter
     parameters:
-        - string:
-            name: IS_CSIT_VPP_JOB
-            default: '{is-csit-vpp-job}'
-            description: "Parameter is True if this is a CSIT vpp job."
+      - string:
+          name: OS
+          default: '{os}'
+          description: "OS parameter"
+
+- parameter:
+    name: project-parameter
+    parameters:
+      - string:
+          name: PROJECT
+          default: '{project}'
+          # yamllint disable-line rule:line-length
+          description: "JJB configured PROJECT parameter to identify a Gerrit project"
 
 - parameter:
     name: stream-parameter
     parameters:
-        - string:
-            name: STREAM
-            default: '{stream}'
-            description: "Stream job parameter to be used in shell scripts."
+      - string:
+          name: STREAM
+          default: '{stream}'
+          description: "Stream job parameter to be used in shell scripts."
 
+- parameter:
+    name: topo-parameter
+    parameters:
+      - string:
+          name: TOPO
+          default: '{topo}'
+          description: "Topology parameter"
+# [end] Keep 'parameter' entries ordered alphabetically, please.
 
-##### SCMS
+#### SCMS
+# Keep 'scm' entries ordered alphabetically, please.
 - scm:
-    name: git-scm
+    name: gerrit-trigger-scm
     scm:
-        - git:
-            credentials-id: '{credentials-id}'
-            url: '$GIT_BASE'
-            refspec: ''
-            branches:
-                - 'origin/{branch}'
-            skip-tag: true
-            wipe-workspace: true
+      - git:
+          credentials-id: '{credentials-id}'
+          url: '$GIT_BASE'
+          refspec: '{refspec}'
+          branches:
+            - 'origin/$GERRIT_BRANCH'
+          skip-tag: true
+          choosing-strategy: '{choosing-strategy}'
 
 - scm:
-    name: gerrit-trigger-scm
+    name: gerrit-trigger-scm-recursive
     scm:
-        - git:
-            credentials-id: '{credentials-id}'
-            url: '$GIT_BASE'
-            refspec: '{refspec}'
-            branches:
-                - 'origin/$GERRIT_BRANCH'
-            skip-tag: true
-            choosing-strategy: '{choosing-strategy}'
+      - git:
+          credentials-id: '{credentials-id}'
+          url: '$GIT_BASE'
+          refspec: '{refspec}'
+          branches:
+            - 'origin/$GERRIT_BRANCH'
+          skip-tag: true
+          choosing-strategy: '{choosing-strategy}'
+          submodule:
+            recursive: '{submodule-recursive}'
 
 - scm:
-    name: zuul-trigger-scm
+    name: git-scm
     scm:
       - git:
-          url: '$ZUUL_URL/$ZUUL_PROJECT'
-          refspec: '{refspec}'
+          credentials-id: '{credentials-id}'
+          url: '$GIT_BASE'
+          refspec: ''
           branches:
-            - '{commit}'
+            - 'origin/{branch}'
           skip-tag: true
           wipe-workspace: true
+# [end] Keep 'scm' entries ordered alphabetically, please.
 
-###### WRAPPERS
+#### WRAPPERS
+# Keep 'wrapper' entries ordered alphabetically, please.
 - wrapper:
     name: build-timeout
     wrappers:
-        - timeout:
-            type: absolute
-            timeout: 360
-            fail: true
+      - timeout:
+          type: absolute
+          timeout: 360
+          fail: true
 
 - wrapper:
-    # This wrapper is used for all jobs that require no-activity timeouts
-    name: fdio-infra-wrappers-non-activity-timeout
+    # This wrapper is required for all jobs as it configures the wrappers
+    # needed by the fd.io infra.
+    name: fdio-infra-wrappers
     wrappers:
       - timeout:
-          type: no-activity
+          type: absolute
           timeout: '{build-timeout}'
+          timeout-var: 'BUILD_TIMEOUT'
           fail: true
       - timestamps
       - ssh-agent-credentials:
           users:
             - 'jenkins-gerrit-credentials'
       - jclouds:
-          single-use: True
+          single-use: true
       - openstack:
-          single-use: True
+          single-use: true
 
 - wrapper:
-    # This wrapper is required for all jobs as it configures the wrappers
-    # needed by the fd.io infra.
-    name: fdio-infra-wrappers
+    # This wrapper is used for all jobs that require no-activity timeouts
+    name: fdio-infra-wrappers-non-activity-timeout
     wrappers:
       - timeout:
-          type: absolute
+          type: no-activity
           timeout: '{build-timeout}'
-          timeout-var: 'BUILD_TIMEOUT'
           fail: true
       - timestamps
       - ssh-agent-credentials:
           users:
-              - 'jenkins-gerrit-credentials'
+            - 'jenkins-gerrit-credentials'
       - jclouds:
-          single-use: True
+          single-use: true
       - openstack:
-          single-use: True
+          single-use: true
+# [end] Keep 'wrapper' entries ordered alphabetically, please.
 
-###### TRIGGERS
+#### TRIGGERS
+# Keep 'trigger' entries ordered alphabetically, please.
 - trigger:
-    name: gerrit-trigger-patch-submitted
+    name: gerrit-trigger-build
+    # Comes from hicn, some verify jobs wait for build to pass.
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - patchset-created-event:
-                    exclude-drafts: 'false'
-                    exclude-trivial-rebase: 'false'
-                    exclude-no-code-change: 'false'
-                - draft-published-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'recheck'
-                - comment-added-contains-event:
-                    comment-contains-value: 'reverify'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'build_success-{stream}-{os}-{executor-arch}'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
 
 - trigger:
-    name: gerrit-trigger-trivial-patch-submitted
+    name: gerrit-trigger-checkstyle
+    # Comes from VPP, some verify jobs wait for checkstyle to pass.
+    # This macro is to be used for such verify jobs which are voting.
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - patchset-created-event:
-                    exclude-drafts: 'false'
-                    exclude-trivial-rebase: 'false'
-                    exclude-no-code-change: 'true'
-                - draft-published-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'recheck'
-                - comment-added-contains-event:
-                    comment-contains-value: 'reverify'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'checkstyle_success'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
 
 - trigger:
-    name: gerrit-trigger-os-trivial-patch-submitted
+    name: gerrit-trigger-checkstyle-nonvoting
+    # Comes from VPP, some verify jobs wait for checkstyle to pass.
+    # This macro is to be used for such verify jobs which are non-voting.
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - comment-added-contains-event:
-                    comment-contains-value: 'os-check'
-                - comment-added-contains-event:
-                    comment-contains-value: 'os-verify'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'checkstyle_success'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: true
+            failed: true
+            unstable: true
+            notbuilt: true
+          override-votes: true
+          gerrit-build-successful-verified-value: 1
+          gerrit-build-failed-verified-value: 1
+          gerrit-build-unstable-verified-value: 1
+          gerrit-build-notbuilt-verified-value: 1
 
 - trigger:
-    name: gerrit-trigger-trivial-patch-submitted-skip-vote
+    name: gerrit-trigger-csit-perftest
+    # Manual trigger common for csit-vpp and vpp-csit perf jobs.
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: '{trigger-word}'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{project}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: '{skip-vote}'
+            failed: '{skip-vote}'
+            unstable: '{skip-vote}'
+            notbuilt: '{skip-vote}'
+
+- trigger:
+    name: gerrit-trigger-csit-vpp-devicetest-full
+    # Comes from CSIT, for automatic jobs running device tests with VPP builds.
+    # The job acts as an automatic verify job for CSIT contributions.
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - patchset-created-event:
-                    exclude-drafts: 'false'
-                    exclude-trivial-rebase: 'false'
-                    exclude-no-code-change: 'true'
-                - draft-published-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'recheck'
-                - comment-added-contains-event:
-                    comment-contains-value: 'reverify'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
-            skip-vote:
-                successful: true
-                failed: true
-                unstable: true
-                notbuilt: true
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            # The main way the job is triggered automatically on patch upload.
+            # Gated by tox job, so we do not spend resources on WiP changes.
+            - comment-added-contains-event:
+                comment-contains-value: 'tox_success'
+            # Manual trigger to allow testing WiP changes with selected tags.
+            - comment-added-contains-event:
+                comment-contains-value: 'csit-devicetest'
+            # A comment with "recheck" restarts tox job, so no condition here.
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{project}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: '{skip-vote}'
+            failed: '{skip-vote}'
+            unstable: '{skip-vote}'
+            notbuilt: '{skip-vote}'
+
+- trigger:
+    name: gerrit-trigger-csit-vpp-devicetest-manual
+    # Comes from CSIT, for manual jobs running "device" tests with VPP builds.
+    # The job acts as a manual (optional) verify job for CSIT contributions.
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'csit-devicetest'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{project}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: '{skip-vote}'
+            failed: '{skip-vote}'
+            unstable: '{skip-vote}'
+            notbuilt: '{skip-vote}'
 
 - trigger:
     name: gerrit-trigger-manually-triggered
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - comment-added-contains-event:
-                    comment-contains-value: '{comment-trigger-value}'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: '{comment-trigger-value}'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
 
 - trigger:
     name: gerrit-trigger-patch-merged
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - change-merged-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'remerge'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
-            # Force Jenkins always vote the values it should already have voted
-            # during the prior verify phase
-            override-votes: true
-            gerrit-build-started-verified-value: 1
-            gerrit-build-successful-verified-value: 1
-            gerrit-build-failed-verified-value: 1
-            gerrit-build-unstable-verified-value: 1
-            gerrit-build-notbuilt-verified-value: 1
-            gerrit-build-started-codereview-value: 0
-            gerrit-build-successful-codereview-value: 0
-            gerrit-build-failed-codereview-value: 0
-            gerrit-build-unstable-codereview-value: 0
-            gerrit-build-notbuilt-codereview-value: 0
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - change-merged-event
+            - comment-added-contains-event:
+                comment-contains-value: 'remerge'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          # Force Jenkins always vote the values it should already have voted
+          # during the prior verify phase
+          override-votes: true
+          gerrit-build-started-verified-value: 1
+          gerrit-build-successful-verified-value: 1
+          gerrit-build-failed-verified-value: 1
+          gerrit-build-unstable-verified-value: 1
+          gerrit-build-notbuilt-verified-value: 1
+          gerrit-build-started-codereview-value: 0
+          gerrit-build-successful-codereview-value: 0
+          gerrit-build-failed-codereview-value: 0
+          gerrit-build-unstable-codereview-value: 0
+          gerrit-build-notbuilt-codereview-value: 0
+
+- trigger:
+    name: gerrit-trigger-patch-submitted
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - patchset-created-event:
+                exclude-drafts: 'true'
+                exclude-trivial-rebase: 'false'
+                exclude-no-code-change: 'false'
+            - draft-published-event
+            - comment-added-contains-event:
+                comment-contains-value: 'recheck'
+            - comment-added-contains-event:
+                comment-contains-value: 'reverify'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
 
 - trigger:
     name: gerrit-trigger-os-patch-merged
     triggers:
-        - gerrit:
-            server-name: 'Primary'
-            trigger-on:
-                - comment-added-contains-event:
-                    comment-contains-value: 'os-merge'
-            projects:
-                - project-compare-type: 'ANT'
-                  project-pattern: '{name}'
-                  branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
-            # Force Jenkins always vote the values it should already have voted
-            # during the prior verify phase
-            override-votes: true
-            gerrit-build-started-verified-value: 1
-            gerrit-build-successful-verified-value: 1
-            gerrit-build-failed-verified-value: 1
-            gerrit-build-unstable-verified-value: 1
-            gerrit-build-notbuilt-verified-value: 1
-            gerrit-build-started-codereview-value: 0
-            gerrit-build-successful-codereview-value: 0
-            gerrit-build-failed-codereview-value: 0
-            gerrit-build-unstable-codereview-value: 0
-            gerrit-build-notbuilt-codereview-value: 0
-
-# Publishers
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'os-merge'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          # Force Jenkins always vote the values it should already have voted
+          # during the prior verify phase
+          override-votes: true
+          gerrit-build-started-verified-value: 1
+          gerrit-build-successful-verified-value: 1
+          gerrit-build-failed-verified-value: 1
+          gerrit-build-unstable-verified-value: 1
+          gerrit-build-notbuilt-verified-value: 1
+          gerrit-build-started-codereview-value: 0
+          gerrit-build-successful-codereview-value: 0
+          gerrit-build-failed-codereview-value: 0
+          gerrit-build-unstable-codereview-value: 0
+          gerrit-build-notbuilt-codereview-value: 0
+
+- trigger:
+    name: gerrit-trigger-os-trivial-patch-submitted
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'os-check'
+            - comment-added-contains-event:
+                comment-contains-value: 'os-verify'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+
+- trigger:
+    name: gerrit-trigger-trivial-patch-submitted
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - patchset-created-event:
+                exclude-drafts: 'true'
+                exclude-trivial-rebase: 'false'
+                exclude-no-code-change: 'true'
+            - draft-published-event
+            - comment-added-contains-event:
+                comment-contains-value: 'recheck'
+            - comment-added-contains-event:
+                comment-contains-value: 'reverify'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+
+- trigger:
+    name: gerrit-trigger-trivial-patch-submitted-skip-vote
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - patchset-created-event:
+                exclude-drafts: 'true'
+                exclude-trivial-rebase: 'false'
+                exclude-no-code-change: 'true'
+            - draft-published-event
+            - comment-added-contains-event:
+                comment-contains-value: 'recheck'
+            - comment-added-contains-event:
+                comment-contains-value: 'reverify'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: true
+            failed: true
+            unstable: true
+            notbuilt: true
+
+- trigger:
+    name: gerrit-trigger-vpp-csit-devicetest-full
+    # Comes from VPP, for automated jobs running "device" tests with CSIT code.
+    # The job acts as an automatic verify job for VPP contributions.
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'checkstyle_success'
+            - comment-added-contains-event:
+                comment-contains-value: 'devicetest'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: '{skip-vote}'
+            failed: '{skip-vote}'
+            unstable: '{skip-vote}'
+            notbuilt: '{skip-vote}'
+
+- trigger:
+    name: gerrit-trigger-vpp-csit-devicetest-manual
+    # Comes from VPP, for manual jobs running "device" tests with CSIT code.
+    # The job acts as a manual (optional) verify job for VPP contributions.
+    triggers:
+      - gerrit:
+          server-name: 'Primary'
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: 'devicetest'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: '{name}'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+          skip-vote:
+            successful: '{skip-vote}'
+            failed: '{skip-vote}'
+            unstable: '{skip-vote}'
+            notbuilt: '{skip-vote}'
+# [end] Keep 'trigger' entries ordered alphabetically, please.
+
+#### PUBLISHERS
+# Keep 'publisher' entries ordered alphabetically, please.
 - publisher:
     name: archive-artifacts
     publishers:
-        - archive:
-            artifacts: '{artifacts}'
-            allow-empty: true
-            fingerprint: true
-            latest-only: true
+      - archive:
+          artifacts: '{artifacts}'
+          allow-empty: true
+          fingerprint: true
+          latest-only: true
 
 - publisher:
-    name: email-notification
+    name: csit-trending-failed
     publishers:
-        - email-ext:
-            recipients: 'nobody@projectrotterdam.info'
-            reply-to: ''
-            content-type: default
-            subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
-            body: |
-                $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
-
-                Check console output at $BUILD_URL to view the results.
-            unstable: true
-            fixed: true
-            send-to:
-                - developers
-                - recipients
+      - email-ext:
+          # yamllint disable-line rule:line-length
+          recipients: 'tifrank@cisco.com, csit-report+int+616+181919729795594561@lists.fd.io'
+          reply-to: ''
+          content-type: 'text'
+          subject: '{branch}: Failed tests as of $BUILD_TIMESTAMP'
+          # yamllint disable-line rule:line-length
+          body: |
+              Following tests failed in the last trending job runs, listed per testbed type.
+
+              ${{FILE,path="resources/tools/presentation/_build/_static/vpp/trending-failed-tests.txt"}}
+          failure: false
+          success: true
 
 - publisher:
-    name: jacoco-report
+    name: csit-trending-failed-job
     publishers:
-        - jacoco:
-            exec-pattern: '**/**.exec'
-            class-pattern: '**/classes'
-            source-pattern: '**/src/main/java'
-            exclusion-pattern: '**/gen**,**/generated-sources/**,**/yang-gen**,**/pax/**'
-            status-update: true
-            targets:
-                - branch:
-                    healthy: 10
-                    unhealthy: 20
-                - method:
-                    healthy: 50
-                    unhealthy: 40
+      - email-ext:
+          # yamllint disable-line rule:line-length
+          recipients: 'tifrank@cisco.com, csit-report+int+616+181919729795594561@lists.fd.io'
+          reply-to: ''
+          content-type: 'text'
+          subject: '{branch}: The build number $BUILD_NUMBER of the job $JOB_NAME failed'
+          # yamllint disable-line rule:line-length
+          body: |
+              For more information see $BUILD_URL.
+          failure: true
+          success: false
 
 - publisher:
-    name: robot-report
+    name: csit-trending-progressions
     publishers:
-        - robot:
-            output-path: '{output-path}'
-            other-files: ''
+      - email-ext:
+          # yamllint disable-line rule:line-length
+          recipients: 'tifrank@cisco.com, csit-report+int+616+181919729795594561@lists.fd.io'
+          reply-to: ''
+          content-type: 'text'
+          subject: '{branch}: Progressions as of $BUILD_TIMESTAMP'
+          # yamllint disable-line rule:line-length
+          body: |
+              Following progressions occured in the last trending job runs, listed per testbed type.
+
+              ${{FILE,path="resources/tools/presentation/_build/_static/vpp/trending-progressions.txt"}}
+          failure: false
+          success: true
 
 - publisher:
-    name: fdio-infra-shiplogs
-    # To archive things, the job will need to create an "archives" directory in
-    # the workspace and this macro will handle copying the contents of the
-    # archives directory.
+    name: csit-trending-regressions
+    publishers:
+      - email-ext:
+          # yamllint disable-line rule:line-length
+          recipients: 'tifrank@cisco.com, csit-report+int+616+181919729795594561@lists.fd.io'
+          reply-to: ''
+          content-type: 'text'
+          subject: '{branch}: Regressions as of $BUILD_TIMESTAMP'
+          # yamllint disable-line rule:line-length
+          body: |
+              Following regressions occured in the last trending job runs, listed per testbed type.
+
+              ${{FILE,path="resources/tools/presentation/_build/_static/vpp/trending-regressions.txt"}}
+          failure: false
+          success: true
+
+- publisher:
+    name: vpp-dpdk-rdma-version-mismatch
+    publishers:
+      - email-ext:
+          # NOTE: noreply@jenkins.fd.io must be a member of vpp-build@lists.fd.io
+          #       for the email to be distributed to the group members.
+          # yamllint disable-line rule:line-length
+          recipients: 'vpp-build@lists.fd.io'
+          reply-to: ''
+          content-type: 'text'
+          subject: '{branch}: vpp-dpdk-rdma-version-mismatch job failed!'
+          # yamllint disable-line rule:line-length
+          body: |
+              Build $BUILD_NUMBER of $JOB_NAME failed.
+              Check $BUILD_URL
+              console log to see if the job failed due to a package version mismatch or
+              a CI infra issue. If the failure was due to a CI infra issue, then
+              there is nothing else to be done.
+
+              However, if there was a package version mismatch, then the MLX driver
+              is NOT being built in the VPP DPDK library. Please push a gerrit change
+              with the updated package version(s) in the version matrix file, resolve
+              any build issues, and merge the change to re-enable the building of the
+              MLX DPDK driver in the VPP DPDK library.
+
+              Thanks,
+              The VPP Build Maintainers
+
+          failure: true
+          success: false
+
+- publisher:
+    name: email-notification
+    publishers:
+      - email-ext:
+          recipients: 'nobody@projectrotterdam.info'
+          reply-to: ''
+          content-type: default
+          # yamllint disable-line rule:line-length
+          subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
+          body: |
+              $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
+
+              Check console output at $BUILD_URL to view the results.
+          unstable: true
+          fixed: true
+          send-to:
+            - developers
+            - recipients
+
+- publisher:
+    name: fdio-infra-publish-docs
+    # macro to finish up a docs build.
     #
-    # Uses the build parameter ARCHIVE_ARTIFACTS if not empty to find files to
-    # archive. You can pass globstar patterns for example "**/*.xml **/*.log" as
-    # the archive pattern. This is a space separated list of files to archive.
+    # Handles the following:
+    #   - Mapping docs S3 bucket credentials for merge job docs upload
+    #   - Cleanup workspace
+    publishers:
+      - postbuildscript:
+          builders:
+            - role: BOTH
+              build-on:
+                - ABORTED
+                - FAILURE
+                - NOT_BUILT
+                - SUCCESS
+                - UNSTABLE
+              build-steps:
+                - fdio-infra-ship-docs
+          mark-unstable-if-failed: true
+      - workspace-cleanup:
+          exclude:
+            # Do not clean up *.jenkins-trigger files for jobs that use a
+            # properties file as input for triggering another build.
+            - "**/*.jenkins-trigger"
+          fail-build: false
+
+- publisher:
+    name: fdio-infra-publish-docs-7day
+    # macro to finish up a verify docs build.
+    #
+    # Handles the following:
+    #   - Mapping 7-day retention S3 bucket credentials for verify job docs upload
+    #   - Cleanup workspace
+    publishers:
+      - postbuildscript:
+          builders:
+            - role: BOTH
+              build-on:
+                - ABORTED
+                - FAILURE
+                - NOT_BUILT
+                - SUCCESS
+                - UNSTABLE
+              build-steps:
+                - fdio-infra-ship-docs-7day
+          mark-unstable-if-failed: true
+      - workspace-cleanup:
+          exclude:
+            # Do not clean up *.jenkins-trigger files for jobs that use a
+            # properties file as input for triggering another build.
+            - "**/*.jenkins-trigger"
+          fail-build: false
+
+- publisher:
+    name: fdio-infra-publish
+    # macro to finish up a build.
     #
-    # Also ensure that the workspace is cleaned up at the end of the build.
+    # Handles the following:
+    #   - Shipping logs to S3 logs repository
+    #   - Cleanup workspace
     publishers:
       - postbuildscript:
           builders:
-            - shell: !include-raw: include-raw-deploy-archives.sh
-            - maven-target:
-                maven-version: '{maven-version}'
-                pom: '.archives/deploy-archives.xml'
-                goals: 'clean deploy -V -B -q -Dmaven.repo.local=/tmp/r'
-                settings: 'jenkins-log-archives-settings'
-                settings-type: cfp
-                global-settings: 'global-settings'
-                global-settings-type: cfp
-            - description-setter:
-                regexp: '^Build logs: .*'
-          script-only-if-succeeded: false
-          script-only-if-failed: false
+            - role: BOTH
+              build-on:
+                - ABORTED
+                - FAILURE
+                - NOT_BUILT
+                - SUCCESS
+                - UNSTABLE
+              build-steps:
+                - shell: !include-raw: scripts/post_build_executor_info.sh
+                - shell: !include-raw: scripts/post_build_deploy_archives.sh
+                - fdio-infra-ship-logs
           mark-unstable-if-failed: true
       - workspace-cleanup:
+          exclude:
+            # Do not clean up *.jenkins-trigger files for jobs that use a
+            # properties file as input for triggering another build.
+            - "**/*.jenkins-trigger"
           fail-build: false
 
+- publisher:
+    name: jacoco-report
+    publishers:
+      - jacoco:
+          exec-pattern: '**/**.exec'
+          class-pattern: '**/classes'
+          source-pattern: '**/src/main/java'
+          # yamllint disable-line rule:line-length
+          exclusion-pattern: '**/gen**,**/generated-sources/**,**/yang-gen**,**/pax/**'
+          status-update: true
+          targets:
+            - branch:
+              healthy: 10
+              unhealthy: 20
+            - method:
+              healthy: 50
+              unhealthy: 40
+
 - publisher:
     name: retry-build-on-builder-error
     publishers:
       - naginator:
           max-failed-builds: 1
 
-###### BUILDERS
+- publisher:
+    name: robot-report
+    publishers:
+      - robot:
+          output-path: '{output-path}'
+          other-files: ''
+
+# [end] Keep 'publisher' entries ordered alphabetically, please.
+
+#### BUILDERS
+# Keep 'builder' entries ordered alphabetically, please.
 - builder:
     name: ci-management-check-unicode
     builders:
-        - shell: |
-            $WORKSPACE/scripts/check-unicode.sh jjb/
+      - shell: |
+          $WORKSPACE/scripts/check-unicode.sh jjb/
 
 - builder:
-    name: provide-maven-settings
+    name: fdio-infra-ship-docs
     builders:
-        - config-file-provider:
-            files:
-                - file-id: '{global-settings-file}'
-                  variable: 'GLOBAL_SETTINGS_FILE'
-                - file-id: '{settings-file}'
-                  variable: 'SETTINGS_FILE'
+      - config-file-provider:
+          files:
+            - file-id: "jenkins-s3-docs-ship"
+              target: $HOME/.aws/credentials
+      - shell: !include-raw:
+          - scripts/terraform_s3_docs_ship.sh
+      - shell: !include-raw:
+          - scripts/publish_docs.sh
+      - shell: !include-raw:
+          - ../global-jjb/shell/logs-clear-credentials.sh
 
-- property:
-    name: fdio-infra-properties
-    properties:
-        - build-discarder:
-            days-to-keep: '{build-days-to-keep}'
-            num-to-keep: '{build-num-to-keep}'
+- builder:
+    name: fdio-infra-ship-docs-7day
+    builders:
+      - config-file-provider:
+          files:
+            - file-id: "jenkins-s3-vpp-docs-ship"
+              target: $HOME/.aws/credentials
+      - shell: !include-raw:
+          - scripts/terraform_s3_docs_ship.sh
+      - shell: !include-raw:
+          - scripts/publish_docs.sh
+      - shell: !include-raw:
+          - ../global-jjb/shell/logs-clear-credentials.sh
 
+- builder:
+    name: fdio-infra-ship-logs
+    builders:
+      - config-file-provider:
+          files:
+            - file-id: "jenkins-s3-log-ship"
+              target: $HOME/.aws/credentials
+      - shell: !include-raw:
+          - scripts/publish_library_py.sh
+      - shell: !include-raw:
+          - scripts/publish_logs.sh
+      - shell: !include-raw:
+          - ../global-jjb/shell/logs-clear-credentials.sh
+      - description-setter:
+          regexp: "(^S3 build logs: .*)"
 
 - builder:
     name: packer-validate
     builders:
-        - config-file-provider:
-            files:
-                - file-id: 'packer-cloud-env'
-                  variable: 'CLOUDENV'
-        - shell: |
-            #!/bin/bash
-            cd packer
-            varfiles="../packer/vars/*"
-            templates="../packer/templates/*"
-            provision="../packer/provision/*.sh"
-            for v in $varfiles; do
-                [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
-                for t in $templates; do
-                    export PACKER_LOG="yes" && \
-                    export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
-                                packer.io validate -var-file=$CLOUDENV \
-                                -var-file=$v $t
-                    if [ $? -ne 0 ]; then
-                        break
-                    fi
-                done
-            done
-            for p in $provision; do
-                /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
-                if [ $? -ne 0 ]; then
-                    break
-                fi
-            done
-
+      - config-file-provider:
+          files:
+            - file-id: 'packer-cloud-env'
+              variable: 'CLOUDENV'
+      # yamllint disable rule:line-length
+      - shell: |
+          #!/bin/bash
+          cd packer
+          varfiles="../packer/vars/*"
+          templates="../packer/templates/*"
+          provision="../packer/provision/*.sh"
+          for v in $varfiles; do
+              [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
+              for t in $templates; do
+                  export PACKER_LOG="yes" && \
+                  export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
+                              packer.io validate -var-file=$CLOUDENV \
+                              -var-file=$v $t
+                  if [ $? -ne 0 ]; then
+                     break
+                  fi
+              done
+          done
+          for p in $provision; do
+              /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
+              if [ $? -ne 0 ]; then
+                 break
+              fi
+          done
+      # yamllint enable
 
 - builder:
     name: packer-build
     builders:
-        - config-file-provider:
-            files:
-                - file-id: 'packer-cloud-env'
-                  variable: 'CLOUDENV'
-        - shell: |
-            #!/bin/bash
-            cd packer
-            export PACKER_LOG="yes" && \
-            export PACKER_LOG_PATH="packer-build.log" && \
-                        packer.io build -var-file=$CLOUDENV \
-                         -var-file=../packer/vars/{platform}.json \
-                         ../packer/templates/{template}.json
+      - config-file-provider:
+          files:
+            - file-id: 'packer-cloud-env'
+              variable: 'CLOUDENV'
+      - shell: |
+          #!/bin/bash
+          cd packer
+          export PACKER_LOG="yes" && \
+          export PACKER_LOG_PATH="packer-build.log" && \
+                      packer.io build -var-file=$CLOUDENV \
+                      -var-file=../packer/vars/{platform}.json \
+                      ../packer/templates/{template}.json
+
+- builder:
+    name: provide-maven-settings
+    builders:
+      - config-file-provider:
+          files:
+            - file-id: '{global-settings-file}'
+              variable: 'GLOBAL_SETTINGS_FILE'
+            - file-id: '{settings-file}'
+              variable: 'SETTINGS_FILE'
+# [end] Keep 'builder' entries ordered alphabetically, please.