diff --git a/.github/workflows/test-runner.yml b/.github/workflows/test-runner.yml index b36abbb02c7fe..332fc660dbd67 100644 --- a/.github/workflows/test-runner.yml +++ b/.github/workflows/test-runner.yml @@ -88,15 +88,17 @@ jobs: execute-integration-tests: true secrets: inherit windows-bazel: + # Disabled + if: false # Build the full matrix only on push events to the default branch, or # when PR gets the has a `gha:full-build` label, or when it had the # label already and it gets a new commit. - if: |- - ${{ - github.event_name == 'schedule' || - github.event_name == 'push' || - contains(github.event.pull_request.labels.*.name, 'gha:full-build') - }} +# if: |- +# ${{ +# github.event_name == 'schedule' || +# github.event_name == 'push' || +# contains(github.event.pull_request.labels.*.name, 'gha:full-build') +# }} name: Windows-Bazel needs: [pre-flight] uses: ./.github/workflows/windows-bazel.yml @@ -127,8 +129,6 @@ jobs: execute-integration-tests: true secrets: inherit windows-cmake: - # Disabled - if: false name: Windows-CMake needs: [pre-flight] uses: ./.github/workflows/windows-cmake.yml @@ -147,39 +147,3 @@ jobs: vcpkg-cache-mode: 'readwrite' execute-integration-tests: true secrets: inherit - notify: - name: Notify-Google-Chat - # Wait until all the other jobs have completed. - needs: - # macos-bazel is disabled - # macos-cmake is disabled - - windows-bazel - # windows-cmake is disabled is disabled - # Run even if the other jobs failed or were skipped. - if: always() - runs-on: ubuntu-latest - steps: - - name: Notify Google Chat - shell: bash - run: | - event_name="${{ github.event_name }}" - case "${event_name}" in - schedule) - ;; - push) - ;; - *) - exit 0 - ;; - esac - failure="${{ contains(needs.*.result, 'failure') }}" - cancelled="${{ contains(needs.*.result, 'cancelled') }}" - status="" - # Report whether any of the jobs failed or were cancelled. - if [[ "${cancelled}" == "true" ]]; then status="cancelled"; fi - if [[ "${failure}" == "true" ]]; then status="failure"; fi - # Exit early if there is nothing interesting to report. - if [[ -z "${status}" ]]; then exit 0; fi - printf '{"text": "GHA Build %s %s/%s/actions/runs/%s"}' \ - "${status}" "${{ github.server_url }}" "${{ github.repository }}" "${{ github.run_id }}" | - curl -fsX POST -o /dev/null -d@- -H "Content-Type: application/json; charset=UTF-8" '${{ secrets.CLOUD_CPP_BUILD_ALERTS_WEBHOOK }}' diff --git a/.github/workflows/windows-cmake.yml b/.github/workflows/windows-cmake.yml index e4df0d5868dcd..32347844027dc 100644 --- a/.github/workflows/windows-cmake.yml +++ b/.github/workflows/windows-cmake.yml @@ -41,7 +41,7 @@ jobs: msvc: [ msvc-2022 ] build_type: [ Release ] arch: [ x64 ] - shard: [ Core3, Core4 ] + shard: [ Core1, Core2, Core3, Core4, Core5, Compute, AIPlatform, Shard1, Shard2, Shard3, Shard4, Shard5 ] exclude: # Also skip shards (Compute and Other) that contain only generated code. - exclude-from-full-trick: ${{ ! inputs.full-matrix }} @@ -103,6 +103,7 @@ jobs: dataproc discoveryengine monitoring + opentelemetry retail sql dialogflow_cx @@ -209,6 +210,8 @@ jobs: universe_domain ) shard5_features=( + asset + channel video datacatalog iam @@ -269,10 +272,6 @@ jobs: skipped_features+=("${shard3_features[@]}") skipped_features+=("${shard4_features[@]}") skipped_features+=("${shard5_features[@]}") - # We use vcpkg in this build, which ships with Protobuf v21.x. - # Both `asset` and `channel` require Protobuf >= 23.x to compile on - # Windows. - skipped_features+=(asset channel) skipped="$(printf ",-%s" "${skipped_features[@]}")" echo "features=__ga_libraries__,__experimental_libraries__,${skipped:1}" >> "${GITHUB_OUTPUT}" fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 156cf8a2ef011..c0c4daab368f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,10 @@ if (APPLE " cmake -DGOOGLE_CLOUD_CPP_ENABLE_MACOS_OPENSSL_CHECK=OFF ...") endif () +if (WIN32) + add_definitions(-DNOMINMAX) +endif () + # If ccache is installed use it for the build. option(GOOGLE_CLOUD_CPP_ENABLE_CCACHE "Automatically use ccache if available" OFF) diff --git a/ci/cloudbuild/builds/cmake-oldest-deps.sh b/ci/cloudbuild/builds/cmake-oldest-deps.sh index b22347005ac0f..8a3e5cc63b4cc 100755 --- a/ci/cloudbuild/builds/cmake-oldest-deps.sh +++ b/ci/cloudbuild/builds/cmake-oldest-deps.sh @@ -33,6 +33,18 @@ ENABLED_FEATURES="$(printf ",%s" "${feature_list[@]}")" ENABLED_FEATURES="${ENABLED_FEATURES:1}" readonly ENABLED_FEATURES +export VCPKG_OVERLAY_PORTS="ci/gha/builds/vcpkg-overlays" + +function exit_trap() { + local exit_status=$? + io::log_h2 "cleanup on EXIT with exit_status=${exit_status}" + if ((exit_status != 0)); then + cat /workspace/cmake-out/build/vcpkg-manifest-install.log + fi +} + +trap 'exit_trap' INT TERM EXIT + io::log_h2 "Configuring" vcpkg_root="$(vcpkg::root_dir)" cmake -GNinja -S . -B cmake-out/build \ diff --git a/ci/cloudbuild/dockerfiles/ubuntu-22.04.Dockerfile b/ci/cloudbuild/dockerfiles/ubuntu-22.04.Dockerfile new file mode 100644 index 0000000000000..500dff49b61ea --- /dev/null +++ b/ci/cloudbuild/dockerfiles/ubuntu-22.04.Dockerfile @@ -0,0 +1,66 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && \ + apt-get --no-install-recommends install -y \ + automake \ + build-essential \ + clang \ + cmake \ + curl \ + gawk \ + git \ + gcc \ + g++ \ + cmake \ + libcurl4-openssl-dev \ + libssl-dev \ + libtool \ + lsb-release \ + make \ + ninja-build \ + patch \ + pkg-config \ + python3 \ + python3-dev \ + python3-pip \ + tar \ + unzip \ + zip \ + wget \ + zlib1g-dev \ + apt-utils \ + ca-certificates \ + apt-transport-https + +# Install Python packages used in the integration tests. +RUN update-alternatives --install /usr/bin/python python $(which python3) 10 +RUN pip3 install setuptools wheel +# The Cloud Pub/Sub emulator needs Java :shrug: +RUN apt update && (apt install -y openjdk-11-jre || apt install -y openjdk-9-jre) + +# Install the Cloud SDK and some of the emulators. We use the emulators to run +# integration tests for the client libraries. +COPY . /var/tmp/ci +WORKDIR /var/tmp/downloads +RUN /var/tmp/ci/install-cloud-sdk.sh +ENV CLOUD_SDK_LOCATION=/usr/local/google-cloud-sdk +ENV PATH=${CLOUD_SDK_LOCATION}/bin:${PATH} + +RUN curl -o /usr/bin/bazelisk -sSL "https://github.com/bazelbuild/bazelisk/releases/download/v1.27.0/bazelisk-linux-${ARCH}" && \ + chmod +x /usr/bin/bazelisk && \ + ln -s /usr/bin/bazelisk /usr/bin/bazel diff --git a/ci/cloudbuild/dockerfiles/ubuntu-focal.Dockerfile b/ci/cloudbuild/dockerfiles/ubuntu-focal.Dockerfile index 32026618237cd..2b9de706b298c 100644 --- a/ci/cloudbuild/dockerfiles/ubuntu-focal.Dockerfile +++ b/ci/cloudbuild/dockerfiles/ubuntu-focal.Dockerfile @@ -52,6 +52,15 @@ RUN apt-get update && \ ca-certificates \ apt-transport-https +RUN apt update -y && apt upgrade -y + +RUN apt update \ + && apt install software-properties-common -y + +RUN add-apt-repository ppa:deadsnakes/ppa -y +RUN apt update && \ + apt install python3.12 -y + # Install Python packages used in the integration tests. RUN update-alternatives --install /usr/bin/python python $(which python3) 10 RUN pip3 install setuptools wheel diff --git a/ci/cloudbuild/triggers/cmake-oldest-deps-ci.yaml b/ci/cloudbuild/triggers/cmake-oldest-deps-ci.yaml index 7bd0eeaaafec1..8f3b417c0f146 100644 --- a/ci/cloudbuild/triggers/cmake-oldest-deps-ci.yaml +++ b/ci/cloudbuild/triggers/cmake-oldest-deps-ci.yaml @@ -22,7 +22,7 @@ includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS name: prepare-for-v3-0-0-cmake-oldest-deps-ci substitutions: _BUILD_NAME: cmake-oldest-deps - _DISTRO: ubuntu-focal + _DISTRO: ubuntu-22.04 _TRIGGER_TYPE: ci tags: - ci diff --git a/ci/cloudbuild/triggers/cmake-oldest-deps-pr.yaml b/ci/cloudbuild/triggers/cmake-oldest-deps-pr.yaml index 4e215094ad609..2d938e0165a31 100644 --- a/ci/cloudbuild/triggers/cmake-oldest-deps-pr.yaml +++ b/ci/cloudbuild/triggers/cmake-oldest-deps-pr.yaml @@ -23,7 +23,7 @@ includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS name: prepare-for-v3-0-0-cmake-oldest-deps-pr substitutions: _BUILD_NAME: cmake-oldest-deps - _DISTRO: ubuntu-focal + _DISTRO: ubuntu-22.04 _TRIGGER_TYPE: pr tags: - pr diff --git a/ci/etc/vcpkg-version.txt b/ci/etc/vcpkg-version.txt index fdf37ec4deabe..922462b2e1e1c 100644 --- a/ci/etc/vcpkg-version.txt +++ b/ci/etc/vcpkg-version.txt @@ -1 +1 @@ -2025.10.17 +3895230f38e498525f2560a281223d12066fa74a diff --git a/ci/gha/builds/lib/cmake.sh b/ci/gha/builds/lib/cmake.sh index de923525946e8..5b99fb0803a93 100755 --- a/ci/gha/builds/lib/cmake.sh +++ b/ci/gha/builds/lib/cmake.sh @@ -44,6 +44,7 @@ function cmake::common_args() { fi local args args=( + -DCMAKE_CXX_STANDARD=17 -DGOOGLE_CLOUD_CPP_ENABLE_CCACHE=OFF -DGOOGLE_CLOUD_CPP_ENABLE_WERROR=ON -GNinja @@ -58,7 +59,7 @@ function cmake::common_args() { if [[ -n "${VCPKG_TRIPLET:-}" ]]; then args+=("-DVCPKG_TARGET_TRIPLET=${VCPKG_TRIPLET}") fi - args+=("-DVCPKG_OVERLAY_PORTS=ci/gha/builds/vcpkg-overlays") + args+=("-DVCPKG_OVERLAY_PORTS=ci\gha\builds\vcpkg-overlays") printf "%s\n" "${args[@]}" } diff --git a/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/fix-target_link.patch b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/fix-target_link.patch new file mode 100644 index 0000000000000..f4709e8b1c28f --- /dev/null +++ b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/fix-target_link.patch @@ -0,0 +1,17 @@ +diff --git a/cmake/opentracing-cpp.cmake b/cmake/opentracing-cpp.cmake +index f014ecd..fd8898a 100644 +--- a/cmake/opentracing-cpp.cmake ++++ b/cmake/opentracing-cpp.cmake +@@ -1,7 +1,11 @@ + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + +-find_package(OpenTracing CONFIG QUIET) ++find_package(OpenTracing CONFIG REQUIRED) ++if(NOT TARGET OpenTracing::opentracing AND TARGET OpenTracing::opentracing-static) ++ add_library(OpenTracing::opentracing ALIAS OpenTracing::opentracing-static) ++endif() ++ + set(OpenTracing_PROVIDER "find_package") + + if(NOT OpenTracing_FOUND) diff --git a/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/portfile.cmake b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/portfile.cmake index eacf1ea4ada70..878e45be8b27e 100644 --- a/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/portfile.cmake +++ b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/portfile.cmake @@ -10,12 +10,11 @@ vcpkg_from_github( REF "v${VERSION}" SHA512 - c93005c9b24b358a9998141f6c7fd9675778731775dacaad18f0e81117fd00aaabff371c04cf96688a9c86117727181052a141d961d4db28fc457b454351c570 + 6dc0357d8b3410852d3f970f72b8bec59dba9d6c533ca600432102e65de161903bd9170d98cef7ff0af5191309577ffd2a69ccd004b840914a910a6a282204e4 HEAD_REF main PATCHES - # Missing find_dependency for Abseil - add-missing-find-dependency.patch) + fix-target_link.patch) vcpkg_check_features( OUT_FEATURE_OPTIONS @@ -29,6 +28,8 @@ vcpkg_check_features( WITH_PROMETHEUS elasticsearch WITH_ELASTICSEARCH + otlp-file + WITH_OTLP_FILE otlp-http WITH_OTLP_HTTP otlp-grpc @@ -37,14 +38,18 @@ vcpkg_check_features( WITH_GENEVA user-events WITH_USER_EVENTS + opentracing + WITH_OPENTRACING INVERTED_FEATURES user-events BUILD_TRACEPOINTS) # opentelemetry-proto is a third party submodule and opentelemetry-cpp release # did not pack it. -if (WITH_OTLP_GRPC OR WITH_OTLP_HTTP) - set(OTEL_PROTO_VERSION "1.3.1") +if (WITH_OTLP_FILE + OR WITH_OTLP_GRPC + OR WITH_OTLP_HTTP) + set(OTEL_PROTO_VERSION "1.6.0") vcpkg_download_distfile( ARCHIVE URLS @@ -52,7 +57,7 @@ if (WITH_OTLP_GRPC OR WITH_OTLP_HTTP) FILENAME "opentelemetry-proto-${OTEL_PROTO_VERSION}.tar.gz" SHA512 - 8c75e4ff79c4b5b251e0ec8ece92ec901d70ec601644505ffdd137fb728daac91fd9203e1f448500124906737d91d80f10b694977688c655418b94f61c828d06 + 0e72e0c32d2d699d7a832a4c57a9dbe60e844d4c4e8d7b39eb45e4282cde89fccfeef893eae70b9d018643782090a7228c3ef60863b00747498e80f0cf1db8ae ) vcpkg_extract_source_archive(src ARCHIVE "${ARCHIVE}") @@ -62,13 +67,13 @@ if (WITH_OTLP_GRPC OR WITH_OTLP_HTTP) # Create empty .git directory to prevent opentelemetry from cloning it # during build time file(MAKE_DIRECTORY "${SOURCE_PATH}/third_party/opentelemetry-proto/.git") - list(APPEND FEATURE_OPTIONS -DCMAKE_CXX_STANDARD=14) list( APPEND FEATURE_OPTIONS "-DgRPC_CPP_PLUGIN_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/grpc/grpc_cpp_plugin${VCPKG_HOST_EXECUTABLE_SUFFIX}" ) endif () +list(APPEND FEATURE_OPTIONS -DCMAKE_CXX_STANDARD=17 -DWITH_STL=CXX17) set(OPENTELEMETRY_CPP_EXTERNAL_COMPONENTS "OFF") @@ -111,15 +116,16 @@ vcpkg_cmake_configure( -DBUILD_TESTING=OFF -DWITH_EXAMPLES=OFF -DOPENTELEMETRY_INSTALL=ON - -DWITH_STL=CXX14 - -DWITH_ABSEIL=ON -DWITH_BENCHMARK=OFF + -DCMAKE_CXX_STANDARD=17 + -DWITH_STL=CXX17 -DOPENTELEMETRY_EXTERNAL_COMPONENT_PATH=${OPENTELEMETRY_CPP_EXTERNAL_COMPONENTS} ${FEATURE_OPTIONS} MAYBE_UNUSED_VARIABLES WITH_GENEVA WITH_USER_EVENTS - BUILD_TRACEPOINTS) + BUILD_TRACEPOINTS + gRPC_CPP_PLUGIN_EXECUTABLE) vcpkg_cmake_install() vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/${PORT}") diff --git a/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/vcpkg.json b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/vcpkg.json new file mode 100644 index 0000000000000..0570a7bd2e108 --- /dev/null +++ b/ci/gha/builds/vcpkg-overlays/opentelemetry-cpp/vcpkg.json @@ -0,0 +1,108 @@ +{ + "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", + "name": "opentelemetry-cpp", + "version-semver": "1.23.0", + "description": [ + "OpenTelemetry is a collection of tools, APIs, and SDKs.", + "You use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior." + ], + "homepage": "https://github.com/open-telemetry/opentelemetry-cpp", + "license": "Apache-2.0", + "dependencies": [ + "abseil", + "nlohmann-json", + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "features": { + "elasticsearch": { + "description": "Whether to include the Elasticsearch Client in the SDK", + "dependencies": [ + { + "name": "curl", + "default-features": false + } + ] + }, + "etw": { + "description": "Whether to include the ETW Exporter in the SDK", + "supports": "windows" + }, + "geneva": { + "description": "Whether to include the Geneva Exporter from the opentelemetry-cpp-contrib repository", + "dependencies": [ + { + "name": "opentelemetry-cpp", + "features": [ + "etw" + ], + "platform": "windows" + }, + "opentelemetry-cpp-contrib-version" + ] + }, + "opentracing": { + "description": "Whether to include the Opentracing shim", + "dependencies": [ + "opentracing" + ] + }, + "otlp-file": { + "description": "Whether to include the OpenTelemetry Protocol to File exporter in the SDK", + "supports": "!uwp", + "dependencies": [ + "protobuf" + ] + }, + "otlp-grpc": { + "description": "Whether to include the OTLP gRPC exporter in the SDK", + "dependencies": [ + "grpc", + { + "name": "grpc", + "host": true + } + ] + }, + "otlp-http": { + "description": "Whether to include the OpenTelemetry Protocol over HTTP in the SDK", + "dependencies": [ + "curl", + "protobuf" + ] + }, + "prometheus": { + "description": "Whether to include the Prometheus Client in the SDK", + "dependencies": [ + "prometheus-cpp" + ] + }, + "user-events": { + "description": "Whether to include the User Events Exporter from the opentelemetry-cpp-contrib repository", + "supports": "linux", + "dependencies": [ + "libeventheader-tracepoint", + "libtracepoint", + { + "name": "opentelemetry-cpp", + "features": [ + "otlp-http" + ] + }, + "opentelemetry-cpp-contrib-version" + ] + }, + "zipkin": { + "description": "Whether to include the Zipkin exporter in the SDK", + "dependencies": [ + "curl" + ] + } + } +} diff --git a/ci/kokoro/lib/vcpkg.sh b/ci/kokoro/lib/vcpkg.sh index 17e6e21bfc8d2..f5598f44dee1c 100644 --- a/ci/kokoro/lib/vcpkg.sh +++ b/ci/kokoro/lib/vcpkg.sh @@ -32,10 +32,11 @@ install_vcpkg() { io::log "Downloading vcpkg into ${vcpkg_dir}..." VCPKG_VERSION="$(