Skip to content

Commit 5a9682d

Browse files
feat: Support for SwiftSettings: swiftLanguageMode, enableUpcomingFeature, enableExperimentalFeature (#1423)
I'm trying to use some of the new GRPC and Protobuf package versions and some of them have adopted upcoming and experimental features as well as the Swift 6 language mode. These SwiftSettings are ignored in the current master. This PR adds support for these features to the repository rule. ## Test Plan SwiftProtobuf uses the experimental StrictConcurrency feature and the upcoming ExistentialAny feature, so it was a good test case for this feature. This is the generated BUILD file with this branch in the swift_protobuf example. ```python logan@Logans-MacBook-Pro swift_protobuf_example % bazel query --output=build ... swift_library( name = "SwiftProtobuf.rspm", visibility = ["@swiftpkg_swift_protobuf//:__subpackages__"], tags = ["manual"], features = ["swift.experimental.StrictConcurrency=complete", "swift.upcoming.ExistentialAny"], data = ["@swiftpkg_swift_protobuf//:SwiftProtobuf.rspm_resource_bundle"], copts = ["-DSWIFT_PACKAGE"], module_name = "SwiftProtobuf", srcs = [...], always_include_developer_search_paths = True, alwayslink = True, ) ... ``` --------- Co-authored-by: Chuck Grindel <chuck@revealtech.ai>
1 parent 1e8b04e commit 5a9682d

21 files changed

+328
-260
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/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
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/common,examples/grpc_example/sources/server,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/common,examples/grpc_example/sources/server,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

.github/actions/set_up_ubuntu/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ inputs:
1010
required: true
1111
swift_release_tag:
1212
description: The Swift release tag.
13-
default: "swift-5.9.1-RELEASE"
13+
default: "swift-6.0.3-RELEASE"
1414

1515
runs:
1616
using: composite

examples/grpc_example/.bazelrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,7 @@ try-import %workspace%/../../local.bazelrc
1010
# GRPC requires C++17 or later.
1111
build --cxxopt='-std=c++17'
1212
build --host_cxxopt='-std=c++17'
13+
14+
# Force building for macOS 15.0:
15+
build --macos_minimum_os=15.0
16+
build --host_macos_minimum_os=15.0

examples/grpc_example/MODULE.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ use_repo(
4949
"swift_deps_info",
5050
"swift_package",
5151
"swiftpkg_grpc_swift",
52+
"swiftpkg_grpc_swift_nio_transport",
53+
"swiftpkg_grpc_swift_protobuf",
5254
"swiftpkg_swift_protobuf",
5355
)

examples/grpc_example/Package.resolved

Lines changed: 62 additions & 26 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: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import PackageDescription
55
let package = Package(
66
name: "grpc_example",
77
dependencies: [
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"),
8+
.package(url: "https://github.com/grpc/grpc-swift.git", exact: "2.1.0"),
9+
.package(url: "https://github.com/grpc/grpc-swift-protobuf.git", exact: "1.1.0"),
10+
.package(url: "https://github.com/grpc/grpc-swift-nio-transport.git", exact: "1.0.1"),
11+
.package(url: "https://github.com/apple/swift-protobuf.git", from: "1.28.1"),
1112
]
1213
)

examples/grpc_example/compilers/BUILD.bazel

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
21
load(
32
"@build_bazel_rules_swift//proto:proto.bzl",
43
"swift_proto_compiler",
@@ -7,7 +6,6 @@ load(
76
"//compilers:swift_proto_compiler_macros.bzl",
87
"GRPC_VARIANT_CLIENT",
98
"GRPC_VARIANT_SERVER",
10-
"GRPC_VARIANT_TEST_CLIENT",
119
"PROTO_PLUGIN_OPTIONS",
1210
"PROTO_PLUGIN_OPTION_ALLOWLIST",
1311
"make_grpc_swift_proto_compiler",
@@ -40,18 +38,3 @@ make_grpc_swift_proto_compiler(
4038
name = "swift_client_proto",
4139
variants = [GRPC_VARIANT_CLIENT],
4240
)
43-
44-
make_grpc_swift_proto_compiler(
45-
name = "swift_test_client_proto",
46-
variants = [GRPC_VARIANT_TEST_CLIENT],
47-
)
48-
49-
bzl_library(
50-
name = "swift_proto_compiler_macros",
51-
srcs = ["swift_proto_compiler_macros.bzl"],
52-
visibility = ["//visibility:public"],
53-
deps = [
54-
"@bazel_skylib//lib:dicts",
55-
"@build_bazel_rules_swift//swift",
56-
],
57-
)

examples/grpc_example/compilers/swift_proto_compiler_macros.bzl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ PROTO_PLUGIN_OPTIONS = {
3636
}
3737
GRPC_VARIANT_SERVER = "Server"
3838
GRPC_VARIANT_CLIENT = "Client"
39-
GRPC_VARIANT_TEST_CLIENT = "TestClient"
4039
GRPC_VARIANTS = [
4140
GRPC_VARIANT_SERVER,
4241
GRPC_VARIANT_CLIENT,
43-
GRPC_VARIANT_TEST_CLIENT,
4442
]
4543
GRPC_PLUGIN_OPTION_ALLOWLIST = PROTO_PLUGIN_OPTION_ALLOWLIST + [
4644
"KeepMethodCasing",
@@ -72,14 +70,15 @@ def make_grpc_swift_proto_compiler(
7270
swift_proto_compiler(
7371
name = name,
7472
protoc = "@protobuf//:protoc",
75-
plugin = "@swiftpkg_grpc_swift//:protoc-gen-grpc-swift",
73+
plugin = "@swiftpkg_grpc_swift_protobuf//:protoc-gen-grpc-swift",
7674
plugin_name = name.removesuffix("_proto"),
7775
plugin_option_allowlist = GRPC_PLUGIN_OPTION_ALLOWLIST,
7876
plugin_options = merged_plugin_options,
7977
suffixes = [".grpc.swift"],
8078
deps = [
8179
"@swiftpkg_swift_protobuf//:SwiftProtobuf",
82-
"@swiftpkg_grpc_swift//:GRPC",
80+
"@swiftpkg_grpc_swift_protobuf//:GRPCProtobuf",
81+
"@swiftpkg_grpc_swift//:GRPCCore",
8382
],
8483
visibility = ["//visibility:public"],
8584
)

0 commit comments

Comments
 (0)