| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688 | #!/bin/bash# Copyright The OpenTelemetry Authors# SPDX-License-Identifier: Apache-2.0set -efunction install_prometheus_cpp_client{  pushd third_party/prometheus-cpp  git submodule update --recursive --init  [[ -d _build ]] && rm -rf ./_build  mkdir _build && cd _build  cmake .. -DBUILD_SHARED_LIBS=ON -DUSE_THIRDPARTY_LIBRARIES=ON  make -j $(nproc)  sudo make install  popd}function run_benchmarks{  docker run -d --rm -it -p 4317:4317 -p 4318:4318 -v \    $(pwd)/examples/otlp:/cfg otel/opentelemetry-collector:0.109.0 \    --config=/cfg/opentelemetry-collector-config/config.dev.yaml  [ -z "${BENCHMARK_DIR}" ] && export BENCHMARK_DIR=$HOME/benchmark  mkdir -p $BENCHMARK_DIR  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -c opt -- \    $(bazel query 'attr("tags", "benchmark_result", ...)')  echo ""  echo "Benchmark results in $BENCHMARK_DIR:"  (    cd bazel-bin    find . -name \*_result.json -exec bash -c \      'echo "$@" && mkdir -p "$BENCHMARK_DIR/$(dirname "$@")" && \       cp "$@" "$BENCHMARK_DIR/$@" && chmod +w "$BENCHMARK_DIR/$@"' _ {} \;  )  # collect benchmark results into one array  pushd $BENCHMARK_DIR  components=(api sdk exporters)  for component in "${components[@]}"  do    out=$component-benchmark_result.json    find ./$component -type f -name "*_result.json" -exec cat {} \; > $component_tmp_bench.json    # Print each result in CI logs, so it can be inspected.    echo "BENCHMARK result (begin)"    cat $component_tmp_bench.json    echo "BENCHMARK result (end)"    cat $component_tmp_bench.json | docker run -i --rm itchyny/gojq:0.12.6 -s \      '.[0].benchmarks = ([.[].benchmarks] | add) |      if .[0].benchmarks == null then null else .[0] end' > $BENCHMARK_DIR/$out  done  mv *benchmark_result.json ${SRC_DIR}  popd  docker kill $(docker ps -q)}[ -z "${SRC_DIR}" ] && export SRC_DIR="`pwd`"[ -z "${BUILD_DIR}" ] && export BUILD_DIR=$HOME/buildmkdir -p "${BUILD_DIR}"[ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/pluginmkdir -p "${PLUGIN_DIR}"[ -z "${INSTALL_TEST_DIR}" ] && export INSTALL_TEST_DIR=$HOME/install_testmkdir -p "${INSTALL_TEST_DIR}"MAKE_COMMAND="make -k -j \$(nproc)"echo "make command: ${MAKE_COMMAND}"BAZEL_OPTIONS_DEFAULT="--copt=-DENABLE_METRICS_EXEMPLAR_PREVIEW"BAZEL_OPTIONS="$BAZEL_OPTIONS_DEFAULT"BAZEL_TEST_OPTIONS="$BAZEL_OPTIONS --test_output=errors"BAZEL_OPTIONS_ASYNC="$BAZEL_OPTIONS --copt=-DENABLE_ASYNC_EXPORT"BAZEL_TEST_OPTIONS_ASYNC="$BAZEL_OPTIONS_ASYNC --test_output=errors"# https://github.com/bazelbuild/bazel/issues/4341BAZEL_MACOS_OPTIONS="$BAZEL_OPTIONS_ASYNC --features=-supports_dynamic_linker"BAZEL_MACOS_TEST_OPTIONS="$BAZEL_MACOS_OPTIONS --test_output=errors"BAZEL_STARTUP_OPTIONS="--output_user_root=$HOME/.cache/bazel"if [[ "${BUILD_TYPE}" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then  CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=${BUILD_TYPE})else  CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=Debug)fiif [ -n "${CXX_STANDARD}" ]; then  CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")else  CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=14")fiCMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD_REQUIRED=ON")CMAKE_OPTIONS+=("-DCMAKE_CXX_EXTENSIONS=OFF")if [ -n "$CMAKE_TOOLCHAIN_FILE" ]; then  echo "CMAKE_TOOLCHAIN_FILE is set to: $CMAKE_TOOLCHAIN_FILE"  CMAKE_OPTIONS+=("-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE")fiecho "CMAKE_OPTIONS:" "${CMAKE_OPTIONS[@]}"export CTEST_OUTPUT_ON_FAILURE=1if [[ "$1" == "cmake.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_PROMETHEUS=ON \        -DWITH_ZIPKIN=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        "${SRC_DIR}"  make -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.maintainer.sync.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DWITH_ZIPKIN=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=OFF \        -DOTELCPP_MAINTAINER_MODE=ON \        -DWITH_NO_DEPRECATED_CODE=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.maintainer.async.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DWITH_ZIPKIN=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DOTELCPP_MAINTAINER_MODE=ON \        -DWITH_NO_DEPRECATED_CODE=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.maintainer.cpp11.async.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_STANDARD=11 \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DWITH_ZIPKIN=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DOTELCPP_MAINTAINER_MODE=ON \        -DWITH_NO_DEPRECATED_CODE=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        "${SRC_DIR}"  make -k -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.maintainer.abiv2.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DWITH_ZIPKIN=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=OFF \        -DOTELCPP_MAINTAINER_MODE=ON \        -DWITH_NO_DEPRECATED_CODE=ON \        -DWITH_ABI_VERSION_1=OFF \        -DWITH_ABI_VERSION_2=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.with_async_export.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_PROMETHEUS=ON \        -DWITH_ZIPKIN=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        "${SRC_DIR}"  make -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}" \        -DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \        -DWITH_OPENTRACING=ON \        "${SRC_DIR}"  make -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.opentracing_shim.install.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  rm -rf ${INSTALL_TEST_DIR}/*  cmake "${CMAKE_OPTIONS[@]}" \        -DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \        -DWITH_OPENTRACING=ON \        -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \        "${SRC_DIR}"  make -j $(nproc)  make test  make install  export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"  CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")  EXPECTED_COMPONENTS=(    "api"    "sdk"    "ext_common"    "exporters_in_memory"    "exporters_ostream"    "shims_opentracing"  )  EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")  mkdir -p "${BUILD_DIR}/install_test"  cd "${BUILD_DIR}/install_test"  cmake "${CMAKE_OPTIONS[@]}" \        "-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \        "-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \        "-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS_STRING}" \        -S "${SRC_DIR}/install/test/cmake"  ctest --output-on-failure  exit 0elif [[ "$1" == "cmake.c++20.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX20 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.c++23.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX23 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.c++14.stl.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX14 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.c++17.stl.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX17 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.c++20.stl.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX20 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.c++23.stl.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_STL=CXX23 \        "${SRC_DIR}"  eval "$MAKE_COMMAND"  make test  exit 0elif [[ "$1" == "cmake.legacy.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  export BUILD_ROOT="${BUILD_DIR}"  ${SRC_DIR}/tools/build-benchmark.sh  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        "${SRC_DIR}"  make -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  export BUILD_ROOT="${BUILD_DIR}"  ${SRC_DIR}/tools/build-benchmark.sh  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_STANDARD=11 \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        "${SRC_DIR}"  grpc_cpp_plugin=`which grpc_cpp_plugin`  proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"  sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme  make -j $(nproc)  cd exporters/otlp && make test  exit 0elif [[ "$1" == "cmake.exporter.otprotocol.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        "${SRC_DIR}"  grpc_cpp_plugin=`which grpc_cpp_plugin`  proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"  sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme  make -j $(nproc)  cd exporters/otlp && make test  exit 0elif [[ "$1" == "cmake.exporter.otprotocol.shared_libs.with_static_grpc.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DBUILD_SHARED_LIBS=ON \        "${SRC_DIR}"  grpc_cpp_plugin=`which grpc_cpp_plugin`  proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"  sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme  make -j $(nproc)  cd exporters/otlp && make test  exit 0elif [[ "$1" == "cmake.exporter.otprotocol.with_async_export.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        "${SRC_DIR}"  grpc_cpp_plugin=`which grpc_cpp_plugin`  proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"  sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme  make -j $(nproc)  cd exporters/otlp && make test  exit 0elif [[ "$1" == "cmake.w3c.trace-context.build-server" ]]; then  echo "Building w3c trace context test server"  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \          -DBUILD_W3CTRACECONTEXT_TEST=ON \          -DCMAKE_CXX_STANDARD=${CXX_STANDARD} \          "${SRC_DIR}"  eval "$MAKE_COMMAND"  exit 0elif [[ "$1" == "cmake.do_not_install.test" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DOPENTELEMETRY_INSTALL=OFF \        "${SRC_DIR}"  grpc_cpp_plugin=`which grpc_cpp_plugin`  proto_make_file="CMakeFiles/opentelemetry_proto.dir/build.make"  sed -i "s~gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND~$grpc_cpp_plugin~" ${proto_make_file} #fixme  make -j $(nproc)  cd exporters/otlp && make test  exit 0elif [[ "$1" == "cmake.install.test" ]]; then  if [[ -n "${BUILD_SHARED_LIBS}" && "${BUILD_SHARED_LIBS}" == "ON" ]]; then    CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=ON")    echo "BUILD_SHARED_LIBS is set to: ON"  else    CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=OFF")    echo "BUILD_SHARED_LIBS is set to: OFF"  fi  CMAKE_OPTIONS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON")  cd "${BUILD_DIR}"  rm -rf *  rm -rf ${INSTALL_TEST_DIR}/*  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \        -DWITH_ABI_VERSION_1=OFF \        -DWITH_ABI_VERSION_2=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_HTTP_CLIENT_CURL=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_ZIPKIN=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DOPENTELEMETRY_INSTALL=ON \        "${SRC_DIR}"  make -j $(nproc)  make test  make install  export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"  CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")  EXPECTED_COMPONENTS=(    "api"    "sdk"    "ext_common"    "ext_http_curl"    "exporters_in_memory"    "exporters_ostream"    "exporters_otlp_common"    "exporters_otlp_file"    "exporters_otlp_grpc"    "exporters_otlp_http"    "exporters_prometheus"    "exporters_elasticsearch"    "exporters_zipkin"  )  EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")  mkdir -p "${BUILD_DIR}/install_test"  cd "${BUILD_DIR}/install_test"  cmake  "${CMAKE_OPTIONS[@]}" \         "-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \         "-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \         "-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS_STRING}" \         -S "${SRC_DIR}/install/test/cmake"  ctest --output-on-failure  exit 0elif [[ "$1" == "cmake.fetch_content.test" ]]; then  if [[ -n "${BUILD_SHARED_LIBS}" && "${BUILD_SHARED_LIBS}" == "ON" ]]; then    CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=ON")    echo "BUILD_SHARED_LIBS is set to: ON"  else    CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=OFF")    echo "BUILD_SHARED_LIBS is set to: OFF"  fi  CMAKE_OPTIONS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON")  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \        -DWITH_ABI_VERSION_1=OFF \        -DWITH_ABI_VERSION_2=ON \        -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \        -DWITH_ASYNC_EXPORT_PREVIEW=ON \        -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \        -DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \        -DWITH_OTLP_RETRY_PREVIEW=ON \        -DWITH_OTLP_GRPC=ON \        -DWITH_OTLP_HTTP=ON \        -DWITH_OTLP_FILE=ON \        -DWITH_OTLP_HTTP_COMPRESSION=ON \        -DWITH_HTTP_CLIENT_CURL=ON \        -DWITH_PROMETHEUS=ON \        -DWITH_ZIPKIN=ON \        -DWITH_ELASTICSEARCH=ON \        -DWITH_EXAMPLES=ON \        -DWITH_EXAMPLES_HTTP=ON \        -DBUILD_W3CTRACECONTEXT_TEST=ON \        -DOPENTELEMETRY_INSTALL=OFF \        -DOPENTELEMETRY_CPP_SRC_DIR="${SRC_DIR}" \        "${SRC_DIR}/install/test/cmake/fetch_content_test"  make -j $(nproc)  make test  exit 0elif [[ "$1" == "cmake.test_example_plugin" ]]; then  # Build the plugin  cd "${BUILD_DIR}"  rm -rf *  cat <<EOF > export.map{  global:    OpenTelemetryMakeFactoryImpl;  local: *;};EOF  LINKER_FLAGS="\    -static-libstdc++ \    -static-libgcc \    -Wl,--version-script=${PWD}/export.map \  "  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        -DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \        -DCMAKE_SHARED_LINKER_FLAGS="$LINKER_FLAGS" \        "${SRC_DIR}"  make example_plugin  cp examples/plugin/plugin/libexample_plugin.so ${PLUGIN_DIR}  # Verify we can load the plugin  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \        "${SRC_DIR}"  make load_plugin_example  examples/plugin/load/load_plugin_example ${PLUGIN_DIR}/libexample_plugin.so /dev/null  exit 0elif [[ "$1" == "bazel.no_bzlmod.test" ]]; then  bazel $BAZEL_STARTUP_OPTIONS build --enable_bzlmod=false $BAZEL_OPTIONS //...  bazel $BAZEL_STARTUP_OPTIONS test --enable_bzlmod=false $BAZEL_TEST_OPTIONS //...  exit 0elif [[ "$1" == "bazel.test" ]]; then  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS //...  bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS //...  exit 0elif [[ "$1" == "bazel.with_async_export.test" ]]; then  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //...  bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS_ASYNC //...  exit 0elif [[ "$1" == "bazel.benchmark" ]]; then  run_benchmarks  exit 0elif [[ "$1" == "bazel.macos.test" ]]; then  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_MACOS_OPTIONS -- //...  bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_MACOS_TEST_OPTIONS -- //...  exit 0elif [[ "$1" == "bazel.legacy.test" ]]; then  # we uses C++ future and async() function to test the Prometheus Exporter functionality,  # that make this test always fail. ignore Prometheus exporter here.  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -- //... -//exporters/otlp/... -//exporters/prometheus/...  bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/otlp/... -//exporters/prometheus/...  exit 0elif [[ "$1" == "bazel.noexcept" ]]; then  # there are some exceptions and error handling code from the Prometheus Client  # as well as Opentracing shim (due to some third party code in its Opentracing dependency)  # that make this test always fail. Ignore these packages in the noexcept test here.  bazel $BAZEL_STARTUP_OPTIONS build --copt=-fno-exceptions $BAZEL_OPTIONS_ASYNC -- //... -//exporters/prometheus/... -//examples/prometheus/... -//opentracing-shim/...  bazel $BAZEL_STARTUP_OPTIONS test --copt=-fno-exceptions $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/prometheus/... -//examples/prometheus/... -//opentracing-shim/...  exit 0elif [[ "$1" == "bazel.nortti" ]]; then  # there are some exceptions and error handling code from the Prometheus Client  # that make this test always fail. Ignore these packages in the nortti test here.  bazel $BAZEL_STARTUP_OPTIONS build --cxxopt=-fno-rtti $BAZEL_OPTIONS_ASYNC -- //... -//exporters/prometheus/...  bazel $BAZEL_STARTUP_OPTIONS test --cxxopt=-fno-rtti $BAZEL_TEST_OPTIONS_ASYNC -- //... -//exporters/prometheus/...  exit 0elif [[ "$1" == "bazel.asan" ]]; then  bazel $BAZEL_STARTUP_OPTIONS test --config=asan $BAZEL_TEST_OPTIONS_ASYNC //...  exit 0elif [[ "$1" == "bazel.tsan" ]]; then# TODO - potential race condition in Civetweb server used by prometheus-cpp during shutdown# https://github.com/civetweb/civetweb/issues/861, so removing prometheus from the test  bazel $BAZEL_STARTUP_OPTIONS test --config=tsan $BAZEL_TEST_OPTIONS_ASYNC  -- //... -//exporters/prometheus/...  exit 0elif [[ "$1" == "bazel.valgrind" ]]; then  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //...  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 //...  exit 0elif [[ "$1" == "bazel.e2e" ]]; then  cd examples/e2e  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_DEFAULT //...  exit 0elif [[ "$1" == "benchmark" ]]; then  [ -z "${BENCHMARK_DIR}" ] && export BENCHMARK_DIR=$HOME/benchmark  bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC -c opt -- \    $(bazel query 'attr("tags", "benchmark_result", ...)')  echo ""  echo "Benchmark results in $BENCHMARK_DIR:"  (    cd bazel-bin    find . -name \*_result.json -exec bash -c \      'echo "$@" && mkdir -p "$BENCHMARK_DIR/$(dirname "$@")" && \       cp "$@" "$BENCHMARK_DIR/$@" && chmod +w "$BENCHMARK_DIR/$@"' _ {} \;  )  exit 0elif [[ "$1" == "format" ]]; then  tools/format.sh  CHANGED="$(git ls-files --modified)"  if [[ ! -z "$CHANGED" ]]; then    echo "The following files have changes:"    echo "$CHANGED"    git diff    exit 1  fi  exit 0elif [[ "$1" == "code.coverage" ]]; then  cd "${BUILD_DIR}"  rm -rf *  cmake "${CMAKE_OPTIONS[@]}"  \        -DCMAKE_CXX_FLAGS="-Werror --coverage $CXXFLAGS" \        "${SRC_DIR}"  make  make test  lcov --directory $PWD --capture --output-file coverage.info  # removing test http server coverage from the total coverage. We don't use this server completely.  lcov --remove coverage.info '*/ext/http/server/*'> tmp_coverage.info 2>/dev/null  cp tmp_coverage.info coverage.info  exit 0elif [[ "$1" == "third_party.tags" ]]; then  echo "gRPC=v1.49.2" > third_party_release  echo "abseil=20240116.1" >> third_party_release  git submodule foreach --quiet 'echo "$name=$(git describe --tags HEAD)"' | sed 's:.*/::' >> third_party_release  exit 0fiecho "Invalid do_ci.sh target, see ci/README.md for valid targets."exit 1
 |