| name: C++ Tests | |
| on: | |
| workflow_call: | |
| inputs: | |
| continuous-run: | |
| required: true | |
| description: "Boolean string denoting whether this run is continuous -- | |
| empty string for presubmit, non-empty string for continuous." | |
| type: string | |
| safe-checkout: | |
| required: true | |
| description: "The SHA key for the commit we want to run over" | |
| type: string | |
| continuous-prefix: | |
| required: true | |
| description: "The string continuous-only tests should be prefixed with when displaying test | |
| results." | |
| type: string | |
| permissions: | |
| contents: read | |
| jobs: | |
| linux: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| config: | |
| - { name: Optimized, flags: --config=opt } | |
| - { name: Debug, flags: --config=dbg, continuous-only: true } | |
| - { name: ASAN, flags: --config=asan, runner: ubuntu-22-4core } | |
| - { name: MSAN, flags: --config=docker-msan, runner: ubuntu-22-4core, continuous-only: true } | |
| - { name: TSAN, flags: --config=tsan, runner: ubuntu-22-4core, continuous-only: true } | |
| - { name: UBSAN, flags: --config=ubsan, runner: ubuntu-22-4core, continuous-only: true,} | |
| - { name: No-RTTI, flags: --cxxopt=-fno-rtti, continuous-only: true } | |
| include: | |
| # Set defaults | |
| - image: us-docker.pkg.dev/protobuf-build/containers/test/linux/sanitize:8.7.0-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 | |
| - targets: //pkg/... //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests | |
| # Override cases with custom images | |
| - config: { name: "Bazel8", flags: --cxxopt="-Wno-self-assign-overloaded" } | |
| cache_key: Bazel8 | |
| image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:8.7.0-4d8e80ef93b0219fb907af9dd4596b92946995d8" | |
| targets: "//src/... //third_party/utf8_range/..." | |
| - config: { name: "Bazel9", flags: "--cxxopt=-Wno-self-assign-overloaded" } | |
| cache_key: Bazel9 | |
| image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:9.2.0-4d8e80ef93b0219fb907af9dd4596b92946995d8" | |
| targets: "//src/... //third_party/utf8_range/..." | |
| - config: { name: "TCMalloc" } | |
| cache_key: TcMalloc | |
| image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/tcmalloc:8.7.0-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 " | |
| targets: "//src/... //third_party/utf8_range/..." | |
| - config: { name: "aarch64", flags: "--platforms=//build_defs:linux-aarch_64" } | |
| cache_key: aarch64-bazel8 | |
| targets: "//src/... //src/google/protobuf/compiler:protoc_aarch64_test //third_party/utf8_range/..." | |
| image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:8.7.0-aarch64-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 " | |
| name: ${{ matrix.config.continuous-only && inputs.continuous-prefix || '' }} Linux ${{ matrix.config.name }} | |
| runs-on: ${{ matrix.config.runner || 'ubuntu-latest' }} | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Prime the cache | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| with: | |
| image: ${{ matrix.image }} | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/${{ matrix.cache_key }} | |
| bazel: fetch ${{ matrix.targets }} ${{ matrix.config.flags }} | |
| exclude-targets: ${{ matrix.exclude-targets }} | |
| - name: Run tests | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| with: | |
| image: ${{ matrix.image }} | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/${{ matrix.cache_key }} | |
| bazel: test ${{ matrix.targets }} ${{ matrix.config.flags }} | |
| exclude-targets: ${{ matrix.exclude-targets }} | |
| linux-gcc: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| version: ['10.5', '13.4'] | |
| name: ${{ matrix.config.continuous-only && inputs.continuous-prefix || '' }} Linux GCC ${{ matrix.version }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Prime the cache | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/gcc:8.7.0-${{ matrix.version }}-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/gcc-${{ matrix.version }} | |
| bazel: fetch //pkg/... //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests | |
| - name: Run tests | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/gcc:8.7.0-${{ matrix.version }}-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/gcc-${{ matrix.version }} | |
| bazel: test //pkg/... //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests | |
| linux-release: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| arch: [x86_64, aarch64] | |
| include: | |
| - arch: aarch64 | |
| continuous-only: true | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux Release ${{ matrix.arch }} | |
| runs-on: ubuntu-22-4core | |
| steps: | |
| - name: Check initial disk space | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: df -h | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Check disk space after checkout | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: df -h | |
| - name: Cross compile protoc for ${{ matrix.arch }} | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| id: cross-compile | |
| uses: protocolbuffers/protobuf-ci/cross-compile-protoc@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:8.7.0-4d8e80ef93b0219fb907af9dd4596b92946995d8 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| architecture: linux-${{ matrix.arch }} | |
| - name: Check disk space after cross compile | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: df -h | |
| - name: Setup sccache | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: linux-release-${{ matrix.arch }} | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Check disk space after setup sccache | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: df -h | |
| - name: Run tests | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:8.7.0-${{ matrix.arch }}-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| entrypoint: bash | |
| command: > | |
| -c "set -ex; | |
| sccache -z; | |
| cmake . -DWITH_PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} | |
| -Dprotobuf_BUILD_TESTS=ON | |
| -Dprotobuf_BUILD_CONFORMANCE=ON -DCMAKE_CXX_STANDARD=17 | |
| -Dprotobuf_WITH_ZLIB=OFF ${{ env.SCCACHE_CMAKE_FLAGS }}; | |
| cmake --build . --parallel 20; | |
| ctest --no-tests=error --parallel 20; | |
| sccache -s" | |
| - name: Check disk space after run tests | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: df -h | |
| linux-cmake: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| include: | |
| - flags: -Dprotobuf_BUILD_EXAMPLES=ON -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_CONFORMANCE=ON | |
| - name: Ninja | |
| flags: -G Ninja -DCMAKE_CXX_STANDARD=17 | |
| continuous-only: true | |
| - name: Shared | |
| flags: -Dprotobuf_BUILD_SHARED_LIBS=ON -Dprotobuf_BUILD_EXAMPLES=ON -DCMAKE_CXX_STANDARD=17 | |
| continuous-only: true | |
| - name: C++20 | |
| flags: -DCMAKE_CXX_STANDARD=20 | |
| - name: Package | |
| flags: -DCMAKE_CXX_STANDARD=17 -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON | |
| - name: Fetch | |
| flags: -DCMAKE_CXX_STANDARD=17 -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux CMake ${{ matrix.name}} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Setup sccache | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: linux-cmake | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Run tests | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| command: >- | |
| /test.sh ${{ matrix.flags}} ${{ env.SCCACHE_CMAKE_FLAGS }} | |
| -Dprotobuf_BUILD_TESTS=ON ${{ matrix.package_flags }} | |
| linux-cmake-install: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| type: [package, static, fetch] | |
| include: | |
| # Set defaults | |
| - type: package | |
| name: Install | |
| flags: -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON -Dprotobuf_BUILD_SHARED_LIBS=ON | |
| - type: static | |
| name: Install (static) | |
| flags: -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON -Dprotobuf_BUILD_SHARED_LIBS=OFF | |
| - type: fetch | |
| name: Install (Fetch) | |
| flags: -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON -Dprotobuf_BUILD_SHARED_LIBS=ON | |
| continuous-only: true | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }}Linux CMake ${{ matrix.name }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Setup sccache | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| with: | |
| cache-prefix: linux-cmake-install | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Run tests | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| command: >- | |
| /install.sh -DCMAKE_CXX_STANDARD=17 ${{ env.SCCACHE_CMAKE_FLAGS }} | |
| ${{ matrix.flags }} | |
| \&\& | |
| cp build/install_manifest.txt . | |
| \&\& | |
| /test.sh | |
| ${{ env.SCCACHE_CMAKE_FLAGS }} | |
| -Dprotobuf_REMOVE_INSTALLED_HEADERS=ON | |
| -Dprotobuf_BUILD_PROTOBUF_BINARIES=OFF | |
| -Dprotobuf_BUILD_CONFORMANCE=ON | |
| -DCMAKE_CXX_STANDARD=17 | |
| ${{ matrix.flags }} | |
| - name: Clean up install manifest | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| run: | | |
| set -ex | |
| mkdir manifest | |
| cat install_manifest.txt | sort | sed 's:/usr/local/::g' > manifest/all.txt | |
| cat manifest/all.txt | grep -E '^include/' | grep -vE 'internal' | sed 's:^include/::g' > manifest/include.txt | |
| cat manifest/all.txt | grep -E '^bin/' | grep -vE '\-[0-9]+\.[0-9]+\.[0-9]+$' | sed 's:^bin/::g' > manifest/bin.txt | |
| cat manifest/all.txt | grep -E '^lib/' | grep -vE '\.[0-9]+\.[0-9]+\.[0-9]+$' | sed 's:^lib/::g' > manifest/lib.txt | |
| - name: Upload install manifest | |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| with: | |
| name: installed_files_${{ matrix.type }} | |
| path: manifest/*.txt | |
| install-manifests: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| type: [include, bin, lib] | |
| build: [static, package] | |
| include: | |
| - type: lib | |
| build: static | |
| golden: 'lib_static' | |
| - type: lib | |
| build: package | |
| golden: 'lib_shared' | |
| name: Check Installed Files | |
| needs: linux-cmake-install | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Download manifest | |
| uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 | |
| with: | |
| name: installed_files_${{ matrix.build }} | |
| path: ${{ matrix.build }} | |
| - name: Compare against golden | |
| run: | | |
| set +e | |
| GOLDEN_FILE=cmake/installed_${{ matrix.golden || matrix.type }}_golden.txt | |
| DIFF="$(diff -u ${GOLDEN_FILE} ${{ matrix.build }}/${{ matrix.type }}.txt)" | |
| if [ -n "$DIFF" ]; then | |
| echo "Installed files do not match goldens!" | |
| echo "If this is expected, please update the golden file: ${GOLDEN_FILE}" | |
| echo "The following diffs were found:" | |
| echo "$DIFF" | |
| exit 1 | |
| else | |
| echo "Installed files match goldens." | |
| fi | |
| # This test should always be skipped on presubmit | |
| linux-cmake-examples: | |
| name: ${{ inputs.continuous-prefix }} Linux CMake Examples | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Setup sccache | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: linux-cmake-examples | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Run tests | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| command: >- | |
| /install.sh -DCMAKE_CXX_STANDARD=17 ${{ env.SCCACHE_CMAKE_FLAGS }} | |
| -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=OFF | |
| -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_BUILD_TESTS=ON \&\& | |
| mkdir examples/build \&\& | |
| cd examples/build \&\& | |
| cmake .. -DCMAKE_CXX_STANDARD=17 \&\& | |
| cmake --build . | |
| linux-cmake-gcc: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| include: | |
| - name: C++17 | |
| flags: -DCMAKE_CXX_STANDARD=17 | |
| continuous-only: true | |
| - name: C++20 | |
| flags: -DCMAKE_CXX_STANDARD=20 | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux CMake GCC ${{ matrix.name }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Setup sccache | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: linux-cmake-gcc | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Run tests | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/gcc:8.7.0-12.5-5bb1a8fdfc30f8c21c1b38cf053d2db9fca865a7 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| entrypoint: bash | |
| command: >- | |
| -c 'set -ex; | |
| cd /workspace; | |
| sccache -z; | |
| cmake . -Dprotobuf_BUILD_TESTS=ON ${{ matrix.flags }} ${{ env.SCCACHE_CMAKE_FLAGS }}; | |
| cmake --build . --parallel 20; | |
| ctest --no-tests=error --verbose --parallel 20; | |
| sccache -s' | |
| linux-cmake-32-bit: | |
| name: Linux CMake 32-bit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Setup sccache | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: linux-cmake-32-bit | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| - name: Run tests | |
| uses: protocolbuffers/protobuf-ci/docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/test/linux/32bit@sha256:d6028ab408c49932836cdc514116f06886d7f6868a4d430630aa52adc5aee2fc | |
| platform: linux/386 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| entrypoint: bash | |
| command: >- | |
| -c 'set -ex; | |
| cd /workspace; | |
| sccache -z; | |
| cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON ${{ env.SCCACHE_CMAKE_FLAGS }}; | |
| cmake --build . --parallel 20; | |
| ctest --no-tests=error --verbose --parallel 20; | |
| sccache -s' | |
| non-linux: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| include: | |
| - name: MacOS Bazel | |
| os: macos-15 | |
| cache_key: macos-15-bazel8 | |
| bazel: test //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests | |
| - name: MacOS Intel Bazel | |
| os: macos-15 | |
| cache_key: macos-15-intel | |
| bazel: test --cpu=darwin_x86_64 //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests | |
| - name: Windows Bazel | |
| os: windows-2022 | |
| cache_key: windows-2022-msvc-cl | |
| bazel: test //src/... conformance:conformance_framework_tests --config=msvc-cl | |
| - name: Windows Bazel C++20 | |
| os: windows-2022 | |
| cache_key: windows-2022-msvc-cl | |
| bazel: test //src/... conformance:conformance_framework_tests --config=msvc-cl --cxxopt="-std:c++20" | |
| - name: Windows Bazel clang-cl | |
| os: windows-2022 | |
| cache_key: windows-2022-clang-cl | |
| bazel: test //src/... conformance:conformance_framework_tests | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Windows startup flags | |
| if: ${{ runner.os == 'Windows' && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: echo "startup --output_user_root=C:/ --windows_enable_symlinks" >> .bazelrc | |
| - name: Run tests | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bazel@v7 | |
| with: | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel: ${{ matrix.bazel }} | |
| bazel-cache: cpp_${{ matrix.cache_key }} | |
| version: ${{ matrix.bazel_version || '8.7.0' }} | |
| non-linux-cmake: | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| include: | |
| - name: MacOS CMake | |
| os: macos-15 | |
| cache-prefix: macos-cmake | |
| continuous-only: true | |
| - name: Windows CMake | |
| os: windows-2022 | |
| flags: >- | |
| -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=ON | |
| -Dprotobuf_BUILD_SHARED_LIBS=OFF | |
| -Dprotobuf_BUILD_EXAMPLES=ON | |
| vsversion: '2022' | |
| cache-prefix: windows-2022-cmake | |
| - name: Windows CMake 32-bit | |
| os: windows-2022 | |
| flags: >- | |
| -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=ON | |
| vsversion: '2022' | |
| windows-arch: 'win32' | |
| cache-prefix: windows-2022-win32-cmake | |
| continuous-only: true | |
| - name: Windows CMake Shared | |
| os: windows-2022 | |
| flags: >- | |
| -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=ON | |
| -Dprotobuf_BUILD_SHARED_LIBS=ON | |
| vsversion: '2022' | |
| cache-prefix: windows-2022-cmake | |
| - name: Windows CMake Install | |
| os: windows-2022 | |
| install-flags: >- | |
| -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF | |
| flags: >- | |
| -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=ON | |
| -Dprotobuf_REMOVE_INSTALLED_HEADERS=ON | |
| -Dprotobuf_BUILD_PROTOBUF_BINARIES=OFF | |
| vsversion: '2022' | |
| cache-prefix: windows-2022-cmake | |
| continuous-only: true | |
| name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Windows startup flags | |
| if: ${{ runner.os == 'Windows' && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: echo "startup --output_user_root=C:/ --windows_enable_symlinks" >> .bazelrc | |
| - name: Setup MSVC | |
| if: ${{ runner.os == 'Windows' && (!matrix.continuous-only || inputs.continuous-run) }} | |
| uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 | |
| with: | |
| arch: ${{ matrix.windows-arch || 'x64' }} | |
| vsversion: ${{ matrix.vsversion }} | |
| - name: Setup sccache | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/sccache@v7 | |
| with: | |
| cache-prefix: ${{ matrix.cache-prefix }} | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| # Install phase. | |
| - name: Configure CMake for install | |
| if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} | |
| uses: protocolbuffers/protobuf-ci/bash@v7 | |
| with: | |
| bazel-version: 8.7.0 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| command: >- | |
| cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON ${{ matrix.install-flags }} | |
| ${{ env.SCCACHE_CMAKE_FLAGS }} -Dprotobuf_ALLOW_CCACHE=ON | |
| - name: Build for install | |
| if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: VERBOSE=1 cmake --build . --parallel 20 | |
| - name: Install | |
| if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: cmake --build . --target install | |
| - name: Report and clear sccache stats | |
| if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: sccache -s && sccache -z | |
| - name: Clear CMake cache | |
| if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} | |
| shell: bash | |
| run: cmake --build . --target clean && rm CMakeCache.txt | |
| - name: Configure CMake | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bash@v7 | |
| with: | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-version: 8.7.0 | |
| command: >- | |
| cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON ${{ matrix.flags }} | |
| ${{ env.SCCACHE_CMAKE_FLAGS }} -Dprotobuf_ALLOW_CCACHE=ON | |
| - name: Build | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: VERBOSE=1 cmake --build . --parallel 20 | |
| - name: Test | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: ctest --no-tests=error --verbose --parallel 20 -C Debug | |
| - name: Report sccache stats | |
| if: ${{ !matrix.continuous-only || inputs.continuous-run }} | |
| shell: bash | |
| run: sccache -s | |
| linux-abseil-head: | |
| name: ${{ inputs.continuous-prefix }} Linux Abseil HEAD | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Checkout Abseil HEAD | |
| if: ${{ inputs.continuous-run }} | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: abseil/abseil-cpp | |
| path: abseil-cpp-head | |
| - name: Run tests | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:9.2.0-4d8e80ef93b0219fb907af9dd4596b92946995d8 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/abseil_head | |
| bazel: test //src/... --override_module=abseil-cpp=abseil-cpp-head | |
| # Runs tests against unreleased Bazel HEAD (last_green) to catch regressions early. | |
| linux-bazel-last-green: | |
| name: ${{ inputs.continuous-prefix }} Linux Bazel last_green | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout pending changes | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/checkout@v7 | |
| with: | |
| ref: ${{ inputs.safe-checkout }} | |
| - name: Run tests | |
| if: ${{ inputs.continuous-run }} | |
| uses: protocolbuffers/protobuf-ci/bazel-docker@v7 | |
| with: | |
| image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:9.2.0-4d8e80ef93b0219fb907af9dd4596b92946995d8 | |
| credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazel-cache: cpp_linux/bazel_last_green | |
| bash: USE_BAZEL_VERSION=last_green bazelisk test //src/... //third_party/utf8_range/... --cxxopt=-Wno-self-assign-overloaded | |