Update PHP and Ruby amalgamations in regenerate_stale_files.sh This removes the need for us to manually rebuild these amalgamation files. I added the "manual" tag to the corresponding staleness tests so that we won't get presubmit errors if the amalgamation files are out of date. I also had to tweak the Ruby BUILD.bazel file to make sure it uses Bazel-generated amalgamations instead of relying on the checked-in files. I added deliberate errors to the Ruby and PHP amalgamation files to test that everything is working. We should not see any CI errors, and the files should quickly be auto-updated after the change lands on main. PiperOrigin-RevId: 561187352
diff --git a/.github/workflows/test_php.yml b/.github/workflows/test_php.yml index a698cde..43d9b2a 100644 --- a/.github/workflows/test_php.yml +++ b/.github/workflows/test_php.yml
@@ -101,7 +101,6 @@ uses: protocolbuffers/protobuf-ci/docker@v2 with: image: ${{ env.image }} - skip-staleness-check: true platform: linux/386 credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} extra-flags: -e COMPOSER_HOME=/workspace/composer-cache -e PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} @@ -140,7 +139,6 @@ with: image: us-docker.pkg.dev/protobuf-build/containers/test/linux/php-aarch64@sha256:77ff9fdec867bbfb290ee0b10d8b7a3e5e434155daa5ec93de7341c7592b858d platform: linux/arm64 - skip-staleness-check: true credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} extra-flags: -e COMPOSER_HOME=/workspace/composer-cache -e PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} command: >- @@ -191,6 +189,7 @@ credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} bazel-cache: php_macos/${{ matrix.version }} bash: | + ./regenerate_stale_files.sh pushd php php -v php -m
diff --git a/.github/workflows/test_php_ext.yml b/.github/workflows/test_php_ext.yml index d922859..6c9bfc7 100644 --- a/.github/workflows/test_php_ext.yml +++ b/.github/workflows/test_php_ext.yml
@@ -27,6 +27,7 @@ credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} bazel-cache: php_ext/${{ matrix.version }} bash: > + ./regenerate_stale_files.sh; bazel build //php:release $BAZEL_FLAGS; cp bazel-bin/php/protobuf-*.tgz .
diff --git a/.github/workflows/test_ruby.yml b/.github/workflows/test_ruby.yml index 46f6d12..15a8e86 100644 --- a/.github/workflows/test_ruby.yml +++ b/.github/workflows/test_ruby.yml
@@ -67,7 +67,6 @@ uses: protocolbuffers/protobuf-ci/docker@v2 with: image: i386/ruby:2.7.3-buster - skip-staleness-check: true credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: >- /bin/bash -cex ' @@ -99,7 +98,6 @@ uses: protocolbuffers/protobuf-ci/docker@v2 with: image: arm64v8/ruby:2.7.3-buster - skip-staleness-check: true credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: >- /bin/bash -cex ' @@ -181,6 +179,7 @@ bash: > bazel --version; ruby --version; + ./regenerate_stale_files.sh; bazel build //ruby:release //:protoc ${{ matrix.ffi == 'FFI' && '--//ruby:ffi=enabled' || '' }} $BAZEL_FLAGS; gem install bazel-bin/ruby/google-protobuf-*; bazel-bin/protoc --proto_path=src --proto_path=ruby/tests --proto_path=ruby --ruby_out=ruby tests/test_import_proto2.proto;
diff --git a/php/BUILD.bazel b/php/BUILD.bazel index 86b19e6..dc40603 100644 --- a/php/BUILD.bazel +++ b/php/BUILD.bazel
@@ -104,6 +104,7 @@ "ext/google/protobuf/php-upb.c", ], generated_pattern = "generated-in/%s", + tags = ["manual"], ) ################################################################################
diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 640e5a4..67b9cfe 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c
@@ -1,6 +1,8 @@ /* Amalgamated source file */ #include "php-upb.h" +test-xyz + /* * This is where we define internal portability macros used across upb. *
diff --git a/regenerate_stale_files.sh b/regenerate_stale_files.sh index cf76f10..db0d13c 100755 --- a/regenerate_stale_files.sh +++ b/regenerate_stale_files.sh
@@ -16,6 +16,8 @@ ${BazelBin} test src:cmake_lists_staleness_test "$@" || ./bazel-bin/src/cmake_lists_staleness_test --fix ${BazelBin} test src/google/protobuf:well_known_types_staleness_test "$@" || ./bazel-bin/src/google/protobuf/well_known_types_staleness_test --fix ${BazelBin} test objectivec:well_known_types_staleness_test "$@" || ./bazel-bin/objectivec/well_known_types_staleness_test --fix +${BazelBin} test php:test_amalgamation_staleness "$@" || ./bazel-bin/php/test_amalgamation_staleness --fix +${BazelBin} test ruby/ext/google/protobuf_c:test_amalgamation_staleness "$@" || ./bazel-bin/ruby/ext/google/protobuf_c/test_amalgamation_staleness --fix (cd upb; ${BazelBin} test cmake:test_generated_files "$@" || ./bazel-bin/cmake/test_generated_files --fix) # Generate C# code.
diff --git a/ruby/ext/google/protobuf_c/BUILD.bazel b/ruby/ext/google/protobuf_c/BUILD.bazel index 36f646f..b2a6310 100644 --- a/ruby/ext/google/protobuf_c/BUILD.bazel +++ b/ruby/ext/google/protobuf_c/BUILD.bazel
@@ -4,28 +4,48 @@ package(default_visibility = ["//ruby:__subpackages__"]) +PROTOBUF_C_SOURCES = [ + "convert.c", + "convert.h", + "defs.c", + "defs.h", + "map.c", + "map.h", + "message.c", + "message.h", + "protobuf.c", + "protobuf.h", + "repeated_field.c", + "repeated_field.h", + "shared_convert.c", + "shared_convert.h", + "shared_message.c", + "shared_message.h", + "wrap_memcpy.c", +] + +# We copy everything into a copy/ subdirectory so that we can use the +# up-to-date Bazel-generated amalgamation files without conflicting with the +# possibly stale checked-in amalgamations. +genrule( + name = "copy_sources", + srcs = PROTOBUF_C_SOURCES + [ + "glue.c", + "@upb//:gen_ruby_amalgamation", + ], + outs = ["copy/%s" % src for src in PROTOBUF_C_SOURCES] + [ + "copy/glue.c", + "copy/ruby-upb.h", + "copy/ruby-upb.c", + ], + cmd = "cp $(SRCS) $(RULEDIR)/copy", +) + cc_library( name = "protobuf_c", - srcs = [ - "convert.c", - "convert.h", - "defs.c", - "defs.h", - "map.c", - "map.h", - "message.c", - "message.h", - "protobuf.c", - "protobuf.h", - "repeated_field.c", - "repeated_field.h", - "ruby-upb.c", - "ruby-upb.h", - "shared_convert.c", - "shared_convert.h", - "shared_message.c", - "shared_message.h", - "wrap_memcpy.c", + srcs = ["copy/%s" % src for src in PROTOBUF_C_SOURCES] + [ + "copy/ruby-upb.c", + "copy/ruby-upb.h", ], linkstatic = True, target_compatible_with = select({ @@ -44,10 +64,10 @@ cc_library( name = "upb_api", srcs = [ - "ruby-upb.c", + "copy/ruby-upb.c", ], hdrs = [ - "ruby-upb.h", + "copy/ruby-upb.h", ], copts = ["-fvisibility=hidden"], linkstatic = False, @@ -65,13 +85,13 @@ cc_library( name = "protobuf_c_ffi", - srcs = [ + srcs = ["copy/%s" % src for src in [ "glue.c", "shared_convert.c", "shared_convert.h", "shared_message.c", "shared_message.h", - ], + ]], copts = [ "-std=gnu99", "-O3", @@ -154,4 +174,5 @@ "ruby-upb.h", ], generated_pattern = "generated-in/%s", + tags = ["manual"], )
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index 23be9a1..7bf191a 100644 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c
@@ -1,6 +1,8 @@ /* Amalgamated source file */ #include "ruby-upb.h" +test-xyz + /* * This is where we define internal portability macros used across upb. *