Skip to content

Commit

Permalink
ci: new gcc-oldest build to replace gcc-7.3
Browse files Browse the repository at this point in the history
The minimum GCC version we are required to test is `7.5`. Create a build
name that is more stable and (arguably) easier to grok.
  • Loading branch information
coryan committed Jul 2, 2024
1 parent fd09566 commit 1bc7b39
Show file tree
Hide file tree
Showing 4 changed files with 210 additions and 0 deletions.
38 changes: 38 additions & 0 deletions ci/cloudbuild/builds/gcc-oldest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
#
# Copyright 2024 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.

set -euo pipefail

source "$(dirname "$0")/../../lib/init.sh"
source module ci/cloudbuild/builds/lib/cmake.sh
source module ci/cloudbuild/builds/lib/ctest.sh
source module ci/lib/io.sh

# We run this test in a docker image that includes the oldest GCC that we
# support.
export CC=gcc
export CXX=g++

mapfile -t cmake_args < <(cmake::common_args)
read -r ENABLED_FEATURES < <(features::always_build_cmake)
ENABLED_FEATURES="${ENABLED_FEATURES},compute"
readonly ENABLED_FEATURES

io::run cmake "${cmake_args[@]}" \
-DGOOGLE_CLOUD_CPP_ENABLE="${ENABLED_FEATURES}"
io::run cmake --build cmake-out
mapfile -t ctest_args < <(ctest::common_args)
io::run ctest --test-dir cmake-out "${ctest_args[@]}" -LE "integration-test"
115 changes: 115 additions & 0 deletions ci/cloudbuild/dockerfiles/gcc-oldest.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Copyright 2024 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 opensuse/leap:15
ARG NCPU=4

RUN zypper refresh && \
zypper install --allow-downgrade -y automake cmake curl gcc gcc-c++ \
git gzip libtool make ninja patch tar wget


RUN zypper refresh && \
zypper install --allow-downgrade -y abseil-cpp-devel c-ares-devel \
libcurl-devel libopenssl-devel libcrc32c-devel nlohmann_json-devel \
re2-devel

RUN (echo "/usr/local/lib" ; echo "/usr/local/lib64") | \
tee /etc/ld.so.conf.d/usrlocal.conf
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig
ENV PATH=/usr/local/bin:${PATH}

# Install googletest, remove the downloaded files and the temporary artifacts
# after a successful build to keep the image smaller (and with fewer layers)
WORKDIR /var/tmp/build
RUN curl -fsSL https://github.com/google/googletest/archive/v1.14.0.tar.gz | \
tar -xzf - --strip-components=1 && \
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DBUILD_SHARED_LIBS=yes \
-GNinja -S . -B cmake-out && \
cmake --build cmake-out && cmake --install cmake-out && \
ldconfig && cd /var/tmp && rm -fr build

# Download and compile Google microbenchmark support library:
WORKDIR /var/tmp/build
RUN curl -fsSL https://github.com/google/benchmark/archive/v1.8.4.tar.gz | \
tar -xzf - --strip-components=1 && \
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DBUILD_SHARED_LIBS=yes \
-DBENCHMARK_ENABLE_TESTING=OFF \
-GNinja -S . -B cmake-out && \
cmake --build cmake-out && cmake --install cmake-out && \
ldconfig && cd /var/tmp && rm -fr build

WORKDIR /var/tmp/build/protobuf
RUN curl -fsSL https://github.com/protocolbuffers/protobuf/archive/v27.2.tar.gz | \
tar -xzf - --strip-components=1 && \
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=yes \
-Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_ABSL_PROVIDER=package \
-GNinja -S . -B cmake-out && \
cmake --build cmake-out && cmake --install cmake-out && \
ldconfig && cd /var/tmp && rm -fr build

# We need to patch opentelemetry-cpp to work around a compiler bug in (at least)
# GCC 7.x. See https://github.com/open-telemetry/opentelemetry-cpp/issues/1014
# for more details.
WORKDIR /var/tmp/build/opentelemetry-cpp
RUN curl -fsSL https://github.com/open-telemetry/opentelemetry-cpp/archive/v1.16.0.tar.gz | \
tar -xzf - --strip-components=1 && \
sed -i 's/Stack &GetStack()/Stack \&GetStack() __attribute__((noinline, noclone))/' "api/include/opentelemetry/context/runtime_context.h" && \
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=yes \
-DWITH_EXAMPLES=OFF \
-DWITH_ABSEIL=ON \
-DBUILD_TESTING=OFF \
-DOPENTELEMETRY_INSTALL=ON \
-DOPENTELEMETRY_ABI_VERSION_NO=2 \
-DWITH_DEPRECATED_SDK_FACTORY=OFF \
-GNinja -S . -B cmake-out && \
cmake --build cmake-out && cmake --install cmake-out && \
ldconfig && cd /var/tmp && rm -fr build

WORKDIR /var/tmp/build/grpc
RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.64.2.tar.gz | \
tar -xzf - --strip-components=1 && \
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=yes \
-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_RE2_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package \
-GNinja -S . -B cmake-out && \
cmake --build cmake-out && cmake --install cmake-out && \
ldconfig && cd /var/tmp && rm -fr build

WORKDIR /var/tmp/sccache
RUN curl -fsSL https://github.com/mozilla/sccache/releases/download/v0.8.1/sccache-v0.8.1-x86_64-unknown-linux-musl.tar.gz | \
tar -zxf - --strip-components=1 && \
mkdir -p /usr/local/bin && \
mv sccache /usr/local/bin/sccache && \
chmod +x /usr/local/bin/sccache

# Update the ld.conf cache in case any libraries were installed in /usr/local/lib*
RUN ldconfig /usr/local/lib*
28 changes: 28 additions & 0 deletions ci/cloudbuild/triggers/gcc-oldest-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright 2024 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.

filename: ci/cloudbuild/cloudbuild.yaml
github:
name: google-cloud-cpp
owner: googleapis
push:
branch: ^main$
includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS
name: gcc-oldest-ci
substitutions:
_BUILD_NAME: gcc-oldest
_DISTRO: gcc-oldest
_TRIGGER_TYPE: ci
tags:
- ci
29 changes: 29 additions & 0 deletions ci/cloudbuild/triggers/gcc-oldest-pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright 2024 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.

filename: ci/cloudbuild/cloudbuild.yaml
github:
name: google-cloud-cpp
owner: googleapis
pullRequest:
branch: ^main$
commentControl: COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY
includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS
name: gcc-oldest-pr
substitutions:
_BUILD_NAME: gcc-oldest
_DISTRO: gcc-oldest
_TRIGGER_TYPE: pr
tags:
- pr

0 comments on commit 1bc7b39

Please sign in to comment.