| #!/usr/bin/env bash |
| # Copyright 2021 The gRPC authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| set -ex |
| |
| if [ "$#" == "0" ] ; then |
| echo "Must supply bazel version to be tested." >/dev/stderr |
| exit 1 |
| fi |
| |
| VERSION="$1" |
| shift 1 |
| |
| # directories under test/distrib/bazel/ to test. |
| TEST_DIRECTORIES=( |
| "cpp" |
| "python" |
| ) |
| # construct list of all supported test shards |
| ALL_TEST_SHARDS=("buildtest") |
| for TEST_DIRECTORY in "${TEST_DIRECTORIES[@]}" |
| do |
| ALL_TEST_SHARDS+=("distribtest_${TEST_DIRECTORY}") |
| done |
| |
| # Read list of shards to run from the commandline args. |
| # If ther are no args, run all the shards. |
| if [ "$#" != "0" ] |
| then |
| # Use remaining commandline args as test shard names. |
| TEST_SHARDS=("$@") |
| else |
| # Run all supported shards. |
| TEST_SHARDS=("${ALL_TEST_SHARDS[@]}") |
| fi |
| |
| cd "$(dirname "$0")"/../../.. |
| |
| EXCLUDED_TARGETS=( |
| # iOS platform fails the analysis phase since there is no toolchain available |
| # for it. |
| "-//src/objective-c/..." |
| "-//third_party/objective_c/..." |
| |
| # Targets here need C++17 to build via a different configuration, so this is |
| # done separately |
| "-//fuzztest/..." |
| |
| # This could be a legitmate failure due to bitrot. |
| "-//src/proto/grpc/testing:test_gen_proto" |
| |
| # Analyzing windows toolchains when running on linux results in an error. |
| # Since bazel distribtests are run on linux, we exclude the windows RBE toolchains. |
| "-//third_party/toolchains/rbe_windows_bazel_6.3.2_vs2019/..." |
| "-//third_party/toolchains:rbe_windows_default_toolchain_suite" |
| |
| # TODO(jtattermusch): add back once fixed |
| "-//examples/android/binder/..." |
| |
| # Exclude bazelified tests as they contain some bazel hackery |
| "-//tools/bazelify_tests/..." |
| ) |
| |
| FAILED_TESTS="" |
| |
| export OVERRIDE_BAZEL_VERSION="$VERSION" |
| # when running under bazel docker image, the workspace is read only. |
| export OVERRIDE_BAZEL_WRAPPER_DOWNLOAD_DIR=/tmp |
| |
| ACTION_ENV_FLAG="--action_env=bazel_cache_invalidate=version_${VERSION}" |
| |
| for TEST_SHARD in "${TEST_SHARDS[@]}" |
| do |
| SHARD_RAN="" |
| if [ "${TEST_SHARD}" == "buildtest" ] ; then |
| tools/bazel version | grep "$VERSION" || { echo "Detected bazel version did not match expected value of $VERSION" >/dev/stderr; exit 1; } |
| tools/bazel build "${ACTION_ENV_FLAG}" --build_tag_filters='-experiment_variation' -- //... "${EXCLUDED_TARGETS[@]}" || FAILED_TESTS="${FAILED_TESTS}buildtest " |
| tools/bazel build "${ACTION_ENV_FLAG}" --config fuzztest --build_tag_filters='-experiment_variation' -- //fuzztest/... || FAILED_TESTS="${FAILED_TESTS}fuzztest_buildtest " |
| SHARD_RAN="true" |
| fi |
| |
| for TEST_DIRECTORY in "${TEST_DIRECTORIES[@]}" |
| do |
| pushd "test/distrib/bazel/${TEST_DIRECTORY}/" |
| if [ "${TEST_SHARD}" == "distribtest_${TEST_DIRECTORY}" ] ; then |
| tools/bazel version | grep "$VERSION" || { echo "Detected bazel version did not match expected value of $VERSION" >/dev/stderr; exit 1; } |
| tools/bazel test "${ACTION_ENV_FLAG}" --test_output=all //:all || FAILED_TESTS="${FAILED_TESTS}distribtest_${TEST_DIRECTORY} " |
| SHARD_RAN="true" |
| fi |
| popd |
| done |
| |
| if [ "${SHARD_RAN}" == "" ]; then |
| echo "Unknown shard '${TEST_SHARD}'" |
| exit 1 |
| fi |
| done |
| |
| if [ "$FAILED_TESTS" != "" ] |
| then |
| echo "Failed tests at version ${VERSION}: ${FAILED_TESTS}" |
| exit 1 |
| fi |