Skip to content

Commit 9b54bf3

Browse files
AttilaTheFuncgrindelmergify[bot]
authored
feat: Use GRPC from Swift Package Manager (#1532)
This is a re-do of #1019 which was closed when @brentleyjones 's PR merged, rebased onto the main branch. This PR updates the GRPC examples to use a version of GRPC from RSPM. This is important because without this change developers would get compiler warnings or errors about duplicate symbols between the GRPC version included with rules_swift and GRPC pulled in through a Swift Package dependency. I haven't been able to merge this PR previously because, before @brentleyjones merged this fix: #1385 This is because the swift-atomics package (a dependency of grpc-swift) crashes on ubuntu without this flag. --------- Co-authored-by: Chuck Grindel <chuck.grindel@gmail.com> Co-authored-by: Chuck Grindel <chuck@revealtech.ai> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent ea96e2f commit 9b54bf3

36 files changed

+297
-588
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# To update these lines, execute
22
# `bazel run @rules_bazel_integration_test//tools:update_deleted_packages`
3-
build --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/google_maps_example,examples/google_maps_example/GoogleMapsExample,examples/google_maps_example/third-party/google-maps-ios-sdk,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/interesting_deps,examples/interesting_deps/ios,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources/Models,examples/messagekit_example/Tests/ModelTests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/objc_code/Tests/TrustKitTests,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/skip_local_transitive_dependencies_example,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/swift_package_registry_example,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example
4-
query --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/google_maps_example,examples/google_maps_example/GoogleMapsExample,examples/google_maps_example/third-party/google-maps-ios-sdk,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/interesting_deps,examples/interesting_deps/ios,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources/Models,examples/messagekit_example/Tests/ModelTests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/objc_code/Tests/TrustKitTests,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/skip_local_transitive_dependencies_example,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/swift_package_registry_example,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example
3+
build --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/google_maps_example,examples/google_maps_example/GoogleMapsExample,examples/google_maps_example/third-party/google-maps-ios-sdk,examples/grpc_example,examples/grpc_example/compilers,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/interesting_deps,examples/interesting_deps/ios,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources/Models,examples/messagekit_example/Tests/ModelTests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/objc_code/Tests/TrustKitTests,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/skip_local_transitive_dependencies_example,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/swift_package_registry_example,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example
4+
query --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/google_maps_example,examples/google_maps_example/GoogleMapsExample,examples/google_maps_example/third-party/google-maps-ios-sdk,examples/grpc_example,examples/grpc_example/compilers,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/interesting_deps,examples/interesting_deps/ios,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources/Models,examples/messagekit_example/Tests/ModelTests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/objc_code/Tests/TrustKitTests,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/skip_local_transitive_dependencies_example,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/swift_package_registry_example,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example
55

66
# Import Shared settings
77
import %workspace%/shared.bazelrc

examples/grpc_example/BUILD.bazel

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +0,0 @@
1-
load("@bazel_gazelle//:def.bzl", "gazelle", "gazelle_binary")
2-
load("@cgrindel_bazel_starlib//bzltidy:defs.bzl", "tidy")
3-
4-
tidy(
5-
name = "tidy",
6-
targets = [
7-
":update_build_files",
8-
],
9-
)
10-
11-
# MARK: - Gazelle
12-
13-
# Ignore the Swift build folder
14-
# gazelle:proto file
15-
# gazelle:proto_strip_import_prefix /protos
16-
# gazelle:proto_import_prefix example
17-
# gazelle:swift_module_naming_convention pascal_case
18-
# gazelle:swift_generate_proto_libraries true
19-
# gazelle:swift_generate_grpc_libraries_with_flavors swift_client_proto,swift_server_proto
20-
# gazelle:exclude .build
21-
22-
gazelle_binary(
23-
name = "gazelle_bin",
24-
languages = [
25-
"@bazel_skylib_gazelle_plugin//bzl",
26-
"@bazel_gazelle//language/proto",
27-
"@swift_gazelle_plugin//gazelle",
28-
],
29-
)
30-
31-
gazelle(
32-
name = "update_build_files",
33-
gazelle = ":gazelle_bin",
34-
)

examples/grpc_example/MODULE.bazel

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,43 @@ local_path_override(
1111
path = "../..",
1212
)
1313

14-
bazel_dep(name = "cgrindel_bazel_starlib", version = "0.25.2")
15-
bazel_dep(name = "bazel_skylib", version = "1.7.1")
14+
# Required by rules_swift_package_manager but not pulled in for some reason:
15+
bazel_dep(name = "cgrindel_bazel_starlib", version = "0.25.1")
1616

17-
# The apple_support bazel_dep must come before the rules_cc.
18-
# https://github.com/bazelbuild/apple_support#incompatible-toolchain-resolution
19-
bazel_dep(name = "apple_support", version = "1.19.0")
20-
bazel_dep(
21-
name = "rules_swift",
22-
version = "2.7.0",
23-
repo_name = "build_bazel_rules_swift",
24-
)
25-
26-
non_module_deps = use_extension("@build_bazel_rules_swift//swift:extensions.bzl", "non_module_deps")
27-
use_repo(
28-
non_module_deps,
29-
"build_bazel_rules_swift_index_import",
30-
"build_bazel_rules_swift_local_config",
31-
"com_github_apple_swift_log",
32-
)
33-
34-
bazel_dep(
35-
name = "rules_apple",
36-
version = "3.20.1",
37-
repo_name = "build_bazel_rules_apple",
38-
)
39-
40-
bazel_dep(
41-
name = "bazel_skylib_gazelle_plugin",
42-
version = "1.7.1",
43-
dev_dependency = True,
44-
)
45-
bazel_dep(
46-
name = "gazelle",
47-
version = "0.42.0",
48-
dev_dependency = True,
49-
repo_name = "bazel_gazelle",
50-
)
51-
bazel_dep(
52-
name = "swift_gazelle_plugin",
53-
version = "0.1.0",
54-
dev_dependency = True,
55-
)
17+
# Required by custom swift proto compiler plugin:
18+
bazel_dep(name = "bazel_skylib", version = "1.4.2")
19+
bazel_dep(name = "protobuf", version = "30.0")
5620

21+
# Required for proto_library targets:
5722
bazel_dep(name = "rules_proto", version = "7.1.0")
5823

59-
# Gazelle currently needs protobuf to be named com_google_protobuf.
60-
# If they fix this, we can remove the repo_name argument.
61-
bazel_dep(name = "protobuf", version = "30.1", repo_name = "com_google_protobuf")
24+
# Required for compiling objc:
25+
bazel_dep(name = "apple_support", version = "1.19.0")
26+
27+
# Required for swift_binary and swift_proto_library targets:
28+
bazel_dep(name = "rules_swift", version = "2.7.0", repo_name = "build_bazel_rules_swift")
6229

30+
# Configure cc toolchain:
6331
apple_cc_configure = use_extension(
6432
"@apple_support//crosstool:setup.bzl",
6533
"apple_cc_configure_extension",
6634
)
6735
use_repo(apple_cc_configure, "local_config_apple_cc")
36+
37+
# Required for SwiftProtobuf and GRPC Swift:
38+
swift_deps = use_extension(
39+
"@rules_swift_package_manager//:extensions.bzl",
40+
"swift_deps",
41+
)
42+
swift_deps.from_package(
43+
declare_swift_deps_info = True,
44+
resolved = "//:Package.resolved",
45+
swift = "//:Package.swift",
46+
)
47+
use_repo(
48+
swift_deps,
49+
"swift_deps_info",
50+
"swift_package",
51+
"swiftpkg_grpc_swift",
52+
"swiftpkg_swift_protobuf",
53+
)

examples/grpc_example/Package.resolved

Lines changed: 113 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/grpc_example/Package.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import PackageDescription
55
let package = Package(
66
name: "grpc_example",
77
dependencies: [
8-
// NOTE: The https://github.com/grpc/grpc-swift are currently coming from rules_swift.
9-
// Related Slack thread: https://bazelbuild.slack.com/archives/CD3QY5C2X/p1692055426375909
8+
// These are the versions used by rules_swift 1.18.0
9+
.package(url: "https://github.com/grpc/grpc-swift.git", exact: "1.16.0"),
10+
.package(url: "https://github.com/apple/swift-protobuf.git", exact: "1.20.2"),
1011
]
1112
)

examples/grpc_example/aaa_test/BUILD.bazel

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)