Add a non-bazel docker action and use it for CMake/PHP tests
diff --git a/.github/actions/internal/docker-run/action.yml b/.github/actions/internal/docker-run/action.yml index b08d836..8ee96ef 100644 --- a/.github/actions/internal/docker-run/action.yml +++ b/.github/actions/internal/docker-run/action.yml
@@ -18,8 +18,6 @@ docker-cache: required: false description: "Enabled caching of pulled docker images." - default: false - type: boolean runs: using: 'composite'
diff --git a/.github/actions/non-bazel-docker/action.yml b/.github/actions/non-bazel-docker/action.yml new file mode 100644 index 0000000..23e502a --- /dev/null +++ b/.github/actions/non-bazel-docker/action.yml
@@ -0,0 +1,32 @@ +name: 'Docker Non-Bazel Run' +description: 'Run a docker image for Protobuf CI testing with a non-Bazel build system' +inputs: + credentials: + required: true + description: "The GCP credentials to use for reading the docker image" + type: string + command: + required: true + description: A command to run in the docker image + image: + required: false + default: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:5.1.1-aec4d74f2eb6938fc53ef7d9a79a4bf2da24abc1 + description: "The docker image to use" + type: string + +runs: + using: 'composite' + steps: + - name: Update stale files using Bazel + uses: ./.github/actions/bazel-docker + with: + image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:5.1.1-aec4d74f2eb6938fc53ef7d9a79a4bf2da24abc1 + credentials: ${{ inputs.credentials }} + bazel-cache: regenerate-stale-files + bash: ./regenerate_stale_files.sh $BAZEL_FLAGS + + - name: Run Docker + uses: ./.github/actions/internal/docker-run + with: + image: ${{ inputs.image }} + command: ${{ inputs.command }}
diff --git a/.github/workflows/test_cpp.yml b/.github/workflows/test_cpp.yml index 54ebc9d..a82fc36 100644 --- a/.github/workflows/test_cpp.yml +++ b/.github/workflows/test_cpp.yml
@@ -51,3 +51,47 @@ credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} bazel-cache: cpp_bazel/${{ matrix.config.name }} bazel: test ${{ matrix.targets }} ${{ matrix.config.flags }} --distinct_host_configuration=false + + cmake: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + include: + - command: > + /test.sh + -Dprotobuf_BUILD_CONFORMANCE=ON + -Dprotobuf_BUILD_EXAMPLES=ON + -DCMAKE_CXX_STANDARD=14 + - name: Ninja + command: > + /test.sh + -G Ninja + -Dprotobuf_BUILD_CONFORMANCE=ON + -DCMAKE_CXX_STANDARD=14 + - name: Shared + command: > + /test.sh + -Dprotobuf_BUILD_CONFORMANCE=ON + -Dprotobuf_BUILD_SHARED_LIBS=ON + -DCMAKE_CXX_STANDARD=14 + - name: Install + command: > + /install.sh -DCMAKE_CXX_STANDARD=14 \&\& /test.sh + -Dprotobuf_REMOVE_INSTALLED_HEADERS=ON + -Dprotobuf_BUILD_PROTOBUF_BINARIES=OFF + -Dprotobuf_BUILD_CONFORMANCE=ON + -DCMAKE_CXX_STANDARD=14 + name: Linux CMake ${{ matrix.name}} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + uses: actions/checkout@v3 + with: + submodules: recursive + ref: ${{ inputs.safe-checkout }} + - name: Run tests + uses: ./.github/actions/non-bazel-docker + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake@sha256:cc23dbe065668158ca2732aa305a07bd0913a175b2079d27d9c16925d23f2335 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: ${{ matrix.command }}
diff --git a/.github/workflows/test_php.yml b/.github/workflows/test_php.yml new file mode 100644 index 0000000..ffad7db --- /dev/null +++ b/.github/workflows/test_php.yml
@@ -0,0 +1,50 @@ +name: PHP Tests + +on: + workflow_call: + inputs: + safe-checkout: + required: true + description: "The SHA key for the commit we want to run over" + type: string + +jobs: + linux: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + include: + - name: 7.3 Debug + version: 7.3.28-dbg + command: composer test \&\& composer test_c + - name: 7.4 Debug + version: 7.4.18-dbg + command: composer test \&\& composer test_c + - name: 8.0 Optimized + version: 8.0.5 + command: composer test \&\& composer test_c + - name: 8.0 Debug + version: 8.0.5-dbg + command: composer test \&\& composer test_c + - name: 8.0 Memory Leak + version: 8.0.5-dbg + # Run specialized memory leak & multirequest tests. + command: composer test_c \&\& tests/multirequest.sh \&\& tests/memory_leak_test.sh + - name: 8.0 Valgrind + version: 8.0.5-dbg + command: composer test_valgrind + + name: Linux PHP ${{ matrix.name}} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + uses: actions/checkout@v3 + with: + submodules: recursive + ref: ${{ inputs.safe-checkout }} + - name: Run tests + uses: ./.github/actions/non-bazel-docker + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/php:${{ matrix.version }}-6e95c0e221e4bd52e3b4dc1398c6336985196931 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: ${{ matrix.command }}
diff --git a/.github/workflows/test_runner.yml b/.github/workflows/test_runner.yml index 1dd6411..357acb7 100644 --- a/.github/workflows/test_runner.yml +++ b/.github/workflows/test_runner.yml
@@ -105,6 +105,14 @@ safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }} secrets: inherit + php: + name: PHP + needs: [check-tag] + uses: ./.github/workflows/test_php.yml + with: + safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }} + secrets: inherit + php-ext: name: PHP Extension needs: [check-tag]
diff --git a/cmake/gtest.cmake b/cmake/gtest.cmake index 7e246fb..5562380 100644 --- a/cmake/gtest.cmake +++ b/cmake/gtest.cmake
@@ -31,10 +31,10 @@ COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1" ) - install(TARGETS gmock EXPORT protobuf-targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + if (protobuf_INSTALL) + set(protobuf_INSTALL_TESTS ON) + endif() endif() target_link_libraries(gmock ${CMAKE_THREAD_LIBS_INIT})
diff --git a/cmake/install.cmake b/cmake/install.cmake index 90230c5..f7a0d9e 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake
@@ -113,3 +113,10 @@ DESTINATION "${CMAKE_INSTALL_EXAMPLEDIR}" COMPONENT protobuf-examples) endif() + +if (protobuf_INSTALL_TESTS) + install(TARGETS gmock EXPORT protobuf-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif()
diff --git a/regenerate_stale_files.sh b/regenerate_stale_files.sh index 8c57c90..bca9c0e 100755 --- a/regenerate_stale_files.sh +++ b/regenerate_stale_files.sh
@@ -10,13 +10,13 @@ # Run and fix all staleness tests. # LINT.IfChange(staleness_tests) -bazel test //src:cmake_lists_staleness_test || ./bazel-bin/src/cmake_lists_staleness_test --fix -bazel test //src/google/protobuf:well_known_types_staleness_test || ./bazel-bin/src/google/protobuf/well_known_types_staleness_test --fix +bazel test //src:cmake_lists_staleness_test "$@" || ./bazel-bin/src/cmake_lists_staleness_test --fix +bazel test //src/google/protobuf:well_known_types_staleness_test "$@" || ./bazel-bin/src/google/protobuf/well_known_types_staleness_test --fix # LINT.ThenChange(//depot/google3/third_party/protobuf/github/kokoro/windows/prepare_build_win64.bat:staleness_tests) # Generate C# code. # This doesn't currently have Bazel staleness tests, but there's an existing # shell script that generates everything required. The output files are stable, # so just regenerating in place should be harmless. -bazel build src/google/protobuf/compiler:protoc +bazel build src/google/protobuf/compiler:protoc "$@" (export PROTOC=$PWD/bazel-bin/protoc && cd csharp && ./generate_protos.sh)