From 1ad4c3d00f43ef188e2fb0b71fd8af5ee3591ca7 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 26 Apr 2023 10:17:27 -0400 Subject: [PATCH] jjb: lttng-tools/babeltrace: smokebuild proof-of-concept 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 --- jobs/babeltrace.yaml | 60 +++++- jobs/lttng-tools.yaml | 261 +++++++++++++++++------- jobs/lttng-ust-benchmarks.yaml | 2 +- jobs/lttng-ust-java-tests.yaml | 2 +- scripts/babeltrace/build.sh | 179 +++++++++++------ scripts/babeltrace/check-format.sh | 19 -- scripts/common/check-format.sh | 41 ++++ scripts/lttng-tools/build.sh | 312 +++++++++++++++-------------- 8 files changed, 569 insertions(+), 307 deletions(-) delete mode 100644 scripts/babeltrace/check-format.sh create mode 100644 scripts/common/check-format.sh diff --git a/jobs/babeltrace.yaml b/jobs/babeltrace.yaml index 17821d6..f1843a4 100644 --- a/jobs/babeltrace.yaml +++ b/jobs/babeltrace.yaml @@ -286,7 +286,7 @@ 1 TOTAL - FAILED + {warnings_status} AGGREGATION_TOOLS @@ -439,7 +439,7 @@ builders: - shell: - !include-raw-escape: scripts/babeltrace/check-format.sh + !include-raw-escape: scripts/common/check-format.sh properties: - inject: @@ -449,6 +449,9 @@ days-to-keep: 1 publishers: + - archive: + artifacts: 'clang-format-fixes.diff' + allow-empty: true - workspace-cleanup: *babeltrace_publisher_workspace-cleanup_defaults - job-template: @@ -670,42 +673,91 @@ - 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: diff --git a/jobs/lttng-tools.yaml b/jobs/lttng-tools.yaml index a8c267e..bce2d8b 100644 --- a/jobs/lttng-tools.yaml +++ b/jobs/lttng-tools.yaml @@ -38,13 +38,13 @@ cron: "@hourly" properties: - - inject: + - inject: <tng-tools_property_inject_defaults properties-content: | PROJECT_NAME=lttng-tools - - build-discarder: + - build-discarder: <tng-tools_property_build-discarder_defaults num-to-keep: 20 artifact-num-to-keep: 2 - - github: + - github: <tng-tools_property_github_defaults url: https://github.com/{github_user}/lttng-tools ## Anchors @@ -91,10 +91,6 @@ type: user-defined name: babeltrace_version values: '{obj:babelversions}' - - axis: <tng-tools_matrix_axis_test_type - type: user-defined - name: test_type - values: '{obj:testtypes}' - _lttng-tools_matrix_axes_rootbuild: <tng-tools_matrix_axes_rootbuild name: 'lttng-tools_matrix_axes_rootbuild' @@ -115,7 +111,6 @@ - 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 @@ -521,6 +516,14 @@ 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: @@ -623,9 +626,7 @@ branch-pattern: '{version}' properties: - - inject: - properties-content: | - PROJECT_NAME=lttng-tools + - inject: *lttng-tools_property_inject_defaults - build-discarder: days-to-keep: 1 - throttle: @@ -656,7 +657,7 @@ - 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 @@ -664,12 +665,140 @@ - git: *lttng-tools_scm_git_review triggers: - - gerrit: *lttng-tools_trigger_gerrit_default + - gerrit: <tng-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: <tng-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: | + + + + + + + + + false + + + + + + false + true + false + 0 + 0 + + LOW + + + true + true + false + true + false + + + FAILED + 1 + TOTAL + + + AGGREGATION_TOOLS + + + - 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: @@ -686,6 +815,34 @@ - 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 @@ -838,7 +995,6 @@ 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}': @@ -850,7 +1006,6 @@ 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}': @@ -862,7 +1017,6 @@ 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}': @@ -874,7 +1028,6 @@ 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}': @@ -886,7 +1039,6 @@ 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}': @@ -898,7 +1050,6 @@ 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}': @@ -910,7 +1061,6 @@ 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': @@ -921,7 +1071,6 @@ 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': @@ -933,7 +1082,6 @@ 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': @@ -945,7 +1093,6 @@ 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': @@ -957,7 +1104,6 @@ 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': @@ -979,7 +1125,6 @@ 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}': @@ -991,7 +1136,6 @@ 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}': @@ -1003,7 +1147,6 @@ 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}': @@ -1015,7 +1158,6 @@ 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}': @@ -1027,7 +1169,6 @@ 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}': @@ -1039,7 +1180,6 @@ 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}': @@ -1051,7 +1191,6 @@ 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': @@ -1062,7 +1201,6 @@ 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': @@ -1074,7 +1212,6 @@ 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': @@ -1086,7 +1223,6 @@ 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': @@ -1109,7 +1245,6 @@ 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}': @@ -1121,7 +1256,6 @@ 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}': @@ -1133,7 +1267,6 @@ 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}': @@ -1145,7 +1278,6 @@ 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}': @@ -1157,7 +1289,6 @@ 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}': @@ -1169,7 +1300,6 @@ 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}': @@ -1181,7 +1311,6 @@ 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': @@ -1192,7 +1321,6 @@ 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': @@ -1204,7 +1332,6 @@ 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': @@ -1216,7 +1343,6 @@ 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': @@ -1248,7 +1374,6 @@ 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}': @@ -1260,7 +1385,6 @@ 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}': @@ -1272,7 +1396,6 @@ 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}': @@ -1284,7 +1407,6 @@ confs: !!python/tuple [std] urcuversions: !!python/tuple [stable-0.11] babelversions: !!python/tuple [stable-1.5] - testtypes: !!python/tuple [base] filter: '' touchstone: '' @@ -1298,7 +1420,6 @@ 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}': @@ -1310,7 +1431,6 @@ 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}': @@ -1322,7 +1442,6 @@ 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}': @@ -1334,7 +1453,6 @@ confs: !!python/tuple [std] urcuversions: !!python/tuple [stable-0.9] babelversions: !!python/tuple [stable-1.5] - testtypes: !!python/tuple [base] filter: '' touchstone: '' @@ -1358,7 +1476,6 @@ 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}': @@ -1370,7 +1487,6 @@ 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}': @@ -1382,7 +1498,6 @@ confs: !!python/tuple [relayd-only] urcuversions: !!python/tuple [master] babelversions: !!python/tuple [stable-2.0] - testtypes: !!python/tuple [base] filter: '' touchstone: '' @@ -1396,7 +1511,6 @@ 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}': @@ -1408,7 +1522,6 @@ 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: '' @@ -1422,7 +1535,6 @@ 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}': @@ -1434,7 +1546,6 @@ 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: '' @@ -1458,7 +1569,6 @@ 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}': @@ -1470,7 +1580,6 @@ 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: '' @@ -1484,7 +1593,6 @@ 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}': @@ -1496,7 +1604,6 @@ 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: '' @@ -1517,7 +1624,6 @@ 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': @@ -1528,9 +1634,30 @@ 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}': @@ -1541,7 +1668,6 @@ 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': @@ -1552,7 +1678,6 @@ 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: '' @@ -1565,7 +1690,6 @@ 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': @@ -1576,7 +1700,6 @@ 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: '' diff --git a/jobs/lttng-ust-benchmarks.yaml b/jobs/lttng-ust-benchmarks.yaml index 9bd2bfa..0c73948 100644 --- a/jobs/lttng-ust-benchmarks.yaml +++ b/jobs/lttng-ust-benchmarks.yaml @@ -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/**' diff --git a/jobs/lttng-ust-java-tests.yaml b/jobs/lttng-ust-java-tests.yaml index 166032c..0309444 100644 --- a/jobs/lttng-ust-java-tests.yaml +++ b/jobs/lttng-ust-java-tests.yaml @@ -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/**' diff --git a/scripts/babeltrace/build.sh b/scripts/babeltrace/build.sh index 91681d0..ae13afa 100755 --- a/scripts/babeltrace/build.sh +++ b/scripts/babeltrace/build.sh @@ -1,20 +1,8 @@ #!/bin/bash # -# Copyright (C) 2015 Jonathan Rajotte-Julien -# Copyright (C) 2016-2020 Michael Jeanson -# -# 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 . +# SPDX-FileCopyrightText: 2015 Jonathan Rajotte-Julien +# SPDX-FileCopyrightText: 2016-2023 Michael Jeanson +# 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 index 8eb5618..0000000 --- a/scripts/babeltrace/check-format.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# SPDX-FileCopyrightText: 2023 Michael Jeanson -# 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 index 0000000..db9505d --- /dev/null +++ b/scripts/common/check-format.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# SPDX-FileCopyrightText: 2023 Michael Jeanson +# 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 diff --git a/scripts/lttng-tools/build.sh b/scripts/lttng-tools/build.sh index 079de21..8562d1e 100755 --- a/scripts/lttng-tools/build.sh +++ b/scripts/lttng-tools/build.sh @@ -1,21 +1,10 @@ #!/bin/bash -# shellcheck disable=SC2103 -# -# Copyright (C) 2016 Jonathan Rajotte-Julien -# Copyright (C) 2016-2020 Michael Jeanson # -# 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 +# SPDX-FileCopyrightText: 2016-2023 Michael Jeanson +# 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 . +# 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 -- 2.34.1