#!/bin/bash set -ex PROTOC_VERSION=$1 PROTOC_DOWNLOAD=https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip PY_SITE_PACKAGES=$(python -c 'import site; print(site.getsitepackages()[0])') rm -rf protoc-old mkdir protoc-old pushd protoc-old wget $PROTOC_DOWNLOAD unzip *.zip PROTOC=$(pwd)/bin/protoc popd # protoc prior to 28.0 doesn't support inf/nan option values. sed -i 's/\(inf\|nan\)/0/g' src/google/protobuf/unittest_custom_options.proto bazel build //python:copied_test_proto_files //python:copied_wkt_proto_files COMPAT_COPIED_PROTOS=( # Well-known types give good build coverage any api duration empty field_mask source_context struct timestamp type wrappers # These protos are used in tests of custom options handling. unittest_custom_options unittest_import ) for proto in ${COMPAT_COPIED_PROTOS[@]}; do $PROTOC --python_out=$PY_SITE_PACKAGES \ bazel-bin/python/google/protobuf/$proto.proto \ -Ibazel-bin/python done COMPAT_PROTOS=( # All protos without transitive dependencies on edition 2023+. descriptor_pool_test1 descriptor_pool_test2 factory_test1 factory_test2 file_options_test import_test_package/import_public import_test_package/import_public_nested import_test_package/inner import_test_package/outer message_set_extensions missing_enum_values more_extensions more_extensions_dynamic more_messages no_package packed_field_test test_bad_identifiers test_proto2 test_proto3_optional ) for proto in ${COMPAT_PROTOS[@]}; do $PROTOC --python_out=$PY_SITE_PACKAGES \ python/google/protobuf/internal/$proto.proto \ -Ipython done # Exclude pybind11 tests because they require C++ code that doesn't ship with # our test wheels. TEST_EXCLUSIONS="-e _pybind11_test.py -e proto_api_test.py" TESTS=$(pip show -f protobuftests | grep -i _test.py | grep --invert-match $TEST_EXCLUSIONS | sed 's,/,.,g' | sed -E 's,.py$,,g') python -m unittest -v ${TESTS[@]}