1#!/bin/bash 2# Copyright 2020 Google LLC 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15################################################################################ 16 17set -euo pipefail 18 19 20####################################### 21# Checks if the maven targets in BUILD.bazel have all the required dependencies. 22# * ":tink" should have all java_libraries except integration as dependencies. 23# * ":tink-android" should have all android_libraries except integration as 24# dependencies. 25# * ":tink-awskms should have all java_libraries in the awskms folder as 26# dependencies. 27# * ":tink-gcpkms should have all java_libraries in the gcpkms folder as 28# dependencies. 29# 30# Globals: 31# None (except cwd) 32# Arguments: 33# Outputs: 34# Writes to stdout 35####################################### 36test_build_bazel_file() { 37 pushd java_src 38 local main_dir="//src/main/java/com/google/crypto/tink" 39 # src_android contains android_library targets where the source file differes for java and android. 40 local android_dir="//src_android/main/java/com/google/crypto/tink" 41 local integration_dir="${main_dir}/integration" 42 43 # Targets in //src/main/java/com/google/crypto/tink of type "java_library", 44 # excluding: 45 # * testonly targets 46 # * targets in //src/main/java/com/google/crypto/tink/integration 47 local all_java_libs="$(mktemp)" 48 bazel query "kind(java_library,${main_dir}/...) except attr(testonly,1,${main_dir}/...) except kind(java_library,${integration_dir}/...)" > "${all_java_libs}" 49 50 # Targets in //src/main/java/com/google/crypto/tink of type "android_library" 51 # excluding testonly targets 52 local all_android_libs="$(mktemp)" 53 bazel query "kind(android_library,${main_dir}/...) except attr(testonly,1,${main_dir}/...)" > "${all_android_libs}" 54 55 # Targets in //src_android/main/java/com/google/crypto/tink of type "android_library", 56 # excluding: 57 # * testonly targets 58 bazel query "kind(android_library,${android_dir}/...) except attr(testonly,1,${main_dir}/...)" >> "${all_android_libs}" 59 60 61 # Targets in //src/main/java/com/google/crypto/tink/integration/awskms of 62 # type "java_library" excluding testonly targets 63 local all_aws_kms_libs="$(mktemp)" 64 bazel query "kind(java_library,${integration_dir}/awskms/...) except attr(testonly,1,${integration_dir}/...)" > "${all_aws_kms_libs}" 65 66 # Targets in //src/main/java/com/google/crypto/tink/integration/gcpkms of 67 # type "java_library" excluding testonly targets 68 all_gcp_kms_libs="$(mktemp)" 69 bazel query "kind(java_library,${integration_dir}/gcpkms/...) except attr(testonly,1,${integration_dir}/...)" > "${all_gcp_kms_libs}" 70 popd 71 72 python3 kokoro/testutils/create_main_build_file.py \ 73 "${all_java_libs}" \ 74 "${all_android_libs}" \ 75 "${all_aws_kms_libs}" \ 76 "${all_gcp_kms_libs}" > java_src/BUILD.bazel.generated 77 78 buildifier java_src/BUILD.bazel.generated 79 80 if ! cmp -s java_src/BUILD.bazel java_src/BUILD.bazel.generated ; then 81 echo "Files BUILD.bazel and BUILD.bazel.generated are different." 82 echo "#=============== BROKEN file //third_party/tink/java_src/BUILD.bazel. Should be: " 83 cat java_src/BUILD.bazel.generated 84 echo "#=============== END BROKEN file //third_party/tink/java_src/BUILD.bazel." 85 echo "#=============== To fix this, run (from <Your CitC Client>/google3): " 86 echo "g4 open third_party/tink/java_src/BUILD.bazel" 87 echo "patch third_party/tink/java_src/BUILD.bazel<<END_OF_PATCH" 88 ## We run under "set -e", so exit on error. Diff returns a non-zero exit 89 ## status we flip it here. 90 ! diff java_src/BUILD.bazel java_src/BUILD.bazel.generated 91 echo "END_OF_PATCH" 92 echo "#=============== End of command" 93 exit 1 94 fi 95} 96 97if [[ -n "${KOKORO_ROOT:-}" ]] ; then 98 cd "${KOKORO_ARTIFACTS_DIR}/git/tink" 99 use_bazel.sh "$(cat java_src/.bazelversion)" 100fi 101 102test_build_bazel_file 103