2
0

do_ci.sh 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. #!/bin/bash
  2. # Copyright The OpenTelemetry Authors
  3. # SPDX-License-Identifier: Apache-2.0
  4. set -e
  5. function install_prometheus_cpp_client
  6. {
  7. pushd third_party/prometheus-cpp
  8. git submodule update --recursive --init
  9. [[ -d _build ]] && rm -rf ./_build
  10. mkdir _build && cd _build
  11. cmake .. -DBUILD_SHARED_LIBS=ON -DUSE_THIRDPARTY_LIBRARIES=ON
  12. make -j $(nproc)
  13. sudo make install
  14. popd
  15. }
  16. function run_benchmarks
  17. {
  18. docker run -d --rm -it -p 4317:4317 -p 4318:4318 -v \
  19. $(pwd)/examples/otlp:/cfg otel/opentelemetry-collector:0.109.0 \
  20. --config=/cfg/opentelemetry-collector-config/config.dev.yaml
  21. [ -z "${BENCHMARK_DIR}" ] && export BENCHMARK_DIR=$HOME/benchmark
  22. mkdir -p $BENCHMARK_DIR
  23. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -c opt -- \
  24. $(bazel query 'attr("tags", "benchmark_result", ...)')
  25. echo ""
  26. echo "Benchmark results in $BENCHMARK_DIR:"
  27. (
  28. cd bazel-bin
  29. find . -name \*_result.json -exec bash -c \
  30. 'echo "$@" && mkdir -p "$BENCHMARK_DIR/$(dirname "$@")" && \
  31. cp "$@" "$BENCHMARK_DIR/$@" && chmod +w "$BENCHMARK_DIR/$@"' _ {} \;
  32. )
  33. # collect benchmark results into one array
  34. pushd $BENCHMARK_DIR
  35. components=(api sdk exporters)
  36. for component in "${components[@]}"
  37. do
  38. out=$component-benchmark_result.json
  39. find ./$component -type f -name "*_result.json" -exec cat {} \; > $component_tmp_bench.json
  40. # Print each result in CI logs, so it can be inspected.
  41. echo "BENCHMARK result (begin)"
  42. cat $component_tmp_bench.json
  43. echo "BENCHMARK result (end)"
  44. cat $component_tmp_bench.json | docker run -i --rm itchyny/gojq:0.12.6 -s \
  45. '.[0].benchmarks = ([.[].benchmarks] | add) |
  46. if .[0].benchmarks == null then null else .[0] end' > $BENCHMARK_DIR/$out
  47. done
  48. mv *benchmark_result.json ${SRC_DIR}
  49. popd
  50. docker kill $(docker ps -q)
  51. }
  52. [ -z "${SRC_DIR}" ] && export SRC_DIR="`pwd`"
  53. [ -z "${BUILD_DIR}" ] && export BUILD_DIR=$HOME/build
  54. mkdir -p "${BUILD_DIR}"
  55. [ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/plugin
  56. mkdir -p "${PLUGIN_DIR}"
  57. [ -z "${INSTALL_TEST_DIR}" ] && export INSTALL_TEST_DIR=$HOME/install_test
  58. mkdir -p "${INSTALL_TEST_DIR}"
  59. MAKE_COMMAND="make -k -j \$(nproc)"
  60. echo "make command: ${MAKE_COMMAND}"
  61. BAZEL_OPTIONS_DEFAULT="--copt=-DENABLE_METRICS_EXEMPLAR_PREVIEW"
  62. BAZEL_OPTIONS="$BAZEL_OPTIONS_DEFAULT"
  63. BAZEL_TEST_OPTIONS="$BAZEL_OPTIONS --test_output=errors"
  64. BAZEL_OPTIONS_ASYNC="$BAZEL_OPTIONS --copt=-DENABLE_ASYNC_EXPORT"
  65. BAZEL_TEST_OPTIONS_ASYNC="$BAZEL_OPTIONS_ASYNC --test_output=errors"
  66. # https://github.com/bazelbuild/bazel/issues/4341
  67. BAZEL_MACOS_OPTIONS="$BAZEL_OPTIONS_ASYNC --features=-supports_dynamic_linker"
  68. BAZEL_MACOS_TEST_OPTIONS="$BAZEL_MACOS_OPTIONS --test_output=errors"
  69. BAZEL_STARTUP_OPTIONS="--output_user_root=$HOME/.cache/bazel"
  70. if [[ "${BUILD_TYPE}" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then
  71. CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=${BUILD_TYPE})
  72. else
  73. CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=Debug)
  74. fi
  75. if [ -n "${CXX_STANDARD}" ]; then
  76. CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
  77. else
  78. CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=14")
  79. fi
  80. CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD_REQUIRED=ON")
  81. CMAKE_OPTIONS+=("-DCMAKE_CXX_EXTENSIONS=OFF")
  82. if [ -n "$CMAKE_TOOLCHAIN_FILE" ]; then
  83. echo "CMAKE_TOOLCHAIN_FILE is set to: $CMAKE_TOOLCHAIN_FILE"
  84. CMAKE_OPTIONS+=("-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE")
  85. fi
  86. echo "CMAKE_OPTIONS:" "${CMAKE_OPTIONS[@]}"
  87. export CTEST_OUTPUT_ON_FAILURE=1
  88. if [[ "$1" == "cmake.test" ]]; then
  89. cd "${BUILD_DIR}"
  90. rm -rf *
  91. cmake "${CMAKE_OPTIONS[@]}" \
  92. -DWITH_PROMETHEUS=ON \
  93. -DWITH_ZIPKIN=ON \
  94. -DWITH_ELASTICSEARCH=ON \
  95. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  96. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  97. "${SRC_DIR}"
  98. make -j $(nproc)
  99. make test
  100. exit 0
  101. elif [[ "$1" == "cmake.maintainer.sync.test" ]]; then
  102. cd "${BUILD_DIR}"
  103. rm -rf *
  104. cmake "${CMAKE_OPTIONS[@]}" \
  105. -DWITH_OTLP_HTTP=ON \
  106. -DWITH_OTLP_GRPC=ON \
  107. -DWITH_OTLP_FILE=ON \
  108. -DWITH_PROMETHEUS=ON \
  109. -DWITH_EXAMPLES=ON \
  110. -DWITH_EXAMPLES_HTTP=ON \
  111. -DWITH_ZIPKIN=ON \
  112. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  113. -DWITH_ELASTICSEARCH=ON \
  114. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  115. -DWITH_ASYNC_EXPORT_PREVIEW=OFF \
  116. -DOTELCPP_MAINTAINER_MODE=ON \
  117. -DWITH_NO_DEPRECATED_CODE=ON \
  118. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  119. -DWITH_OTLP_RETRY_PREVIEW=ON \
  120. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  121. "${SRC_DIR}"
  122. eval "$MAKE_COMMAND"
  123. make test
  124. exit 0
  125. elif [[ "$1" == "cmake.maintainer.async.test" ]]; then
  126. cd "${BUILD_DIR}"
  127. rm -rf *
  128. cmake "${CMAKE_OPTIONS[@]}" \
  129. -DWITH_OTLP_HTTP=ON \
  130. -DWITH_OTLP_GRPC=ON \
  131. -DWITH_OTLP_FILE=ON \
  132. -DWITH_PROMETHEUS=ON \
  133. -DWITH_EXAMPLES=ON \
  134. -DWITH_EXAMPLES_HTTP=ON \
  135. -DWITH_ZIPKIN=ON \
  136. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  137. -DWITH_ELASTICSEARCH=ON \
  138. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  139. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  140. -DOTELCPP_MAINTAINER_MODE=ON \
  141. -DWITH_NO_DEPRECATED_CODE=ON \
  142. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  143. -DWITH_OTLP_RETRY_PREVIEW=ON \
  144. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  145. "${SRC_DIR}"
  146. eval "$MAKE_COMMAND"
  147. make test
  148. exit 0
  149. elif [[ "$1" == "cmake.maintainer.cpp11.async.test" ]]; then
  150. cd "${BUILD_DIR}"
  151. rm -rf *
  152. cmake "${CMAKE_OPTIONS[@]}" \
  153. -DCMAKE_CXX_STANDARD=11 \
  154. -DWITH_OTLP_HTTP=ON \
  155. -DWITH_OTLP_FILE=ON \
  156. -DWITH_PROMETHEUS=ON \
  157. -DWITH_EXAMPLES=ON \
  158. -DWITH_EXAMPLES_HTTP=ON \
  159. -DWITH_ZIPKIN=ON \
  160. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  161. -DWITH_ELASTICSEARCH=ON \
  162. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  163. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  164. -DOTELCPP_MAINTAINER_MODE=ON \
  165. -DWITH_NO_DEPRECATED_CODE=ON \
  166. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  167. -DWITH_OTLP_RETRY_PREVIEW=ON \
  168. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  169. "${SRC_DIR}"
  170. make -k -j $(nproc)
  171. make test
  172. exit 0
  173. elif [[ "$1" == "cmake.maintainer.abiv2.test" ]]; then
  174. cd "${BUILD_DIR}"
  175. rm -rf *
  176. cmake "${CMAKE_OPTIONS[@]}" \
  177. -DWITH_OTLP_HTTP=ON \
  178. -DWITH_OTLP_GRPC=ON \
  179. -DWITH_OTLP_FILE=ON \
  180. -DWITH_PROMETHEUS=ON \
  181. -DWITH_EXAMPLES=ON \
  182. -DWITH_EXAMPLES_HTTP=ON \
  183. -DWITH_ZIPKIN=ON \
  184. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  185. -DWITH_ELASTICSEARCH=ON \
  186. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  187. -DWITH_ASYNC_EXPORT_PREVIEW=OFF \
  188. -DOTELCPP_MAINTAINER_MODE=ON \
  189. -DWITH_NO_DEPRECATED_CODE=ON \
  190. -DWITH_ABI_VERSION_1=OFF \
  191. -DWITH_ABI_VERSION_2=ON \
  192. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  193. -DWITH_OTLP_RETRY_PREVIEW=ON \
  194. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  195. "${SRC_DIR}"
  196. eval "$MAKE_COMMAND"
  197. make test
  198. exit 0
  199. elif [[ "$1" == "cmake.with_async_export.test" ]]; then
  200. cd "${BUILD_DIR}"
  201. rm -rf *
  202. cmake "${CMAKE_OPTIONS[@]}" \
  203. -DWITH_PROMETHEUS=ON \
  204. -DWITH_ZIPKIN=ON \
  205. -DWITH_ELASTICSEARCH=ON \
  206. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  207. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  208. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  209. "${SRC_DIR}"
  210. make -j $(nproc)
  211. make test
  212. exit 0
  213. elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then
  214. cd "${BUILD_DIR}"
  215. rm -rf *
  216. cmake "${CMAKE_OPTIONS[@]}" \
  217. -DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \
  218. -DWITH_OPENTRACING=ON \
  219. "${SRC_DIR}"
  220. make -j $(nproc)
  221. make test
  222. exit 0
  223. elif [[ "$1" == "cmake.opentracing_shim.install.test" ]]; then
  224. cd "${BUILD_DIR}"
  225. rm -rf *
  226. rm -rf ${INSTALL_TEST_DIR}/*
  227. cmake "${CMAKE_OPTIONS[@]}" \
  228. -DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \
  229. -DWITH_OPENTRACING=ON \
  230. -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
  231. "${SRC_DIR}"
  232. make -j $(nproc)
  233. make test
  234. make install
  235. export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
  236. CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")
  237. EXPECTED_COMPONENTS=(
  238. "api"
  239. "sdk"
  240. "ext_common"
  241. "exporters_in_memory"
  242. "exporters_ostream"
  243. "shims_opentracing"
  244. )
  245. EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")
  246. mkdir -p "${BUILD_DIR}/install_test"
  247. cd "${BUILD_DIR}/install_test"
  248. cmake "${CMAKE_OPTIONS[@]}" \
  249. "-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
  250. "-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \
  251. "-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS_STRING}" \
  252. -S "${SRC_DIR}/install/test/cmake"
  253. ctest --output-on-failure
  254. exit 0
  255. elif [[ "$1" == "cmake.c++20.test" ]]; then
  256. cd "${BUILD_DIR}"
  257. rm -rf *
  258. cmake "${CMAKE_OPTIONS[@]}" \
  259. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  260. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  261. -DWITH_STL=CXX20 \
  262. "${SRC_DIR}"
  263. eval "$MAKE_COMMAND"
  264. make test
  265. exit 0
  266. elif [[ "$1" == "cmake.c++23.test" ]]; then
  267. cd "${BUILD_DIR}"
  268. rm -rf *
  269. cmake "${CMAKE_OPTIONS[@]}" \
  270. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  271. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  272. -DWITH_STL=CXX23 \
  273. "${SRC_DIR}"
  274. eval "$MAKE_COMMAND"
  275. make test
  276. exit 0
  277. elif [[ "$1" == "cmake.c++14.stl.test" ]]; then
  278. cd "${BUILD_DIR}"
  279. rm -rf *
  280. cmake "${CMAKE_OPTIONS[@]}" \
  281. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  282. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  283. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  284. -DWITH_STL=CXX14 \
  285. "${SRC_DIR}"
  286. eval "$MAKE_COMMAND"
  287. make test
  288. exit 0
  289. elif [[ "$1" == "cmake.c++17.stl.test" ]]; then
  290. cd "${BUILD_DIR}"
  291. rm -rf *
  292. cmake "${CMAKE_OPTIONS[@]}" \
  293. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  294. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  295. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  296. -DWITH_STL=CXX17 \
  297. "${SRC_DIR}"
  298. eval "$MAKE_COMMAND"
  299. make test
  300. exit 0
  301. elif [[ "$1" == "cmake.c++20.stl.test" ]]; then
  302. cd "${BUILD_DIR}"
  303. rm -rf *
  304. cmake "${CMAKE_OPTIONS[@]}" \
  305. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  306. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  307. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  308. -DWITH_STL=CXX20 \
  309. "${SRC_DIR}"
  310. eval "$MAKE_COMMAND"
  311. make test
  312. exit 0
  313. elif [[ "$1" == "cmake.c++23.stl.test" ]]; then
  314. cd "${BUILD_DIR}"
  315. rm -rf *
  316. cmake "${CMAKE_OPTIONS[@]}" \
  317. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  318. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  319. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  320. -DWITH_STL=CXX23 \
  321. "${SRC_DIR}"
  322. eval "$MAKE_COMMAND"
  323. make test
  324. exit 0
  325. elif [[ "$1" == "cmake.legacy.test" ]]; then
  326. cd "${BUILD_DIR}"
  327. rm -rf *
  328. export BUILD_ROOT="${BUILD_DIR}"
  329. ${SRC_DIR}/tools/build-benchmark.sh
  330. cmake "${CMAKE_OPTIONS[@]}" \
  331. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  332. "${SRC_DIR}"
  333. make -j $(nproc)
  334. make test
  335. exit 0
  336. elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then
  337. cd "${BUILD_DIR}"
  338. rm -rf *
  339. export BUILD_ROOT="${BUILD_DIR}"
  340. ${SRC_DIR}/tools/build-benchmark.sh
  341. cmake "${CMAKE_OPTIONS[@]}" \
  342. -DCMAKE_CXX_STANDARD=11 \
  343. -DWITH_OTLP_GRPC=ON \
  344. -DWITH_OTLP_HTTP=ON \
  345. -DWITH_OTLP_FILE=ON \
  346. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  347. "${SRC_DIR}"
  348. grpc_cpp_plugin=`which grpc_cpp_plugin`
  349. proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"
  350. sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme
  351. make -j $(nproc)
  352. cd exporters/otlp && make test
  353. exit 0
  354. elif [[ "$1" == "cmake.exporter.otprotocol.test" ]]; then
  355. cd "${BUILD_DIR}"
  356. rm -rf *
  357. cmake "${CMAKE_OPTIONS[@]}" \
  358. -DWITH_OTLP_GRPC=ON \
  359. -DWITH_OTLP_HTTP=ON \
  360. -DWITH_OTLP_FILE=ON \
  361. -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \
  362. -DWITH_OTLP_RETRY_PREVIEW=ON \
  363. "${SRC_DIR}"
  364. grpc_cpp_plugin=`which grpc_cpp_plugin`
  365. proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"
  366. sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme
  367. make -j $(nproc)
  368. cd exporters/otlp && make test
  369. exit 0
  370. elif [[ "$1" == "cmake.exporter.otprotocol.shared_libs.with_static_grpc.test" ]]; then
  371. cd "${BUILD_DIR}"
  372. rm -rf *
  373. cmake "${CMAKE_OPTIONS[@]}" \
  374. -DWITH_OTLP_GRPC=ON \
  375. -DWITH_OTLP_HTTP=ON \
  376. -DWITH_OTLP_FILE=ON \
  377. -DBUILD_SHARED_LIBS=ON \
  378. "${SRC_DIR}"
  379. grpc_cpp_plugin=`which grpc_cpp_plugin`
  380. proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"
  381. sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme
  382. make -j $(nproc)
  383. cd exporters/otlp && make test
  384. exit 0
  385. elif [[ "$1" == "cmake.exporter.otprotocol.with_async_export.test" ]]; then
  386. cd "${BUILD_DIR}"
  387. rm -rf *
  388. cmake "${CMAKE_OPTIONS[@]}" \
  389. -DWITH_OTLP_GRPC=ON \
  390. -DWITH_OTLP_HTTP=ON \
  391. -DWITH_OTLP_FILE=ON \
  392. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  393. "${SRC_DIR}"
  394. grpc_cpp_plugin=`which grpc_cpp_plugin`
  395. proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"
  396. sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme
  397. make -j $(nproc)
  398. cd exporters/otlp && make test
  399. exit 0
  400. elif [[ "$1" == "cmake.w3c.trace-context.build-server" ]]; then
  401. echo "Building w3c trace context test server"
  402. cd "${BUILD_DIR}"
  403. rm -rf *
  404. cmake "${CMAKE_OPTIONS[@]}" \
  405. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  406. -DCMAKE_CXX_STANDARD=${CXX_STANDARD} \
  407. "${SRC_DIR}"
  408. eval "$MAKE_COMMAND"
  409. exit 0
  410. elif [[ "$1" == "cmake.do_not_install.test" ]]; then
  411. cd "${BUILD_DIR}"
  412. rm -rf *
  413. cmake "${CMAKE_OPTIONS[@]}" \
  414. -DWITH_OTLP_GRPC=ON \
  415. -DWITH_OTLP_HTTP=ON \
  416. -DWITH_OTLP_FILE=ON \
  417. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  418. -DOPENTELEMETRY_INSTALL=OFF \
  419. "${SRC_DIR}"
  420. grpc_cpp_plugin=`which grpc_cpp_plugin`
  421. proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"
  422. sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme
  423. make -j $(nproc)
  424. cd exporters/otlp && make test
  425. exit 0
  426. elif [[ "$1" == "cmake.install.test" ]]; then
  427. if [[ -n "${BUILD_SHARED_LIBS}" && "${BUILD_SHARED_LIBS}" == "ON" ]]; then
  428. CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=ON")
  429. echo "BUILD_SHARED_LIBS is set to: ON"
  430. else
  431. CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=OFF")
  432. echo "BUILD_SHARED_LIBS is set to: OFF"
  433. fi
  434. CMAKE_OPTIONS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
  435. cd "${BUILD_DIR}"
  436. rm -rf *
  437. rm -rf ${INSTALL_TEST_DIR}/*
  438. cmake "${CMAKE_OPTIONS[@]}" \
  439. -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
  440. -DWITH_ABI_VERSION_1=OFF \
  441. -DWITH_ABI_VERSION_2=ON \
  442. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  443. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  444. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  445. -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \
  446. -DWITH_OTLP_RETRY_PREVIEW=ON \
  447. -DWITH_OTLP_GRPC=ON \
  448. -DWITH_OTLP_HTTP=ON \
  449. -DWITH_OTLP_FILE=ON \
  450. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  451. -DWITH_HTTP_CLIENT_CURL=ON \
  452. -DWITH_PROMETHEUS=ON \
  453. -DWITH_ZIPKIN=ON \
  454. -DWITH_ELASTICSEARCH=ON \
  455. -DWITH_EXAMPLES=ON \
  456. -DWITH_EXAMPLES_HTTP=ON \
  457. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  458. -DOPENTELEMETRY_INSTALL=ON \
  459. "${SRC_DIR}"
  460. make -j $(nproc)
  461. make test
  462. make install
  463. export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
  464. CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")
  465. EXPECTED_COMPONENTS=(
  466. "api"
  467. "sdk"
  468. "ext_common"
  469. "ext_http_curl"
  470. "exporters_in_memory"
  471. "exporters_ostream"
  472. "exporters_otlp_common"
  473. "exporters_otlp_file"
  474. "exporters_otlp_grpc"
  475. "exporters_otlp_http"
  476. "exporters_prometheus"
  477. "exporters_elasticsearch"
  478. "exporters_zipkin"
  479. )
  480. EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")
  481. mkdir -p "${BUILD_DIR}/install_test"
  482. cd "${BUILD_DIR}/install_test"
  483. cmake "${CMAKE_OPTIONS[@]}" \
  484. "-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
  485. "-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \
  486. "-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS_STRING}" \
  487. -S "${SRC_DIR}/install/test/cmake"
  488. ctest --output-on-failure
  489. exit 0
  490. elif [[ "$1" == "cmake.fetch_content.test" ]]; then
  491. if [[ -n "${BUILD_SHARED_LIBS}" && "${BUILD_SHARED_LIBS}" == "ON" ]]; then
  492. CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=ON")
  493. echo "BUILD_SHARED_LIBS is set to: ON"
  494. else
  495. CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=OFF")
  496. echo "BUILD_SHARED_LIBS is set to: OFF"
  497. fi
  498. CMAKE_OPTIONS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
  499. cd "${BUILD_DIR}"
  500. rm -rf *
  501. cmake "${CMAKE_OPTIONS[@]}" \
  502. -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
  503. -DWITH_ABI_VERSION_1=OFF \
  504. -DWITH_ABI_VERSION_2=ON \
  505. -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
  506. -DWITH_ASYNC_EXPORT_PREVIEW=ON \
  507. -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
  508. -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \
  509. -DWITH_OTLP_RETRY_PREVIEW=ON \
  510. -DWITH_OTLP_GRPC=ON \
  511. -DWITH_OTLP_HTTP=ON \
  512. -DWITH_OTLP_FILE=ON \
  513. -DWITH_OTLP_HTTP_COMPRESSION=ON \
  514. -DWITH_HTTP_CLIENT_CURL=ON \
  515. -DWITH_PROMETHEUS=ON \
  516. -DWITH_ZIPKIN=ON \
  517. -DWITH_ELASTICSEARCH=ON \
  518. -DWITH_EXAMPLES=ON \
  519. -DWITH_EXAMPLES_HTTP=ON \
  520. -DBUILD_W3CTRACECONTEXT_TEST=ON \
  521. -DOPENTELEMETRY_INSTALL=OFF \
  522. -DOPENTELEMETRY_CPP_SRC_DIR="${SRC_DIR}" \
  523. "${SRC_DIR}/install/test/cmake/fetch_content_test"
  524. make -j $(nproc)
  525. make test
  526. exit 0
  527. elif [[ "$1" == "cmake.test_example_plugin" ]]; then
  528. # Build the plugin
  529. cd "${BUILD_DIR}"
  530. rm -rf *
  531. cat <<EOF > export.map
  532. {
  533. global:
  534. OpenTelemetryMakeFactoryImpl;
  535. local: *;
  536. };
  537. EOF
  538. LINKER_FLAGS="\
  539. -static-libstdc++ \
  540. -static-libgcc \
  541. -Wl,--version-script=${PWD}/export.map \
  542. "
  543. cmake "${CMAKE_OPTIONS[@]}" \
  544. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  545. -DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \
  546. -DCMAKE_SHARED_LINKER_FLAGS="$LINKER_FLAGS" \
  547. "${SRC_DIR}"
  548. make example_plugin
  549. cp examples/plugin/plugin/libexample_plugin.so ${PLUGIN_DIR}
  550. # Verify we can load the plugin
  551. cd "${BUILD_DIR}"
  552. rm -rf *
  553. cmake "${CMAKE_OPTIONS[@]}" \
  554. -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
  555. "${SRC_DIR}"
  556. make load_plugin_example
  557. examples/plugin/load/load_plugin_example ${PLUGIN_DIR}/libexample_plugin.so /dev/null
  558. exit 0
  559. elif [[ "$1" == "bazel.no_bzlmod.test" ]]; then
  560. bazel $BAZEL_STARTUP_OPTIONS build --enable_bzlmod=false $BAZEL_OPTIONS //...
  561. bazel $BAZEL_STARTUP_OPTIONS test --enable_bzlmod=false $BAZEL_TEST_OPTIONS //...
  562. exit 0
  563. elif [[ "$1" == "bazel.test" ]]; then
  564. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS //...
  565. bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS //...
  566. exit 0
  567. elif [[ "$1" == "bazel.with_async_export.test" ]]; then
  568. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //...
  569. bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS_ASYNC //...
  570. exit 0
  571. elif [[ "$1" == "bazel.benchmark" ]]; then
  572. run_benchmarks
  573. exit 0
  574. elif [[ "$1" == "bazel.macos.test" ]]; then
  575. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_MACOS_OPTIONS -- //...
  576. bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_MACOS_TEST_OPTIONS -- //...
  577. exit 0
  578. elif [[ "$1" == "bazel.legacy.test" ]]; then
  579. # we uses C++ future and async() function to test the Prometheus Exporter functionality,
  580. # that make this test always fail. ignore Prometheus exporter here.
  581. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -- //... -//exporters/otlp/... -//exporters/prometheus/...
  582. bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/otlp/... -//exporters/prometheus/...
  583. exit 0
  584. elif [[ "$1" == "bazel.noexcept" ]]; then
  585. # there are some exceptions and error handling code from the Prometheus Client
  586. # as well as Opentracing shim (due to some third party code in its Opentracing dependency)
  587. # that make this test always fail. Ignore these packages in the noexcept test here.
  588. bazel $BAZEL_STARTUP_OPTIONS build --copt=-fno-exceptions $BAZEL_OPTIONS_ASYNC -- //... -//exporters/prometheus/... -//examples/prometheus/... -//opentracing-shim/...
  589. bazel $BAZEL_STARTUP_OPTIONS test --copt=-fno-exceptions $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/prometheus/... -//examples/prometheus/... -//opentracing-shim/...
  590. exit 0
  591. elif [[ "$1" == "bazel.nortti" ]]; then
  592. # there are some exceptions and error handling code from the Prometheus Client
  593. # that make this test always fail. Ignore these packages in the nortti test here.
  594. bazel $BAZEL_STARTUP_OPTIONS build --cxxopt=-fno-rtti $BAZEL_OPTIONS_ASYNC -- //... -//exporters/prometheus/...
  595. bazel $BAZEL_STARTUP_OPTIONS test --cxxopt=-fno-rtti $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/prometheus/...
  596. exit 0
  597. elif [[ "$1" == "bazel.asan" ]]; then
  598. bazel $BAZEL_STARTUP_OPTIONS test --config=asan $BAZEL_TEST_OPTIONS_ASYNC //...
  599. exit 0
  600. elif [[ "$1" == "bazel.tsan" ]]; then
  601. # TODO - potential race condition in Civetweb server used by prometheus-cpp during shutdown
  602. # https://github.com/civetweb/civetweb/issues/861, so removing prometheus from the test
  603. bazel $BAZEL_STARTUP_OPTIONS test --config=tsan $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/prometheus/...
  604. exit 0
  605. elif [[ "$1" == "bazel.valgrind" ]]; then
  606. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //...
  607. bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --error-exitcode=1 --errors-for-leak-kinds=definite --suppressions=\"${SRC_DIR}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS_ASYNC //...
  608. exit 0
  609. elif [[ "$1" == "bazel.e2e" ]]; then
  610. cd examples/e2e
  611. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_DEFAULT //...
  612. exit 0
  613. elif [[ "$1" == "benchmark" ]]; then
  614. [ -z "${BENCHMARK_DIR}" ] && export BENCHMARK_DIR=$HOME/benchmark
  615. bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -c opt -- \
  616. $(bazel query 'attr("tags", "benchmark_result", ...)')
  617. echo ""
  618. echo "Benchmark results in $BENCHMARK_DIR:"
  619. (
  620. cd bazel-bin
  621. find . -name \*_result.json -exec bash -c \
  622. 'echo "$@" && mkdir -p "$BENCHMARK_DIR/$(dirname "$@")" && \
  623. cp "$@" "$BENCHMARK_DIR/$@" && chmod +w "$BENCHMARK_DIR/$@"' _ {} \;
  624. )
  625. exit 0
  626. elif [[ "$1" == "format" ]]; then
  627. tools/format.sh
  628. CHANGED="$(git ls-files --modified)"
  629. if [[ ! -z "$CHANGED" ]]; then
  630. echo "The following files have changes:"
  631. echo "$CHANGED"
  632. git diff
  633. exit 1
  634. fi
  635. exit 0
  636. elif [[ "$1" == "code.coverage" ]]; then
  637. cd "${BUILD_DIR}"
  638. rm -rf *
  639. cmake "${CMAKE_OPTIONS[@]}" \
  640. -DCMAKE_CXX_FLAGS="-Werror --coverage $CXXFLAGS" \
  641. "${SRC_DIR}"
  642. make
  643. make test
  644. lcov --directory $PWD --capture --output-file coverage.info
  645. # removing test http server coverage from the total coverage. We don't use this server completely.
  646. lcov --remove coverage.info '*/ext/http/server/*'> tmp_coverage.info 2>/dev/null
  647. cp tmp_coverage.info coverage.info
  648. exit 0
  649. elif [[ "$1" == "third_party.tags" ]]; then
  650. echo "gRPC=v1.49.2" > third_party_release
  651. echo "abseil=20240116.1" >> third_party_release
  652. git submodule foreach --quiet 'echo "$name=$(git describe --tags HEAD)"' | sed 's:.*/::' >> third_party_release
  653. exit 0
  654. fi
  655. echo "Invalid do_ci.sh target, see ci/README.md for valid targets."
  656. exit 1