Use reclient for remote CMake compilation and test execution on Linux. This switches Linux CMake CI builds from sccache to reclient (reproxy and rewrapper) backed by our RBE cluster, offloading both C/C++ compilation (via CMAKE_C_COMPILER_LAUNCHER and CMAKE_CXX_COMPILER_LAUNCHER) and CTest execution (via CMAKE_TEST_LAUNCHER) across 50 parallel RBE workers. Also updates CMake/install_test_project/test.sh to place its build directories inside the workspace so they fall under RBE_exec_root. PiperOrigin-RevId: 1001675845
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9957543..ca85b8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml
@@ -87,7 +87,7 @@ - name: GCC/libstdc++ (floor) toolchain: gcc remote_config: remote-floor - container_image: gcr.io/google.com/absl-177019/oss-linux-toolchain-floor@sha256:5a5d17e588e14d5f0d993ea828b7ba844c72b02980bcf731ccf5a4cddf8db599 + container_image: gcr.io/google.com/absl-177019/oss-linux-toolchain-floor@sha256:9027d0b4cae51d764cebafecbf9e390a14f97cf977ca24d02cc533998614acd2 stds: '["c++17"]' # linux_arm_clang-latest_libcxx_bazel.cfg (c++17 and c++20 only) - name: ARM64 Clang/libc++ @@ -101,7 +101,7 @@ os: ${{ matrix.config.os || 'ubuntu-24.04' }} toolchain: ${{ matrix.config.toolchain }} remote_config: ${{ matrix.config.remote_config || 'remote' }} - container_image: ${{ matrix.config.container_image || 'gcr.io/google.com/absl-177019/oss-linux-toolchain-latest@sha256:5a19067585ce5e5ee45640fd0287f05038d6b3f9574d6a5cdf08241e022d0f4a' }} + container_image: ${{ matrix.config.container_image || 'gcr.io/google.com/absl-177019/oss-linux-toolchain-latest@sha256:81009eeb5523ae59cfbea8dc0847d41572ed100f79e3c976c64378a0c30d353c' }} alternate_options: ${{ matrix.config.alternate_options || false }} stds: ${{ matrix.config.stds || '["c++17", "c++20", "c++23"]' }} compilation_modes: ${{ matrix.config.compilation_modes || '["opt", "fastbuild"]' }} @@ -115,7 +115,7 @@ # linux_gcc-latest_libstdcxx_cxx17_cmake.cfg - name: Linux GCC/libstdc++ os: ubuntu-24.04 - container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:9f7f104e4857e3528e8bf5f14968183f5a0e786ca9ef63601eae4e4136f011d6 + container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58 # linux_gcc_alpine_cmake.cfg - name: Alpine Linux GCC (musl) os: ubuntu-24.04 @@ -125,7 +125,7 @@ # cmake-install.cfg - name: Linux Install os: ubuntu-24.04 - container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:9f7f104e4857e3528e8bf5f14968183f5a0e786ca9ef63601eae4e4136f011d6 + container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58 build_types: '["Release"]' link_modes: '["static", "shared"]' install_test: true
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 2080af3..82ea884 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml
@@ -70,12 +70,20 @@ CFLAGS: ${{ !inputs.install_test && startsWith(inputs.os, 'ubuntu') && '-Werror' || '' }} CXX: ${{ startsWith(inputs.os, 'ubuntu') && 'g++' || '' }} CXXFLAGS: ${{ !inputs.install_test && (startsWith(inputs.os, 'ubuntu') && '-Werror' || startsWith(inputs.os, 'windows') && '-WX') || '' }} - CMAKE_BUILD_PARALLEL_LEVEL: 16 - CMAKE_C_COMPILER_LAUNCHER: sccache - CMAKE_CXX_COMPILER_LAUNCHER: sccache + CMAKE_BUILD_PARALLEL_LEVEL: ${{ contains(inputs.container_image, 'oss-linux') && 50 || 16 }} + CMAKE_C_COMPILER_LAUNCHER: ${{ contains(inputs.container_image, 'oss-linux') && 'rewrapper' || 'sccache' }} + CMAKE_CXX_COMPILER_LAUNCHER: ${{ contains(inputs.container_image, 'oss-linux') && 'rewrapper' || 'sccache' }} + CMAKE_TEST_LAUNCHER: ${{ contains(inputs.container_image, 'oss-linux') && 'rbe_test_launcher' || '' }} CMAKE_GENERATOR: Ninja CTEST_OUTPUT_ON_FAILURE: 1 - CTEST_PARALLEL_LEVEL: 16 + CTEST_PARALLEL_LEVEL: ${{ contains(inputs.container_image, 'oss-linux') && 50 || 16 }} + TZDIR: ${{ github.workspace }}/absl/time/internal/cctz/testdata/zoneinfo + RBE_service: us-east1-remotebuildexecution.googleapis.com:443 + RBE_instance: projects/google.com:absl-177019/instances/absl-ci-east + RBE_use_application_default_credentials: true + RBE_exec_strategy: remote + RBE_exec_root: ${{ github.workspace }} + RBE_platform: OSArch=amd64,cache-silo-key=n2-highcpu-2-2026-10-14,container-image=docker://${{ inputs.container_image }},dockerRunAsRoot=true SCCACHE_GCS_BUCKET: absl-cmake-sccache SCCACHE_GCS_RW_MODE: READ_WRITE SCCACHE_IDLE_TIMEOUT: 0 @@ -98,13 +106,23 @@ credentials_json: ${{ secrets.GAR_SERVICE_ACCOUNT }} - name: Set up sccache + if: ${{ !contains(inputs.container_image, 'oss-linux') }} uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10 - name: Start sccache + if: ${{ !contains(inputs.container_image, 'oss-linux') }} env: SCCACHE_GCS_KEY_PATH: ${{ steps.auth.outputs.credentials_file_path }} run: sccache --start-server + - name: Start reclient (RBE) + if: ${{ contains(inputs.container_image, 'oss-linux') }} + run: | + # CMake passes absolute source/include paths (${GITHUB_WORKSPACE}/...) to + # the compiler, so mount the remote input root at that same container path. + echo "RBE_platform=${RBE_platform},InputRootAbsolutePath=${GITHUB_WORKSPACE}" >> "$GITHUB_ENV" + bootstrap + - name: Run installation test if: ${{ inputs.install_test }} env: @@ -140,9 +158,11 @@ - name: Run tests if: ${{ !inputs.install_test }} - env: - TZDIR: ${{ github.workspace }}/absl/time/internal/cctz/testdata/zoneinfo run: > ctest --test-dir build --repeat until-pass:3 ${{ runner.os == 'Windows' && '-E "absl_lifetime_test|absl_symbolize_test"' || '' }} + + - name: Stop reclient (RBE) + if: ${{ always() && contains(inputs.container_image, 'oss-linux') }} + run: bootstrap --shutdown
diff --git a/CMake/install_test_project/test.sh b/CMake/install_test_project/test.sh index 2d25696..8f02158 100755 --- a/CMake/install_test_project/test.sh +++ b/CMake/install_test_project/test.sh
@@ -19,13 +19,18 @@ # Fail on any error. Treat unset variables an error. Print commands as executed. set -euox pipefail +# TODO(b/573304451): Remove once Kokoro is turned down (set in cmake.yml). +export CMAKE_BUILD_PARALLEL_LEVEL="${CMAKE_BUILD_PARALLEL_LEVEL:-$(nproc)}" +export CTEST_PARALLEL_LEVEL="${CTEST_PARALLEL_LEVEL:-$(nproc)}" + absl_dir="${PWD}" -absl_build_dir=/buildfs +absl_build_dir="${absl_dir}/buildfs/absl-build" mkdir -p "${absl_build_dir}" -googletest_builddir=/googletest_builddir +googletest_builddir="${absl_dir}/buildfs/googletest" +googletest_install_dir="${absl_build_dir}/googletest-install" googletest_archive="googletest-${ABSL_GOOGLETEST_VERSION}.tar.gz" project_dir="${absl_dir}/CMake/install_test_project" -project_build_dir=/buildfs/project-build +project_build_dir="${absl_dir}/buildfs/project-build" build_shared_libs="OFF" if [ "${LINK_TYPE:-}" = "DYNAMIC" ]; then @@ -33,7 +38,7 @@ fi # Build and install GoogleTest -mkdir "${googletest_builddir}" +mkdir -p "${googletest_builddir}" pushd "${googletest_builddir}" curl -L "${ABSL_GOOGLETEST_DOWNLOAD_URL}" --output "${googletest_archive}" tar -xz -f "${googletest_archive}" @@ -42,8 +47,7 @@ pushd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS="${build_shared_libs}" .. cmake --build . -cmake --install . -ldconfig +cmake --install . --prefix "${googletest_install_dir}" popd popd popd @@ -56,6 +60,7 @@ cmake "${absl_dir}" \ -DABSL_USE_EXTERNAL_GOOGLETEST=ON \ -DABSL_FIND_GOOGLETEST=ON \ + -DCMAKE_PREFIX_PATH="${googletest_install_dir}" \ -DCMAKE_BUILD_TYPE=Release \ -DABSL_BUILD_TESTING=ON \ -DBUILD_SHARED_LIBS="${build_shared_libs}" \ @@ -70,8 +75,8 @@ # Test the project against the installed Abseil mkdir -p "${project_build_dir}" pushd "${project_build_dir}" -cmake "${project_dir}" -cmake --build . --target simple +env -u CMAKE_C_COMPILER_LAUNCHER -u CMAKE_CXX_COMPILER_LAUNCHER cmake "${project_dir}" +env -u CMAKE_C_COMPILER_LAUNCHER -u CMAKE_CXX_COMPILER_LAUNCHER cmake --build . --target simple output="$(${project_build_dir}/simple "printme" 2>&1)" if [[ "${output}" != *"Arg 1: printme"* ]]; then
diff --git a/ci/BUILD.bazel b/ci/BUILD.bazel index c83d079..d000992 100644 --- a/ci/BUILD.bazel +++ b/ci/BUILD.bazel
@@ -23,7 +23,7 @@ exec_properties = { "OSArch": "amd64", "cache-silo-key": "n2-highcpu-2-2026-10-14", - "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-latest@sha256:9f7f104e4857e3528e8bf5f14968183f5a0e786ca9ef63601eae4e4136f011d6", + "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58", "dockerRunAsRoot": "true", }, ) @@ -37,7 +37,7 @@ exec_properties = { "OSArch": "amd64", "cache-silo-key": "n2-highcpu-2-2026-10-14", - "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-floor@sha256:60898eb3b0dbcf85cd60e346f103fbf3169d966d391dcb2362b243d528b1183b", + "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-floor@sha256:a25e596d10b907c8896768196a6e5c8007bac93abb1677ed1fcc186d28afc032", "dockerRunAsRoot": "true", }, ) @@ -51,7 +51,7 @@ exec_properties = { "OSArch": "arm64", "cache-silo-key": "t2a-standard-4-2026-10-14", - "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-latest@sha256:9f7f104e4857e3528e8bf5f14968183f5a0e786ca9ef63601eae4e4136f011d6", + "container-image": "docker://gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58", "dockerRunAsRoot": "true", }, )