Skip to content

Commit e726e36

Browse files
authored
Move availability inline (#105)
Motivation: It's hard for packages to incrementally adopt gRPC with platforms in the package manifest as it requires packages to include platforms in their manifest or mint a new major version. Modifications: - Move platform availability onto source code - Check annotations in CI Result: Easier to adopt
1 parent 4c96199 commit e726e36

File tree

108 files changed

+379
-22
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+379
-22
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313
with:
1414
linux_5_9_enabled: false
1515
linux_5_10_enabled: false
16-
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
17-
linux_6_1_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
18-
linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
19-
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
16+
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
17+
linux_6_1_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
18+
linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
19+
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
2020

2121
construct-integration-tests-matrix:
2222
name: Construct integration matrix

.github/workflows/pull_request.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ jobs:
2222
with:
2323
linux_5_9_enabled: false
2424
linux_5_10_enabled: false
25-
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
26-
linux_6_1_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
27-
linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
28-
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors"
25+
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
26+
linux_6_1_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
27+
linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
28+
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -warnings-as-errors -Xswiftc -require-explicit-availability"
2929

3030
construct-integration-tests-matrix:
3131
name: Construct integration matrix

Package.swift

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ let products: [Product] = [
3535
let dependencies: [Package.Dependency] = [
3636
.package(
3737
url: "https://github.com/grpc/grpc-swift.git",
38-
from: "2.2.0"
38+
from: "2.2.1"
3939
),
4040
.package(
4141
url: "https://github.com/apple/swift-nio.git",
@@ -67,12 +67,28 @@ let dependencies: [Package.Dependency] = [
6767
),
6868
]
6969

70-
let defaultSwiftSettings: [SwiftSetting] = [
71-
.swiftLanguageMode(.v6),
72-
.enableUpcomingFeature("ExistentialAny"),
73-
.enableUpcomingFeature("InternalImportsByDefault"),
74-
.enableUpcomingFeature("MemberImportVisibility"),
75-
]
70+
// -------------------------------------------------------------------------------------------------
71+
72+
// This adds some build settings which allow us to map "@available(gRPCSwiftNIOTransport 1.x, *)" to
73+
// the appropriate OS platforms.
74+
let nextMinorVersion = 3
75+
let availabilitySettings: [SwiftSetting] = (0 ... nextMinorVersion).map { minor in
76+
let name = "gRPCSwiftNIOTransport"
77+
let version = "1.\(minor)"
78+
let platforms = "macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0"
79+
let setting = "AvailabilityMacro=\(name) \(version):\(platforms)"
80+
return .enableExperimentalFeature(setting)
81+
}
82+
83+
let defaultSwiftSettings: [SwiftSetting] =
84+
availabilitySettings + [
85+
.swiftLanguageMode(.v6),
86+
.enableUpcomingFeature("ExistentialAny"),
87+
.enableUpcomingFeature("InternalImportsByDefault"),
88+
.enableUpcomingFeature("MemberImportVisibility"),
89+
]
90+
91+
// -------------------------------------------------------------------------------------------------
7692

7793
let targets: [Target] = [
7894
// C-module for z-lib shims
@@ -156,13 +172,6 @@ let targets: [Target] = [
156172

157173
let package = Package(
158174
name: "grpc-swift-nio-transport",
159-
platforms: [
160-
.macOS(.v15),
161-
.iOS(.v18),
162-
.tvOS(.v18),
163-
.watchOS(.v11),
164-
.visionOS(.v2),
165-
],
166175
products: products,
167176
dependencies: dependencies,
168177
targets: targets

Sources/GRPCNIOTransportCore/Client/Connection/Connection.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ private import Synchronization
4343
/// }
4444
/// }
4545
/// ```
46+
@available(gRPCSwiftNIOTransport 1.0, *)
4647
package final class Connection: Sendable {
4748
/// Events which can happen over the lifetime of the connection.
4849
package enum Event: Sendable {
@@ -405,6 +406,7 @@ package final class Connection: Sendable {
405406
}
406407
}
407408

409+
@available(gRPCSwiftNIOTransport 1.0, *)
408410
extension Connection {
409411
package struct Stream {
410412
package typealias Inbound = NIOAsyncChannelInboundStream<RPCResponsePart<GRPCNIOTransportBytes>>
@@ -478,6 +480,7 @@ extension Connection {
478480
}
479481
}
480482

483+
@available(gRPCSwiftNIOTransport 1.0, *)
481484
extension Connection {
482485
private enum State: Sendable {
483486
/// The connection is idle or connecting.

Sources/GRPCNIOTransportCore/Client/Connection/ConnectionBackoff.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
@available(gRPCSwiftNIOTransport 1.0, *)
1718
package struct ConnectionBackoff {
1819
package var initial: Duration
1920
package var max: Duration

Sources/GRPCNIOTransportCore/Client/Connection/ConnectionFactory.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package import NIOCore
1818
package import NIOHTTP2
1919
internal import NIOPosix
2020

21+
@available(gRPCSwiftNIOTransport 1.0, *)
2122
package protocol HTTP2Connector: Sendable {
2223
/// Attempt to establish a connection to the given address.
2324
///
@@ -30,6 +31,7 @@ package protocol HTTP2Connector: Sendable {
3031
) async throws -> HTTP2Connection
3132
}
3233

34+
@available(gRPCSwiftNIOTransport 1.0, *)
3335
package struct HTTP2Connection: Sendable {
3436
/// The underlying TCP connection wrapped up for use with gRPC.
3537
var channel: NIOAsyncChannel<ClientConnectionEvent, Void>

Sources/GRPCNIOTransportCore/Client/Connection/ConnectivityState.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package import GRPCCore
1818

19+
@available(gRPCSwiftNIOTransport 1.0, *)
1920
package enum ConnectivityState: Sendable, Hashable {
2021
/// This channel isn't trying to create a connection because of a lack of new or pending RPCs.
2122
///

Sources/GRPCNIOTransportCore/Client/Connection/GRPCChannel.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ private import DequeModule
1818
package import GRPCCore
1919
private import Synchronization
2020

21+
@available(gRPCSwiftNIOTransport 1.0, *)
2122
package final class GRPCChannel: ClientTransport {
2223
package typealias Bytes = GRPCNIOTransportBytes
2324

@@ -239,6 +240,7 @@ package final class GRPCChannel: ClientTransport {
239240
}
240241
}
241242

243+
@available(gRPCSwiftNIOTransport 1.0, *)
242244
extension GRPCChannel {
243245
package struct Config: Sendable {
244246
/// Configuration for HTTP/2 connections.
@@ -267,6 +269,7 @@ extension GRPCChannel {
267269
}
268270
}
269271

272+
@available(gRPCSwiftNIOTransport 1.0, *)
270273
extension GRPCChannel {
271274
enum MakeStreamResult {
272275
/// A stream was created, use it.
@@ -365,6 +368,7 @@ extension GRPCChannel {
365368
}
366369
}
367370

371+
@available(gRPCSwiftNIOTransport 1.0, *)
368372
extension GRPCChannel {
369373
private func handleClose(in group: inout DiscardingTaskGroup) {
370374
switch self.state.withLock({ $0.close() }) {
@@ -593,6 +597,7 @@ extension GRPCChannel {
593597
}
594598
}
595599

600+
@available(gRPCSwiftNIOTransport 1.0, *)
596601
extension GRPCChannel {
597602
struct StateMachine {
598603
enum State {
@@ -667,6 +672,7 @@ extension GRPCChannel {
667672
}
668673
}
669674

675+
@available(gRPCSwiftNIOTransport 1.0, *)
670676
extension GRPCChannel.StateMachine {
671677
mutating func start() {
672678
precondition(!self.running, "channel must only be started once")

Sources/GRPCNIOTransportCore/Client/Connection/LoadBalancers/LoadBalancer.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17+
@available(gRPCSwiftNIOTransport 1.0, *)
1718
package enum LoadBalancer: Sendable {
1819
case roundRobin(RoundRobinLoadBalancer)
1920
case pickFirst(PickFirstLoadBalancer)
2021
}
2122

23+
@available(gRPCSwiftNIOTransport 1.0, *)
2224
extension LoadBalancer {
2325
package init(_ loadBalancer: RoundRobinLoadBalancer) {
2426
self = .roundRobin(loadBalancer)

Sources/GRPCNIOTransportCore/Client/Connection/LoadBalancers/LoadBalancerEvent.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
/// Events emitted by load-balancers.
18+
@available(gRPCSwiftNIOTransport 1.0, *)
1819
package enum LoadBalancerEvent: Sendable, Hashable {
1920
/// The connectivity state of the subchannel changed.
2021
case connectivityStateChanged(ConnectivityState)

0 commit comments

Comments
 (0)