jjb: lttng-tools/babeltrace: smokebuild proof-of-concept
authorMichael Jeanson <mjeanson@efficios.com>
Wed, 26 Apr 2023 14:17:27 +0000 (10:17 -0400)
committerMichael Jeanson <mjeanson@efficios.com>
Fri, 28 Apr 2023 15:46:56 +0000 (11:46 -0400)
Implement basic 'smoketest' jobs integrated with gerrit.

smokebuild: run a single amd64 oot-dist build without running the tests
check-format: run clang-format on the patch
clang-tidy: run clang-tidy on the files touched by the patch

Change-Id: Id2e23fdf8027f5776a36b962b52c35da8629cf87
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
jobs/babeltrace.yaml
jobs/lttng-tools.yaml
jobs/lttng-ust-benchmarks.yaml
jobs/lttng-ust-java-tests.yaml
scripts/babeltrace/build.sh
scripts/babeltrace/check-format.sh [deleted file]
scripts/common/check-format.sh [new file with mode: 0644]
scripts/lttng-tools/build.sh

index 17821d69e035770098e731993b2e3cbd68f15343..f1843a4ac31e0c563d127280a1c74c4d3b818d8e 100644 (file)
                 <io.jenkins.plugins.analysis.core.util.QualityGate>
                   <threshold>1</threshold>
                   <type>TOTAL</type>
-                  <status>FAILED</status>
+                  <status>{warnings_status}</status>
                 </io.jenkins.plugins.analysis.core.util.QualityGate>
               </qualityGates>
               <trendChartType>AGGREGATION_TOOLS</trendChartType>
 
     builders:
       - shell:
-         !include-raw-escape: scripts/babeltrace/check-format.sh
+         !include-raw-escape: scripts/common/check-format.sh
 
     properties:
       - inject:
           days-to-keep: 1
 
     publishers:
+      - archive:
+          artifacts: 'clang-format-fixes.diff'
+          allow-empty: true
       - workspace-cleanup: *babeltrace_publisher_workspace-cleanup_defaults
 
 - job-template:
       - stable-2.0
       - master
     jobs:
+    ## Master ##
       - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: master
           buildtype: build
           platforms: !!python/tuple [bionic-amd64]
           builds: !!python/tuple [std, oot, dist, oot-dist]
           confs: !!python/tuple [std, static, prod, min]
           filter: ''
           touchstone: ''
+          warnings_status: FAILED
       - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: master
           buildtype: portbuild
           platforms: !!python/tuple [deb11-armhf, deb11-arm64, deb11-ppc64el, deb11-i386]
           builds: !!python/tuple [std]
           confs: !!python/tuple [std]
           filter: ''
           touchstone: ''
+          warnings_status: FAILED
       - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: master
           buildtype: macosbuild
           platforms: !!python/tuple [macos-amd64, macos-arm64]
           builds: !!python/tuple [std]
           confs: !!python/tuple [std, prod]
           filter: ''
           touchstone: ''
+          warnings_status: FAILED
       - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: master
           buildtype: winbuild
           platforms: !!python/tuple [cygwin64, msys2-mingw64]
           builds: !!python/tuple [std]
           confs: !!python/tuple [std]
           filter: ''
           touchstone: ''
-      - 'dev_review_babeltrace_{version}_pylint'
+          warnings_status: FAILED
+
+      ## Stable 2.0 ##
+      - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: stable-2.0
+          buildtype: build
+          platforms: !!python/tuple [bionic-amd64]
+          builds: !!python/tuple [std, oot, dist, oot-dist]
+          confs: !!python/tuple [std, static, prod, min]
+          filter: ''
+          touchstone: ''
+          warnings_status: WARNING
+      - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: stable-2.0
+          buildtype: portbuild
+          platforms: !!python/tuple [deb11-armhf, deb11-arm64, deb11-ppc64el, deb11-i386]
+          builds: !!python/tuple [std]
+          confs: !!python/tuple [std]
+          filter: ''
+          touchstone: ''
+          warnings_status: WARNING
+      - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: stable-2.0
+          buildtype: macosbuild
+          platforms: !!python/tuple [macos-amd64, macos-arm64]
+          builds: !!python/tuple [std]
+          confs: !!python/tuple [std, prod]
+          filter: ''
+          touchstone: ''
+          warnings_status: WARNING
+      - 'dev_review_babeltrace_{version}_{buildtype}':
+          version: stable-2.0
+          buildtype: winbuild
+          platforms: !!python/tuple [cygwin64, msys2-mingw64]
+          builds: !!python/tuple [std]
+          confs: !!python/tuple [std]
+          filter: ''
+          touchstone: ''
+          warnings_status: WARNING
+
+      ## ALL ##
       - 'dev_review_babeltrace_{version}_smokebuild':
           platforms: !!python/tuple [jammy-amd64]
-          builds: !!python/tuple [std]
+          builds: !!python/tuple [oot-dist]
           confs: !!python/tuple [std]
           filter: ''
           touchstone: ''
       - 'dev_review_babeltrace_{version}_check-format'
+      - 'dev_review_babeltrace_{version}_pylint'
 
 
 - project:
index a8c267e98b0fb28c73eb1d8256dc7849e8387890..bce2d8ba4bd9b5ed68043f7480d5967835b4a722 100644 (file)
           cron: "@hourly"
 
     properties:
-      - inject:
+      - inject: &lttng-tools_property_inject_defaults
           properties-content: |
             PROJECT_NAME=lttng-tools
-      - build-discarder:
+      - build-discarder: &lttng-tools_property_build-discarder_defaults
           num-to-keep: 20
           artifact-num-to-keep: 2
-      - github:
+      - github: &lttng-tools_property_github_defaults
           url: https://github.com/{github_user}/lttng-tools
 
 ## Anchors
          type: user-defined
          name: babeltrace_version
          values: '{obj:babelversions}'
-      - axis: &lttng-tools_matrix_axis_test_type
-         type: user-defined
-         name: test_type
-         values: '{obj:testtypes}'
 
 - _lttng-tools_matrix_axes_rootbuild: &lttng-tools_matrix_axes_rootbuild
     name: 'lttng-tools_matrix_axes_rootbuild'
       - axis: *lttng-tools_matrix_axis_build
       - axis: *lttng-tools_matrix_axis_liburcu_version
       - axis: *lttng-tools_matrix_axis_babeltrace_version
-      - axis: *lttng-tools_matrix_axis_test_type
 
 
 ## Builders Anchors
     name: '{job_prefix}lttng-tools_{version}_long_regression'
     defaults: lttng-tools
 
+    properties:
+      - inject:
+          properties-content: |
+            PROJECT_NAME=lttng-tools
+            LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION=yes
+      - build-discarder: *lttng-tools_property_build-discarder_defaults
+      - github: *lttng-tools_property_github_defaults
+
     wrappers:
       - ansicolor: *lttng-tools_wrapper_ansicolor_defaults
       - timeout:
                   branch-pattern: '{version}'
 
     properties:
-      - inject:
-          properties-content: |
-            PROJECT_NAME=lttng-tools
+      - inject: *lttng-tools_property_inject_defaults
       - build-discarder:
           days-to-keep: 1
       - throttle:
       - workspace-cleanup: *lttng-tools_publisher_workspace-cleanup_defaults
 
 - job-template:
-    name: dev_review_lttng-tools_{version}_rootbuild
+    name: dev_review_lttng-tools_{version}_smokebuild
     defaults: lttng-tools
     concurrent: true
 
       - git: *lttng-tools_scm_git_review
 
     triggers:
-      - gerrit: *lttng-tools_trigger_gerrit_default
+      - gerrit: &lttng-tools_trigger_gerrit_smoke_1
+          trigger-on:
+            - comment-added-event:
+                approval-category: 'Smoke-Build'
+                approval-value: 1
+          projects:
+            - project-compare-type: 'PLAIN'
+              project-pattern: 'lttng-tools'
+              branches:
+                - branch-compare-type: 'PLAIN'
+                  branch-pattern: '{version}'
+          skip-vote:
+            successful: true
+            failed: true
+            unstable: true
+            notbuilt: true
+            aborted: true
 
     properties:
       - inject:
           properties-content: |
             PROJECT_NAME=lttng-tools
+            LTTNG_TOOLS_RUN_TESTS=no
+      - build-discarder:
+          days-to-keep: 1
+
+    <<: *lttng-tools_matrix_axes_defaults
+    <<: *lttng-tools_builders_review
+
+    publishers:
+      - raw: *lttng-tools_publisher_warnings-ng_defaults
+      - workspace-cleanup: *lttng-tools_publisher_workspace-cleanup_defaults
+
+- job-template:
+    name: dev_review_lttng-tools_{version}_clang-tidy
+    defaults: lttng-tools
+    concurrent: true
+
+    scm:
+      - git: *lttng-tools_scm_git_review
+
+    triggers:
+      - gerrit: &lttng-tools_trigger_gerrit_smoke_2
+          trigger-on:
+            - comment-added-event:
+                approval-category: 'Smoke-Build'
+                approval-value: 2
+          projects:
+            - project-compare-type: 'PLAIN'
+              project-pattern: 'lttng-tools'
+              branches:
+                - branch-compare-type: 'PLAIN'
+                  branch-pattern: '{version}'
+          skip-vote:
+            successful: true
+            failed: true
+            unstable: true
+            notbuilt: true
+            aborted: true
+
+    properties:
+      - inject:
+          properties-content: |
+            PROJECT_NAME=lttng-tools
+            LTTNG_TOOLS_MAKE_INSTALL=no
+            LTTNG_TOOLS_MAKE_CLEAN=no
+            LTTNG_TOOLS_RUN_TESTS=no
+            LTTNG_TOOLS_GEN_COMPILE_COMMANDS=yes
+            LTTNG_TOOLS_CLANG_TIDY=yes
+      - build-discarder:
+          days-to-keep: 1
+
+    <<: *lttng-tools_matrix_axes_defaults
+    <<: *lttng-tools_builders_review
+
+    publishers:
+      - raw:
+          xml: |
+            <io.jenkins.plugins.analysis.core.steps.IssuesRecorder plugin="warnings-ng">
+              <analysisTools>
+                <io.jenkins.plugins.analysis.warnings.ClangTidy>
+                  <id/>
+                  <name/>
+                  <jenkins plugin="plugin-util-api"/>
+                  <pattern/>
+                  <reportEncoding/>
+                  <skipSymbolicLinks>false</skipSymbolicLinks>
+                </io.jenkins.plugins.analysis.warnings.ClangTidy>
+              </analysisTools>
+              <sourceCodeEncoding/>
+              <sourceDirectory/>
+              <sourceDirectories/>
+              <ignoreQualityGate>false</ignoreQualityGate>
+              <ignoreFailedBuilds>true</ignoreFailedBuilds>
+              <failOnError>false</failOnError>
+              <healthy>0</healthy>
+              <unhealthy>0</unhealthy>
+              <minimumSeverity plugin="analysis-model-api">
+                <name>LOW</name>
+              </minimumSeverity>
+              <filters/>
+              <isEnabledForFailure>true</isEnabledForFailure>
+              <isAggregatingResults>true</isAggregatingResults>
+              <isBlameDisabled>false</isBlameDisabled>
+              <skipPublishingChecks>true</skipPublishingChecks>
+              <publishAllIssues>false</publishAllIssues>
+              <qualityGates>
+                <io.jenkins.plugins.analysis.core.util.QualityGate>
+                  <status>FAILED</status>
+                  <threshold>1</threshold>
+                  <type>TOTAL</type>
+                </io.jenkins.plugins.analysis.core.util.QualityGate>
+              </qualityGates>
+              <trendChartType>AGGREGATION_TOOLS</trendChartType>
+              <scm/>
+            </io.jenkins.plugins.analysis.core.steps.IssuesRecorder>
+      - archive:
+          artifacts: 'clang-tidy-fixes.diff'
+          allow-empty: true
+      - workspace-cleanup: *lttng-tools_publisher_workspace-cleanup_defaults
+
+- job-template:
+    name: dev_review_lttng-tools_{version}_rootbuild
+    defaults: lttng-tools
+    concurrent: true
+
+    scm:
+      - git: *lttng-tools_scm_git_review
+
+    triggers:
+      - gerrit: *lttng-tools_trigger_gerrit_default
+
+    properties:
+      - inject: *lttng-tools_property_inject_defaults
       - build-discarder:
           days-to-keep: 1
       - throttle:
       - archive: *lttng-tools_publisher_archive_defaults
       - workspace-cleanup: *lttng-tools_publisher_workspace-cleanup_defaults
 
+- job-template:
+    name: 'dev_review_lttng-tools_{version}_check-format'
+    defaults: lttng-tools
+    concurrent: true
+
+    scm:
+      - git: *lttng-tools_scm_git_review
+
+    triggers:
+      - gerrit: *lttng-tools_trigger_gerrit_smoke_1
+
+    node: 'jammy-amd64'
+
+    builders:
+      - shell:
+         !include-raw-escape: scripts/common/check-format.sh
+
+    properties:
+      - inject: *lttng-tools_property_inject_defaults
+      - build-discarder:
+          days-to-keep: 1
+
+    publishers:
+      - archive:
+          artifacts: 'clang-format-fixes.diff'
+          allow-empty: true
+      - workspace-cleanup: *lttng-tools_publisher_workspace-cleanup_defaults
+
 - job-template:
     name: lttng-tools_{version}_release
     defaults: lttng-tools
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0, master]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="master" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0, master]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="master" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'lttng-tools_{version}_winbuild':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_long_regression':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [full]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_rootbuild_i386':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="i386-rootnode" && platform=="deb11-i386")'
           touchstone: ''
       - 'lttng-tools_{version}_scan-build':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="stable-2.0" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="stable-2.0" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'lttng-tools_{version}_winbuild':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_long_regression':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [full]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
       - 'lttng-tools_{version}_release':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="stable-2.0" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || ((babeltrace_version=="stable-2.0" && (conf=="std" || conf=="agents" || conf=="no-ust")))'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'lttng-tools_{version}_winbuild':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_long_regression':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [full]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
       - 'lttng-tools_{version}_release':
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || (conf=="std" || conf=="agents" || conf=="no-ust")'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [no-ust, agents]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents, debug-rcu, tls_fallback]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: '(build=="std") || (conf=="std" || conf=="agents" || conf=="no-ust")'
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [no-ust, agents]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - '{job_prefix}lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0, master]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-1.5, master]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [relayd-only]
           urcuversions: !!python/tuple [master]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0, master]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0, master]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.11]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_{user}_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.9]
           babelversions: !!python/tuple [stable-1.5]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.14] # Baseline is stable-0.14 for C++ support
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_review_lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.14] # Baseline is stable-0.14 for C++ support
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
+      - 'dev_review_lttng-tools_{version}_smokebuild':
+          version: master
+          buildtype: linuxbuild
+          platforms: !!python/tuple [jammy-amd64]
+          builds: !!python/tuple [oot-dist]
+          confs: !!python/tuple [agents]
+          urcuversions: !!python/tuple [stable-0.14] # Baseline is stable-0.14 for C++ support
+          babelversions: !!python/tuple [stable-2.0]
+          filter: ''
+          touchstone: ''
+      - 'dev_review_lttng-tools_{version}_clang-tidy':
+          version: master
+          buildtype: linuxbuild
+          platforms: !!python/tuple [jammy-amd64]
+          builds: !!python/tuple [std]
+          confs: !!python/tuple [agents]
+          urcuversions: !!python/tuple [stable-0.14] # Baseline is stable-0.14 for C++ support
+          babelversions: !!python/tuple [stable-2.0]
+          filter: ''
+          touchstone: ''
+      - 'dev_review_lttng-tools_{version}_check-format':
+          version: master
 
     ## Stable 2.13 ##
       - 'dev_review_lttng-tools_{version}_{buildtype}':
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_review_lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
 
           confs: !!python/tuple [std, no-ust, agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: ''
           touchstone: ''
       - 'dev_review_lttng-tools_{version}_rootbuild':
           confs: !!python/tuple [agents]
           urcuversions: !!python/tuple [stable-0.13]
           babelversions: !!python/tuple [stable-2.0]
-          testtypes: !!python/tuple [base]
           filter: '(node=="amd64-rootnode" && platform=="bionic-amd64")'
           touchstone: ''
 
index 9bd2bfa9ca78684f14ce56f2a97130c8d55feda3..0c73948bb0392df22e86134c5068a0c59df278a5 100644 (file)
@@ -64,7 +64,7 @@
           target: 'deps/babeltrace'
           do-not-fingerprint: true
       - copyartifact:
-          project: lttng-tools_master_build/platform=bionic-amd64,babeltrace_version={babeltrace_version},build=std,conf=agents,liburcu_version=master,test_type=base
+          project: lttng-tools_master_build/platform=bionic-amd64,babeltrace_version={babeltrace_version},build=std,conf=agents,liburcu_version=master
           which-build: last-successful
           stable: false
           filter: 'build/**'
index 166032c461a0d558adcfaf7ba3ca53ca427fe906..030944460feab028b4ff0eb4c90de23bfe0bacd6 100644 (file)
@@ -84,7 +84,7 @@
           target: 'deps'
           do-not-fingerprint: true
       - copyartifact:
-          project: lttng-tools_{version}_build/babeltrace_version={babeltrace_version},liburcu_version={liburcu_version},platform=${{platform}},conf=agents,build=std,test_type=base
+          project: lttng-tools_{version}_build/babeltrace_version={babeltrace_version},liburcu_version={liburcu_version},platform=${{platform}},conf=agents,build=std
           which-build: last-successful
           stable: false
           filter: 'build/**'
index 91681d01e39ac4c3c918671cd0c8d5836ee5300a..ae13afa55a96bf7b4afaf78b55d1419eefaaa9da 100755 (executable)
@@ -1,20 +1,8 @@
 #!/bin/bash
 #
-# Copyright (C) 2015 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
-# Copyright (C) 2016-2020 Michael Jeanson <mjeanson@efficios.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# SPDX-FileCopyrightText: 2015 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
+# SPDX-FileCopyrightText: 2016-2023 Michael Jeanson <mjeanson@efficios.com>
+# SPDX-License-Identifier: GPL-2.0-or-later
 
 set -exu
 
@@ -82,25 +70,50 @@ verne() {
     [ "$res" -ne "0" ]
 }
 
+print_header() {
+    set +x
+
+    local message=" $1 "
+    local message_len
+    local padding_len
+
+    message_len="${#message}"
+    padding_len=$(( (80 - (message_len)) / 2 ))
+
+    printf '\n'; printf -- '#%.0s' {1..80}; printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' $(seq 1 $padding_len); printf '%s' "$message"; printf -- '#%.0s' $(seq 1 $padding_len); printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' {1..80}; printf '\n\n'
+
+    set -x
+}
+
 failed_configure() {
     # Assume we are in the configured build directory
-    echo "#################### BEGIN config.log ####################"
+    print_header "BEGIN config.log"
     cat config.log
-    echo "#################### END config.log ####################"
+    print_header "END config.log"
     exit 1
 }
 
+print_header "Babeltrace build script starting"
 
 # Required variables
 WORKSPACE=${WORKSPACE:-}
 
+# Axis
 platform=${platform:-}
 conf=${conf:-}
 build=${build:-}
 cc=${cc:-}
 
-# Controls if the tests are run
-BABELTRACE_RUN_TESTS="${BABELTRACE_RUN_TESTS:=yes}"
+# Build steps that can be overriden by the environment
+BABELTRACE_MAKE_INSTALL="${BABELTRACE_MAKE_INSTALL:-yes}"
+BABELTRACE_MAKE_CLEAN="${BABELTRACE_MAKE_CLEAN:-yes}"
+BABELTRACE_GEN_COMPILE_COMMANDS="${BABELTRACE_GEN_COMPILE_COMMANDS:-no}"
+BABELTRACE_RUN_TESTS="${BABELTRACE_RUN_TESTS:-yes}"
+BABELTRACE_CLANG_TIDY="${BABELTRACE_CLANG_TIDY:-no}"
 
 SRCDIR="$WORKSPACE/src/babeltrace"
 TMPDIR="$WORKSPACE/tmp"
@@ -117,12 +130,21 @@ if [[ ( -f /etc/redhat-release || -f /etc/products.d/SLES.prod || -f /etc/yocto-
     fi
 fi
 
+exit_status=0
+
+# Use bear to generate compile_commands.json when enabled
+BEAR=""
+if [ "$BABELTRACE_GEN_COMPILE_COMMANDS" = "yes" ]; then
+       BEAR="bear"
+fi
+
 # Create tmp directory
 rm -rf "$TMPDIR"
 mkdir -p "$TMPDIR"
 
 export TMPDIR
 export CFLAGS="-g -O2"
+export CXXFLAGS="-g -O2"
 
 # Set compiler variables
 case "$cc" in
@@ -144,16 +166,12 @@ clang-*)
     ;;
 *)
     if [ "x$cc" != "x" ]; then
-           export CC="$cc"
+        echo ""
+        exit 1
     fi
     ;;
 esac
 
-if [ "x${CC:-}" != "x" ]; then
-    echo "Selected compiler:"
-    "$CC" -v
-fi
-
 # Set platform variables
 case "$platform" in
 macos*)
@@ -190,6 +208,7 @@ freebsd*)
 esac
 
 # Print build env details
+print_header "Build environment details"
 print_os || true
 print_tooling || true
 
@@ -197,6 +216,7 @@ print_tooling || true
 cd "$SRCDIR"
 
 # Run bootstrap in the source directory prior to configure
+print_header "Bootstrap autotools"
 ./bootstrap
 
 # Get source version from configure script
@@ -210,17 +230,17 @@ export BABELTRACE_MINIMAL_LOG_LEVEL=TRACE
 
 # Set configure options and environment variables for each build
 # configuration.
-CONF_OPTS=("--prefix=$PREFIX" "--libdir=$PREFIX/$LIBDIR_ARCH")
+CONF_OPTS=("--prefix=$PREFIX" "--libdir=$PREFIX/$LIBDIR_ARCH" "--disable-maintainer-mode")
 
 # -Werror is enabled by default in stable-2.0 but won't be in 2.1
 # Explicitly disable it for consistency.
 if vergte "$PACKAGE_VERSION" "2.0"; then
-       CONF_OPTS+=("--disable-Werror")
+    CONF_OPTS+=("--disable-Werror")
 fi
 
 case "$conf" in
 static)
-    echo "Static lib only configuration"
+    print_header "Conf: Static lib only"
 
     CONF_OPTS+=("--enable-static" "--disable-shared")
 
@@ -230,7 +250,7 @@ static)
     ;;
 
 python-bindings)
-    echo "Python bindings configuration"
+    print_header "Conf: Python bindings"
 
     CONF_OPTS+=("--enable-python-bindings")
 
@@ -240,7 +260,7 @@ python-bindings)
     ;;
 
 prod)
-    echo "Production configuration"
+    print_header "Conf: Production"
 
     # Unset the developper variables
     unset BABELTRACE_DEBUG_MODE
@@ -252,13 +272,13 @@ prod)
     ;;
 
 doc)
-    echo "Documentation configuration"
+    print_header "Conf: Documentation"
 
     CONF_OPTS+=("--enable-python-bindings" "--enable-python-bindings-doc" "--enable-python-plugins" "--enable-api-doc")
     ;;
 
 asan)
-    echo "Address Sanitizer configuration"
+    print_header "Conf: Address Sanitizer"
 
     # --enable-asan was introduced after 2.0 but don't check the version, we
     # want this configuration to fail if ASAN is unavailable.
@@ -266,11 +286,11 @@ asan)
     ;;
 
 min)
-    echo "Minimal configuration"
+    print_header "Conf: Minimal"
     ;;
 
 *)
-    echo "Standard configuration"
+    print_header "Conf: Standard"
 
     # Enable the python bindings / plugins by default with babeltrace2,
     # the test suite is mostly useless without it.
@@ -295,7 +315,7 @@ esac
 # before continuing.
 case "$build" in
 oot)
-    echo "Out of tree build"
+    print_header "Build: Out of tree"
 
     # Create and enter a temporary build directory
     builddir=$(mktemp -d)
@@ -305,7 +325,7 @@ oot)
     ;;
 
 dist)
-    echo "Distribution in-tree build"
+    print_header "Build: Distribution In-tree"
 
     # Run configure and generate the tar file
     # in the source directory
@@ -325,7 +345,7 @@ dist)
     ;;
 
 oot-dist)
-    echo "Distribution out of tree build"
+    print_header "Build: Distribution Out of tree"
 
     # Create and enter a temporary build directory
     builddir=$(mktemp -d)
@@ -352,7 +372,7 @@ oot-dist)
     ;;
 
 *)
-    echo "Standard in-tree build"
+    print_header "Build: Standard In-tree"
     ./configure "${CONF_OPTS[@]}" || failed_configure
     ;;
 esac
@@ -360,41 +380,76 @@ esac
 # We are now inside a configured build directory
 
 # BUILD!
-$MAKE -j "$($NPROC)" V=1
+print_header "BUILD!"
+$BEAR ${BEAR:+--} $MAKE -j "$($NPROC)" V=1
+
+# Install in the workspace if enabled
+if [ "$BABELTRACE_MAKE_INSTALL" = "yes" ]; then
+    print_header "Install"
+
+    $MAKE install V=1 DESTDIR="$WORKSPACE"
+
+    # Cleanup rpath in executables and shared libraries
+    find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
+    find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.so" -exec chrpath --delete {} \;
+
+    # Remove libtool .la files
+    find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.la" -delete
+fi
+
+# Run clang-tidy on the topmost commit
+if [ "$BABELTRACE_CLANG_TIDY" = "yes" ]; then
+    print_header "Run clang-tidy"
 
-# Install in the workspace
-$MAKE install DESTDIR="$WORKSPACE"
+    # This would be better by linting only the lines touched by a patch but it
+    # doesn't seem to work, the lines are always filtered and no error is
+    # reported.
+    #git diff -U0 HEAD^ | clang-tidy-diff -p1 -j "$($NPROC)" -timeout 60 -fix
 
-# Run tests, don't fail now, we want to run the archiving steps
-failed_tests=0
+    # Instead, run clan-tidy on all the files touched by the patch.
+    while read -r filepath; do
+        if [[ "$filepath" =~ (\.cpp|\.hhp|\.c|\.h)$ ]]; then
+            clang-tidy --fix-errors "$(realpath "$filepath")"
+        fi
+    done < <(git diff-tree --no-commit-id --diff-filter=d --name-only -r HEAD)
+
+    # If the tree has local changes, the formatting was incorrect
+    GIT_DIFF_OUTPUT=$(git diff)
+    if [ -n "$GIT_DIFF_OUTPUT" ]; then
+        echo "Saving clang-tidy proposed fixes in clang-tidy-fixes.diff"
+        git diff > "$WORKSPACE/clang-tidy-fixes.diff"
+
+        # Restore the unfixed files so they can be viewed in the warnings web
+        # interface
+        git checkout .
+        exit_status=1
+    fi
+fi
+
+# Run tests if enabled
 if [ "$BABELTRACE_RUN_TESTS" = "yes" ]; then
-       $MAKE --keep-going check || failed_tests=1
+    print_header "Run test suite"
 
-       # Copy tap logs for the jenkins tap parser before cleaning the build dir
-       rsync -a --exclude 'test-suite.log' --include '*/' --include '*.log' --exclude='*' tests/ "$WORKSPACE/tap"
+    # Run tests, don't fail now, we want to run the archiving steps
+    $MAKE --keep-going check || exit_status=1
 
-       # Copy the test suites top-level log which includes all tests failures
-       rsync -a --include 'test-suite.log' --include '*/' --exclude='*' tests/ "$WORKSPACE/log"
+    # Copy tap logs for the jenkins tap parser before cleaning the build dir
+    rsync -a --exclude 'test-suite.log' --include '*/' --include '*.log' --exclude='*' tests/ "$WORKSPACE/tap"
 
-       # The test suite prior to 1.5 did not produce TAP logs
-       if verlt "$PACKAGE_VERSION" "1.5"; then
-           mkdir -p "$WORKSPACE/tap/no-log"
-           echo "1..1" > "$WORKSPACE/tap/no-log/tests.log"
-           echo "ok 1 - Test suite doesn't support logging" >> "$WORKSPACE/tap/no-log/tests.log"
-       fi
+    # Copy the test suites top-level log which includes all tests failures
+    rsync -a --include 'test-suite.log' --include '*/' --exclude='*' tests/ "$WORKSPACE/log"
 fi
 
 # Clean the build directory
-$MAKE clean
-
-# Cleanup rpath in executables and shared libraries
-find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
-find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.so" -exec chrpath --delete {} \;
+if [ "$BABELTRACE_MAKE_CLEAN" = "yes" ]; then
+    print_header "Clean"
+    $MAKE clean
+fi
 
-# Remove libtool .la files
-find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.la" -exec rm -f {} \;
+print_header "Babeltrace build script ended with: $(test $exit_status == 0 && echo SUCCESS || echo FAILURE)"
 
 # Exit with failure if any of the tests failed
-exit $failed_tests
+exit $exit_status
 
 # EOF
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/scripts/babeltrace/check-format.sh b/scripts/babeltrace/check-format.sh
deleted file mode 100644 (file)
index 8eb5618..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-# SPDX-FileCopyrightText: 2023 Michael Jeanson <mjeanson@efficios.com>
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-set -exu
-
-cd src/babeltrace
-
-# Check if the topmost patch is properly formatted
-git diff -U0 --no-color --relative HEAD^ | clang-format-diff-14 -p1 -i
-
-GIT_DIFF_OUTPUT=$(git diff)
-
-if [ -n "$GIT_DIFF_OUTPUT" ]; then
-        echo "$GIT_DIFF_OUTPUT"
-        exit 1
-fi
-
-# EOF
diff --git a/scripts/common/check-format.sh b/scripts/common/check-format.sh
new file mode 100644 (file)
index 0000000..db9505d
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+# SPDX-FileCopyrightText: 2023 Michael Jeanson <mjeanson@efficios.com>
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+set -exu
+
+print_header() {
+    set +x
+
+    local message=" $1 "
+    local message_len
+    local padding_len
+
+    message_len="${#message}"
+    padding_len=$(( (80 - (message_len)) / 2 ))
+
+
+    printf '\n'; printf -- '#%.0s' {1..80}; printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' $(seq 1 $padding_len); printf '%s' "$message"; printf -- '#%.0s' $(seq 1 $padding_len); printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' {1..80}; printf '\n\n'
+
+    set -x
+}
+
+cd "src/$PROJECT_NAME"
+
+# Check if the topmost patch is properly formatted
+git diff -U0 --no-color --relative HEAD^ | clang-format-diff-14 -p1 -i
+
+# If the tree has local changes, the formatting was incorrect
+GIT_DIFF_OUTPUT=$(git diff)
+if [ -n "$GIT_DIFF_OUTPUT" ]; then
+        print_header "Saving clang-format proposed fixes in clang-format-fixes.diff"
+        git diff > "$WORKSPACE/clang-format-fixes.diff"
+        exit 1
+fi
+
+print_header "clang-format is happy!"
+# EOF
index 079de21030832a07793cea9ce70ebfdf065f0fbd..8562d1e650c2f3d5aa47f14434041915b2914426 100755 (executable)
@@ -1,21 +1,10 @@
 #!/bin/bash
-# shellcheck disable=SC2103
-#
-# Copyright (C) 2016 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
-# Copyright (C) 2016-2020 Michael Jeanson <mjeanson@efficios.com>
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# SPDX-FileCopyrightText: 2016 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
+# SPDX-FileCopyrightText: 2016-2023 Michael Jeanson <mjeanson@efficios.com>
+# SPDX-License-Identifier: GPL-2.0-or-later
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# shellcheck disable=SC2103
 
 set -exu
 
@@ -74,11 +63,31 @@ verne() {
     [ "$res" -ne "0" ]
 }
 
+print_header() {
+    set +x
+
+    local message=" $1 "
+    local message_len
+    local padding_len
+
+    message_len="${#message}"
+    padding_len=$(( (80 - (message_len)) / 2 ))
+
+
+    printf '\n'; printf -- '#%.0s' {1..80}; printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' $(seq 1 $padding_len); printf '%s' "$message"; printf -- '#%.0s' $(seq 1 $padding_len); printf '\n'
+    printf -- '-%.0s' {1..80}; printf '\n'
+    printf -- '#%.0s' {1..80}; printf '\n\n'
+
+    set -x
+}
+
 failed_configure() {
     # Assume we are in the configured build directory
-    echo "#################### BEGIN config.log ####################"
+    print_header "BEGIN config.log"
     cat config.log
-    echo "#################### END config.log ####################"
+    print_header "END config.log"
 
     # End the build with failure
     exit 1
@@ -102,14 +111,24 @@ set_execute_traversal_bit()
     chmod a+x "$path"
 }
 
+print_header "LTTng-tools build script starting"
+
 # Required variables
 WORKSPACE=${WORKSPACE:-}
 
+# Axis
 platform=${platform:-}
 conf=${conf:-}
 build=${build:-}
 cc=${cc:-}
-test_type=${test_type:-}
+
+# Build steps that can be overriden by the environment
+LTTNG_TOOLS_MAKE_INSTALL="${LTTNG_TOOLS_MAKE_INSTALL:-yes}"
+LTTNG_TOOLS_MAKE_CLEAN="${LTTNG_TOOLS_MAKE_CLEAN:-yes}"
+LTTNG_TOOLS_GEN_COMPILE_COMMANDS="${LTTNG_TOOLS_GEN_COMPILE_COMMANDS:-no}"
+LTTNG_TOOLS_RUN_TESTS="${LTTNG_TOOLS_RUN_TESTS:-yes}"
+LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION="${LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION:-no}"
+LTTNG_TOOLS_CLANG_TIDY="${LTTNG_TOOLS_CLANG_TIDY:-no}"
 
 SRCDIR="$WORKSPACE/src/lttng-tools"
 TAPDIR="$WORKSPACE/tap"
@@ -138,6 +157,13 @@ export PKG_CONFIG_PATH="$DEPS_PKGCONFIG"
 export CPPFLAGS="-I$DEPS_INC"
 export LDFLAGS="-L$DEPS_LIB"
 
+exit_status=0
+
+# Use bear to generate compile_commands.json when enabled
+BEAR=""
+if [ "$LTTNG_TOOLS_GEN_COMPILE_COMMANDS" = "yes" ]; then
+       BEAR="bear"
+fi
 
 # Create tmp directory
 TMPDIR="$WORKSPACE/tmp"
@@ -172,53 +198,21 @@ gcc)
     export CC=gcc
     export CXX=g++
     ;;
-gcc-4.8)
-    export CC=gcc-4.8
-    export CXX=g++-4.8
-    ;;
-gcc-5)
-    export CC=gcc-5
-    export CXX=g++-5
-    ;;
-gcc-6)
-    export CC=gcc-6
-    export CXX=g++-6
-    ;;
-gcc-7)
-    export CC=gcc-7
-    export CXX=g++-7
-    ;;
-gcc-8)
-    export CC=gcc-8
-    export CXX=g++-8
+gcc-*)
+    export CC=gcc-${cc#gcc-}
+    export CXX=g++-${cc#gcc-}
     ;;
 clang)
     export CC=clang
     export CXX=clang++
     ;;
-clang-3.9)
-    export CC=clang-3.9
-    export CXX=clang++-3.9
-    ;;
-clang-4.0)
-    export CC=clang-4.0
-    export CXX=clang++-4.0
-    ;;
-clang-5.0)
-    export CC=clang-5.0
-    export CXX=clang++-5.0
-    ;;
-clang-6.0)
-    export CC=clang-6.0
-    export CXX=clang++-6.0
-    ;;
-clang-7)
-    export CC=clang-7
-    export CXX=clang++-7
+clang-*)
+    export CC=clang-${cc#clang-}
+    export CXX=clang++-${cc#clang-}
     ;;
 *)
     if [ "x$cc" != "x" ]; then
-        export CC="$cc"
+           export CC="$cc"
     fi
     ;;
 esac
@@ -241,6 +235,7 @@ macos*)
     export PYTHON_CONFIG="python3-config"
 
     LTTNG_TOOLS_RUN_TESTS="no"
+    LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION="no"
     ;;
 
 cygwin|cygwin64|msys32|msys64)
@@ -249,6 +244,7 @@ cygwin|cygwin64|msys32|msys64)
     export NPROC=nproc
 
     LTTNG_TOOLS_RUN_TESTS="no"
+    LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION="no"
     ;;
 
 *)
@@ -256,8 +252,6 @@ cygwin|cygwin64|msys32|msys64)
     export TAR=tar
     export NPROC=nproc
 
-    LTTNG_TOOLS_RUN_TESTS="yes"
-
     PYTHON2=python2
     PYTHON3=python3
 
@@ -288,17 +282,9 @@ if [[ $platform = sles12sp5* ]] || [[  $platform = el7* ]]; then
     CXXFLAGS="$CXXFLAGS -Wno-missing-field-initializers -Wno-shadow"
 fi
 
-case "$test_type" in
-full)
-    LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION="yes"
-    ;;
-*)
-    LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION="no"
-    ;;
-esac
-
 # If we have modules, build them
 if [ -d "$WORKSPACE/src/lttng-modules" ]; then
+    print_header "Build and install LTTng-modules"
     cd "$WORKSPACE/src/lttng-modules"
     $MAKE -j"$($NPROC)" V=1
     $MAKE modules_install V=1
@@ -306,6 +292,7 @@ if [ -d "$WORKSPACE/src/lttng-modules" ]; then
 fi
 
 # Print build env details
+print_header "Build environment details"
 print_os || true
 print_tooling || true
 
@@ -313,47 +300,38 @@ print_tooling || true
 cd "$SRCDIR"
 
 # Run bootstrap in the source directory prior to configure
+print_header "Bootstrap autotools"
 ./bootstrap
 
 # Get source version from configure script
 eval "$(grep '^PACKAGE_VERSION=' ./configure)"
 PACKAGE_VERSION=${PACKAGE_VERSION//\-pre*/}
 
-
-# The switch to build without UST changed in 2.8
-if vergte "$PACKAGE_VERSION" "2.8"; then
-    NO_UST="--without-lttng-ust"
-else
-    NO_UST="--disable-lttng-ust"
-fi
-
-# Most build configs require the python bindings
-CONF_OPTS=("--prefix=$PREFIX" "--libdir=$PREFIX/$LIBDIR_ARCH" "--enable-python-bindings")
-
-DIST_CONF_OPTS=()
+CONF_OPTS=("--prefix=$PREFIX" "--libdir=$PREFIX/$LIBDIR_ARCH" "--disable-maintainer-mode")
+DIST_CONF_OPTS=("--disable-maintainer-mode")
 
 # Set configure options and environment variables for each build
 # configuration.
 case "$conf" in
 static)
-    echo "Static lib only configuration"
+    print_header "Conf: Static lib only"
 
-    CONF_OPTS+=("--enable-static" "--disable-shared")
+    CONF_OPTS+=("--enable-static" "--disable-shared" "--enable-python-bindings")
     ;;
 
 no-ust)
-    echo "Build without UST support"
-    CONF_OPTS+=("$NO_UST")
-    DIST_CONF_OPTS+=("$NO_UST")
+    print_header "Conf: Without UST support"
+    CONF_OPTS+=("--without-lttng-ust")
+    DIST_CONF_OPTS+=("--without-lttng-ust")
     ;;
 
 agents)
-    echo "Java and Python agents configuration"
+    print_header "Conf: Java and Python agents"
 
     export JAVA_HOME="/usr/lib/jvm/default-java"
     export CLASSPATH="$DEPS_JAVA/lttng-ust-agent-all.jar:/usr/share/java/log4j-api.jar:/usr/share/java/log4j-core.jar:/usr/share/java/log4j-1.2.jar"
 
-    CONF_OPTS+=("--enable-test-java-agent-all")
+    CONF_OPTS+=("--enable-python-bindings" "--enable-test-java-agent-all")
 
     # Explicitly add '--enable-test-java-agent-log4j2', it's not part of '-all' in stable 2.12/2.13
     if verlt "$PACKAGE_VERSION" "2.14"; then
@@ -369,19 +347,23 @@ agents)
     ;;
 
 relayd-only)
-    echo "Relayd only configuration"
+    print_header "Conf: Relayd only"
 
-    CONF_OPTS=("--prefix=$PREFIX" "--disable-bin-lttng" "--disable-bin-lttng-consumerd" "--disable-bin-lttng-crash" "--disable-bin-lttng-sessiond" "--disable-extras" "--disable-man-pages" "$NO_UST")
+    CONF_OPTS+=("--disable-bin-lttng" "--disable-bin-lttng-consumerd" "--disable-bin-lttng-crash" "--disable-bin-lttng-sessiond" "--disable-extras" "--disable-man-pages" "--without-lttng-ust")
     ;;
 
 debug-rcu)
-    echo "Enable RCU sanity checks for debugging"
+    print_header "Conf: RCU sanity checks for debugging"
+
+    CONF_OPTS+=("--enable-python-bindings")
 
     export CPPFLAGS="$CPPFLAGS -DDEBUG_RCU"
     ;;
 
 *)
-    echo "Standard configuration"
+    print_header "Conf: Standard"
+
+    CONF_OPTS+=("--enable-python-bindings")
 
     # Something is broken in docbook-xml on yocto
     if [[ "$platform" = yocto* ]]; then
@@ -400,7 +382,7 @@ esac
 # before continuing.
 case "$build" in
 oot)
-    echo "Out of tree build"
+    print_header "Build: Out of tree"
 
     # Create and enter a temporary build directory
     builddir=$(mktemp -d)
@@ -410,10 +392,11 @@ oot)
     ;;
 
 dist)
-    echo "Distribution in-tree build"
+    print_header "Build: Distribution in-tree"
 
     # Run configure and generate the tar file
     # in the source directory
+
     ./configure "${DIST_CONF_OPTS[@]}" || failed_configure
     $MAKE dist
 
@@ -430,7 +413,7 @@ dist)
     ;;
 
 oot-dist)
-    echo "Distribution out of tree build"
+    print_header "Build: Distribution Out of tree"
 
     # Create and enter a temporary build directory
     builddir=$(mktemp -d)
@@ -457,7 +440,7 @@ oot-dist)
     ;;
 
 *)
-    echo "Standard in-tree build"
+    print_header "Build: Standard In-tree"
     ./configure "${CONF_OPTS[@]}" || failed_configure
     ;;
 esac
@@ -465,14 +448,60 @@ esac
 # We are now inside a configured build directory
 
 # BUILD!
-$MAKE -j "$($NPROC)" V=1
+print_header "BUILD!"
+$BEAR ${BEAR:+--} $MAKE -j "$($NPROC)" V=1
+
+# Install in the workspace if enabled
+if [ "$LTTNG_TOOLS_MAKE_INSTALL" = "yes" ]; then
+    print_header "Install"
+
+    $MAKE install V=1 DESTDIR="$WORKSPACE"
+
+    # Cleanup rpath in executables
+    find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
+
+    # Some configs don't build liblttng-ctl
+    if [ -d "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" ]; then
+        # Cleanup rpath in shared libraries
+        find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.so" -exec chrpath --delete {} \;
+        # Remove libtool .la files
+        find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.la" -delete
+    fi
+fi
+
+# Run clang-tidy on the topmost commit
+if [ "$LTTNG_TOOLS_CLANG_TIDY" = "yes" ]; then
+    print_header "Run clang-tidy"
 
-# Install in the workspace
-$MAKE install DESTDIR="$WORKSPACE"
+    # This would be better by linting only the lines touched by a patch but it
+    # doesn't seem to work, the lines are always filtered and no error is
+    # reported.
+    #git diff -U0 HEAD^ | clang-tidy-diff -p1 -j "$($NPROC)" -timeout 60 -fix
+
+    # Instead, run clan-tidy on all the files touched by the patch.
+    while read -r filepath; do
+        if [[ "$filepath" =~ (\.cpp|\.hhp|\.c|\.h)$ ]]; then
+            clang-tidy --fix-errors "$(realpath "$filepath")"
+        fi
+    done < <(git diff-tree --no-commit-id --diff-filter=d --name-only -r HEAD)
+
+    # If the tree has local changes, the formatting was incorrect
+    GIT_DIFF_OUTPUT=$(git diff)
+    if [ -n "$GIT_DIFF_OUTPUT" ]; then
+        echo "Saving clang-tidy proposed fixes in clang-tidy-fixes.diff"
+        git diff > "$WORKSPACE/clang-tidy-fixes.diff"
+
+        # Restore the unfixed files so they can be viewed in the warnings web
+        # interface
+        git checkout .
+        exit_status=1
+    fi
+fi
 
 # Run tests for all configs except 'no-ust'
-failed_tests=0
 if [ "$LTTNG_TOOLS_RUN_TESTS" = "yes" ] && [ "$conf" != "no-ust" ]; then
+    print_header "Run test suite"
+
     # Allow core dumps
     ulimit -c unlimited
 
@@ -480,55 +509,41 @@ if [ "$LTTNG_TOOLS_RUN_TESTS" = "yes" ] && [ "$conf" != "no-ust" ]; then
     # lttng-sessiond --daemonize on "lttng create"
     export LTTNG_SESSIOND_PATH="/bin/true"
 
-    # Run 'unit_tests', 2.8 and up has a new test suite
-    if vergte "$PACKAGE_VERSION" "2.8"; then
-        # It is implied that tests depending on LTTNG_ENABLE_DESTRUCTIVE_TESTS
-        # only run for the root user. Note that here `destructive` means that
-        # operations are performed at the host level (add user etc.) that
-        # effectively modify the host. Running those tests are acceptable on our
-        # CI and root jobs since we always run root tests against a `snapshot`
-        # of the host.
-        if [ "$(id -u)" == "0" ]; then
-            # Allow the traversal of all directories leading to the
-            # DEPS_LIBS directory to enable test app run by temp users to
-            # access lttng-ust.
-            set_execute_traversal_bit "$DEPS_LIB"
-            # Allow `all` to interact with all deps libs.
-            chmod a+rwx -R "$DEPS_LIB"
-
-            export LTTNG_ENABLE_DESTRUCTIVE_TESTS="will-break-my-system"
-
-            # Some destructive tests play with the system clock, disable timesyncd
-            systemctl stop systemd-timesyncd.service || true
-        fi
+    # It is implied that tests depending on LTTNG_ENABLE_DESTRUCTIVE_TESTS
+    # only run for the root user. Note that here `destructive` means that
+    # operations are performed at the host level (add user etc.) that
+    # effectively modify the host. Running those tests are acceptable on our
+    # CI and root jobs since we always run root tests against a `snapshot`
+    # of the host.
+    if [ "$(id -u)" == "0" ]; then
+        # Allow the traversal of all directories leading to the
+        # DEPS_LIBS directory to enable test app run by temp users to
+        # access lttng-ust.
+        set_execute_traversal_bit "$DEPS_LIB"
+        # Allow `all` to interact with all deps libs.
+        chmod a+rwx -R "$DEPS_LIB"
+
+        export LTTNG_ENABLE_DESTRUCTIVE_TESTS="will-break-my-system"
+
+        # Some destructive tests play with the system clock, disable timesyncd
+        systemctl stop systemd-timesyncd.service || true
+    fi
 
-        make --keep-going check || failed_tests=1
+    make --keep-going check || exit_status=1
 
-        # Copy tap logs for the jenkins tap parser before cleaning the build dir
-        rsync -a --exclude 'test-suite.log' --include '*/' --include '*.log' --exclude='*' tests/ "$TAPDIR"
+    # Copy tap logs for the jenkins tap parser before cleaning the build dir
+    rsync -a --exclude 'test-suite.log' --include '*/' --include '*.log' --exclude='*' tests/ "$TAPDIR"
 
-        # Copy the test suites top-level log which includes all tests failures
-        rsync -a --include 'test-suite.log' --include '*/' --exclude='*' tests/ "$WORKSPACE/log"
-    else
-        cd tests
-        mkdir -p "$TAPDIR/unit"
-        mkdir -p "$TAPDIR/fast_regression"
-        mkdir -p "$TAPDIR/with_bindings_regression"
-        prove --merge -v --exec '' - < unit_tests --archive "$TAPDIR/unit/" || failed_tests=1
-        prove --merge -v --exec '' - < fast_regression --archive "$TAPDIR/fast_regression/" || failed_tests=1
-        prove --merge -v --exec '' - < with_bindings_regression --archive "$TAPDIR/with_bindings_regression/" || failed_tests=1
-        cd ..
-    fi
+    # Copy the test suites top-level log which includes all tests failures
+    rsync -a --include 'test-suite.log' --include '*/' --exclude='*' tests/ "$WORKSPACE/log"
 
     if [ "$LTTNG_TOOLS_RUN_TESTS_LONG_REGRESSION" = "yes" ]; then
+        print_header "Run long regression tests"
         cd tests
         mkdir -p "$TAPDIR/long_regression"
-        prove --merge -v --exec '' - < long_regression --archive "$TAPDIR/long_regression/" || failed_tests=1
+        prove --merge -v --exec '' - < long_regression --archive "$TAPDIR/long_regression/" || exit_status=1
         cd ..
     fi
-
-    # TAP plugin is having a hard time with .yml files.
-    find "$TAPDIR" -name "meta.yml" -exec rm -f {} \;
 else
     # The TAP plugin will fail the job if no test logs are present
     mkdir -p "$TAPDIR/no-tests"
@@ -537,20 +552,15 @@ else
 fi
 
 # Clean the build directory
-$MAKE clean
-
-# Cleanup rpath in executables
-find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
-
-# Some configs don't build liblttng-ctl
-if [ -d "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" ]; then
-    # Cleanup rpath in shared libraries
-    find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.so" -exec chrpath --delete {} \;
-    # Remove libtool .la files
-    find "$WORKSPACE/$PREFIX/$LIBDIR_ARCH" -name "*.la" -exec rm -f {} \;
+if [ "$LTTNG_TOOLS_MAKE_CLEAN" = "yes" ]; then
+    print_header "Clean"
+    $MAKE clean
 fi
 
+print_header "LTTng-tools build script ended with: $(test $exit_status == 0 && echo SUCCESS || echo FAILURE)"
+
 # Exit with failure if any of the tests failed
-exit $failed_tests
+exit $exit_status
 
 # EOF
+# vim: expandtab tabstop=4 shiftwidth=4
This page took 0.045026 seconds and 4 git commands to generate.