run-plugin-tests.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/bin/bash
  2. # Copyright 2024, gRPC Authors All rights reserved.
  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. set -eux
  16. HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  17. GRPC_PATH="${HERE}/.."
  18. function generate_package_manifest {
  19. local tools_version=$1
  20. local grpc_path=$2
  21. local grpc_version=$3
  22. echo "// swift-tools-version: $tools_version"
  23. echo "import PackageDescription"
  24. echo ""
  25. echo "let package = Package("
  26. echo " name: \"Foo\","
  27. echo " dependencies: ["
  28. echo " .package(path: \"$grpc_path\"),"
  29. echo " .package(url: \"https://github.com/apple/swift-protobuf\", from: \"1.26.0\")"
  30. echo " ],"
  31. echo " targets: ["
  32. echo " .executableTarget("
  33. echo " name: \"Foo\","
  34. echo " dependencies: ["
  35. if [ "$grpc_version" == "v1" ]; then
  36. echo " .product(name: \"GRPC\", package: \"grpc-swift\"),"
  37. elif [ "$grpc_version" == "v2" ]; then
  38. echo " .product(name: \"_GRPCCore\", package: \"grpc-swift\"),"
  39. echo " .product(name: \"_GRPCProtobuf\", package: \"grpc-swift\"),"
  40. fi
  41. echo " ],"
  42. echo " path: \"Sources/Foo\","
  43. echo " plugins: ["
  44. echo " .plugin(name: \"GRPCSwiftPlugin\", package: \"grpc-swift\"),"
  45. echo " .plugin(name: \"SwiftProtobufPlugin\", package: \"swift-protobuf\"),"
  46. echo " ]"
  47. echo " ),"
  48. echo " ]"
  49. echo ")"
  50. }
  51. function generate_grpc_plugin_config {
  52. local grpc_version=$1
  53. echo "{"
  54. echo " \"invocations\": ["
  55. echo " {"
  56. if [ "$grpc_version" == "v2" ]; then
  57. echo " \"_V2\": true,"
  58. fi
  59. echo " \"protoFiles\": [\"Foo.proto\"],"
  60. echo " \"visibility\": \"internal\""
  61. echo " }"
  62. echo " ]"
  63. echo "}"
  64. }
  65. function generate_protobuf_plugin_config {
  66. echo "{"
  67. echo " \"invocations\": ["
  68. echo " {"
  69. echo " \"protoFiles\": [\"Foo.proto\"],"
  70. echo " \"visibility\": \"internal\""
  71. echo " }"
  72. echo " ]"
  73. echo "}"
  74. }
  75. function generate_proto {
  76. cat <<EOF
  77. syntax = "proto3";
  78. service Foo {
  79. rpc Bar(Baz) returns (Baz) {}
  80. }
  81. message Baz {}
  82. EOF
  83. }
  84. function generate_main {
  85. echo "// This file was intentionally left blank."
  86. }
  87. function generate_and_build {
  88. local tools_version=$1
  89. local grpc_path=$2
  90. local grpc_version=$3
  91. local protoc_path dir
  92. protoc_path=$(which protoc)
  93. dir=$(mktemp -d)
  94. echo "Generating package in $dir ..."
  95. echo "Swift tools version: $tools_version"
  96. echo "grpc-swift version: $grpc_version"
  97. echo "grpc-swift path: $grpc_path"
  98. echo "protoc path: $protoc_path"
  99. mkdir -p "$dir/Sources/Foo"
  100. generate_package_manifest "$tools_version" "$grpc_path" "$grpc_version" > "$dir/Package.swift"
  101. generate_protobuf_plugin_config > "$dir/Sources/Foo/swift-protobuf-config.json"
  102. generate_proto > "$dir/Sources/Foo/Foo.proto"
  103. generate_main > "$dir/Sources/Foo/main.swift"
  104. generate_grpc_plugin_config "$grpc_version" > "$dir/Sources/Foo/grpc-swift-config.json"
  105. PROTOC_PATH=$protoc_path swift build --package-path "$dir"
  106. }
  107. if [[ $# -lt 2 ]]; then
  108. echo "Usage: $0 SWIFT_TOOLS_VERSION GRPC_SWIFT_VERSION"
  109. fi
  110. if [ "$2" != "v1" ] && [ "$2" != "v2" ]; then
  111. echo "Invalid gRPC Swift version '$2' (must be 'v1' or 'v2')"
  112. exit 1
  113. fi
  114. generate_and_build "$1" "${GRPC_PATH}" "$2"