Build Information
Successful build of Citadel, reference main (48d4a8), with Swift 6.1 for macOS (SPM) on 24 Oct 2025 14:12:25 UTC.
Swift 6 data race errors: 33
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCapturesBuild Log
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:148:13: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
146 | )
147 | }.flatMap { pipeChannel -> EventLoopFuture<Channel> in
148 | self.pipeChannel = pipeChannel
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
149 | let start = channel.eventLoop.makePromise(of: Void.self)
150 | start.completeWithTask {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:20:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
18 | import NIOFoundationCompat
19 | import NIOPosix
20 | import NIOSSH
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
21 |
22 | #if canImport(Darwin)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:152:21: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
150 | start.completeWithTask {
151 | do {
152 | self.context = try await delegate.start(
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
153 | command: event.command,
154 | outputHandler: handler
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:162:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
160 |
161 | return start.futureResult.flatMap {
162 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
163 | return channel.triggerUserOutboundEvent(ChannelSuccessEvent()).map {
164 | pipeChannel
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:181:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
179 | channel.close(promise: nil)
180 | case .failure:
181 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
182 | channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
183 | channel.close(promise: nil)
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:65:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
63 |
64 | func channelInactive(context: ChannelHandlerContext) {
65 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
66 | try await self.context?.terminate()
| `- note: closure captures 'self' which is accessible to code in the current task
67 | self.context = nil
68 | self.pipeChannel = nil
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
88 | }
89 | case ChannelEvent.inputClosed:
90 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
91 | try await self.context?.inputClosed()
| `- note: closure captures 'self' which is accessible to code in the current task
92 | }
93 | default:
[915/923] Compiling Citadel ExecClient.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Errors.swift:19:10: warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
17 | public enum SFTPError: Error {
18 | case unknownMessage
19 | case invalidPayload(type: SFTPMessageType)
| `- warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
20 | case invalidResponse
21 | case noResponseTarget
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/SFTPBasicEnums.swift:38:13: note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
36 | }
37 |
38 | public enum SFTPMessageType: UInt8 {
| `- note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
39 | case initialize = 1
40 | case version = 2
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:34:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
32 | func handlerAdded(context: ChannelHandlerContext) {
33 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
34 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
35 | }
36 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:119:25: warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
5 | /// A channel handler that manages TTY (terminal) input/output for SSH command execution.
6 | /// This handler processes both incoming and outgoing data through the SSH channel.
7 | final class TTYHandler: ChannelDuplexHandler {
| `- note: class 'TTYHandler' does not conform to the 'Sendable' protocol
8 | typealias InboundIn = SSHChannelData
9 | typealias InboundOut = ByteBuffer
:
117 | sshHandler.value.createChannel(createChannel) { channel, _ in
118 | channel.pipeline.addHandlers(
119 | TTYHandler(
| `- warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
120 | maxResponseSize: maxResponseSize,
121 | done: promise
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:60:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | func handlerAdded(context: ChannelHandlerContext) {
59 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
60 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:80:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
78 | } else if event.wantReply {
79 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
80 | context.channel.close(promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
81 | }
82 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:138:37: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
136 | }
137 |
138 | channel.pipeline.addHandler(ours).flatMap {
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
139 | NIOPipeBootstrap(group: channel.eventLoop)
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:54: warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:40:13: note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
38 | }
39 |
40 | final class SSHInboundChannelDataWrapper: ChannelInboundHandler {
| `- note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = ByteBuffer
42 | typealias InboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:143:19: warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
| |- warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
| `- note: use 'takingOwnershipOfDescriptors(input:output:)' instead
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:144:42: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
146 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:148:13: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
146 | )
147 | }.flatMap { pipeChannel -> EventLoopFuture<Channel> in
148 | self.pipeChannel = pipeChannel
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
149 | let start = channel.eventLoop.makePromise(of: Void.self)
150 | start.completeWithTask {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:20:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
18 | import NIOFoundationCompat
19 | import NIOPosix
20 | import NIOSSH
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
21 |
22 | #if canImport(Darwin)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:152:21: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
150 | start.completeWithTask {
151 | do {
152 | self.context = try await delegate.start(
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
153 | command: event.command,
154 | outputHandler: handler
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:162:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
160 |
161 | return start.futureResult.flatMap {
162 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
163 | return channel.triggerUserOutboundEvent(ChannelSuccessEvent()).map {
164 | pipeChannel
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:181:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
179 | channel.close(promise: nil)
180 | case .failure:
181 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
182 | channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
183 | channel.close(promise: nil)
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:65:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
63 |
64 | func channelInactive(context: ChannelHandlerContext) {
65 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
66 | try await self.context?.terminate()
| `- note: closure captures 'self' which is accessible to code in the current task
67 | self.context = nil
68 | self.pipeChannel = nil
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
88 | }
89 | case ChannelEvent.inputClosed:
90 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
91 | try await self.context?.inputClosed()
| `- note: closure captures 'self' which is accessible to code in the current task
92 | }
93 | default:
[916/923] Compiling Citadel ExecDelegate.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Errors.swift:19:10: warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
17 | public enum SFTPError: Error {
18 | case unknownMessage
19 | case invalidPayload(type: SFTPMessageType)
| `- warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
20 | case invalidResponse
21 | case noResponseTarget
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/SFTPBasicEnums.swift:38:13: note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
36 | }
37 |
38 | public enum SFTPMessageType: UInt8 {
| `- note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
39 | case initialize = 1
40 | case version = 2
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:34:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
32 | func handlerAdded(context: ChannelHandlerContext) {
33 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
34 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
35 | }
36 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:119:25: warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
5 | /// A channel handler that manages TTY (terminal) input/output for SSH command execution.
6 | /// This handler processes both incoming and outgoing data through the SSH channel.
7 | final class TTYHandler: ChannelDuplexHandler {
| `- note: class 'TTYHandler' does not conform to the 'Sendable' protocol
8 | typealias InboundIn = SSHChannelData
9 | typealias InboundOut = ByteBuffer
:
117 | sshHandler.value.createChannel(createChannel) { channel, _ in
118 | channel.pipeline.addHandlers(
119 | TTYHandler(
| `- warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
120 | maxResponseSize: maxResponseSize,
121 | done: promise
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:60:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | func handlerAdded(context: ChannelHandlerContext) {
59 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
60 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:80:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
78 | } else if event.wantReply {
79 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
80 | context.channel.close(promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
81 | }
82 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:138:37: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
136 | }
137 |
138 | channel.pipeline.addHandler(ours).flatMap {
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
139 | NIOPipeBootstrap(group: channel.eventLoop)
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:54: warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:40:13: note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
38 | }
39 |
40 | final class SSHInboundChannelDataWrapper: ChannelInboundHandler {
| `- note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = ByteBuffer
42 | typealias InboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:143:19: warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
| |- warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
| `- note: use 'takingOwnershipOfDescriptors(input:output:)' instead
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:144:42: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
146 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:148:13: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
146 | )
147 | }.flatMap { pipeChannel -> EventLoopFuture<Channel> in
148 | self.pipeChannel = pipeChannel
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
149 | let start = channel.eventLoop.makePromise(of: Void.self)
150 | start.completeWithTask {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:20:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
18 | import NIOFoundationCompat
19 | import NIOPosix
20 | import NIOSSH
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
21 |
22 | #if canImport(Darwin)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:152:21: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
150 | start.completeWithTask {
151 | do {
152 | self.context = try await delegate.start(
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
153 | command: event.command,
154 | outputHandler: handler
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:162:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
160 |
161 | return start.futureResult.flatMap {
162 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
163 | return channel.triggerUserOutboundEvent(ChannelSuccessEvent()).map {
164 | pipeChannel
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:181:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
179 | channel.close(promise: nil)
180 | case .failure:
181 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
182 | channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
183 | channel.close(promise: nil)
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:65:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
63 |
64 | func channelInactive(context: ChannelHandlerContext) {
65 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
66 | try await self.context?.terminate()
| `- note: closure captures 'self' which is accessible to code in the current task
67 | self.context = nil
68 | self.pipeChannel = nil
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
88 | }
89 | case ChannelEvent.inputClosed:
90 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
91 | try await self.context?.inputClosed()
| `- note: closure captures 'self' which is accessible to code in the current task
92 | }
93 | default:
[917/923] Compiling Citadel ExecHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Errors.swift:19:10: warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
17 | public enum SFTPError: Error {
18 | case unknownMessage
19 | case invalidPayload(type: SFTPMessageType)
| `- warning: associated value 'invalidPayload(type:)' of 'Sendable'-conforming enum 'SFTPError' has non-sendable type 'SFTPMessageType'; this is an error in the Swift 6 language mode
20 | case invalidResponse
21 | case noResponseTarget
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/SFTPBasicEnums.swift:38:13: note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
36 | }
37 |
38 | public enum SFTPMessageType: UInt8 {
| `- note: consider making enum 'SFTPMessageType' conform to the 'Sendable' protocol
39 | case initialize = 1
40 | case version = 2
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:34:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
32 | func handlerAdded(context: ChannelHandlerContext) {
33 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
34 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
35 | }
36 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Client/ExecClient.swift:119:25: warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
5 | /// A channel handler that manages TTY (terminal) input/output for SSH command execution.
6 | /// This handler processes both incoming and outgoing data through the SSH channel.
7 | final class TTYHandler: ChannelDuplexHandler {
| `- note: class 'TTYHandler' does not conform to the 'Sendable' protocol
8 | typealias InboundIn = SSHChannelData
9 | typealias InboundOut = ByteBuffer
:
117 | sshHandler.value.createChannel(createChannel) { channel, _ in
118 | channel.pipeline.addHandlers(
119 | TTYHandler(
| `- warning: type 'TTYHandler' does not conform to the 'Sendable' protocol
120 | maxResponseSize: maxResponseSize,
121 | done: promise
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:60:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | func handlerAdded(context: ChannelHandlerContext) {
59 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
60 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:80:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
78 | } else if event.wantReply {
79 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
80 | context.channel.close(promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
81 | }
82 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:138:37: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
136 | }
137 |
138 | channel.pipeline.addHandler(ours).flatMap {
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
139 | NIOPipeBootstrap(group: channel.eventLoop)
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:54: warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:40:13: note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
38 | }
39 |
40 | final class SSHInboundChannelDataWrapper: ChannelInboundHandler {
| `- note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = ByteBuffer
42 | typealias InboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:143:19: warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
| |- warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
| `- note: use 'takingOwnershipOfDescriptors(input:output:)' instead
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:144:42: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
145 | outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
146 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 | .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 | .channelInitializer { pipeChannel in
142 | pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
| `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 | }.withPipes(
144 | inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
15 | import NIOCore
16 |
17 | final class GlueHandler {
| `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
18 | private var partner: GlueHandler?
19 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:148:13: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
146 | )
147 | }.flatMap { pipeChannel -> EventLoopFuture<Channel> in
148 | self.pipeChannel = pipeChannel
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
149 | let start = channel.eventLoop.makePromise(of: Void.self)
150 | start.completeWithTask {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:20:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
18 | import NIOFoundationCompat
19 | import NIOPosix
20 | import NIOSSH
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
21 |
22 | #if canImport(Darwin)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:152:21: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
38 | }
39 |
40 | final class ExecHandler: ChannelDuplexHandler {
| `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
41 | typealias InboundIn = SSHChannelData
42 | typealias InboundOut = SSHChannelData
:
150 | start.completeWithTask {
151 | do {
152 | self.context = try await delegate.start(
| `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
153 | command: event.command,
154 | outputHandler: handler
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 | do {
152 | self.context = try await delegate.start(
153 | command: event.command,
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 | outputHandler: handler
155 | )
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 | self.context = try await delegate.start(
153 | command: event.command,
154 | outputHandler: handler
| `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 | )
156 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
| `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 | public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:162:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
160 |
161 | return start.futureResult.flatMap {
162 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
163 | return channel.triggerUserOutboundEvent(ChannelSuccessEvent()).map {
164 | pipeChannel
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:181:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
179 | channel.close(promise: nil)
180 | case .failure:
181 | if event.wantReply {
| `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
182 | channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
183 | channel.close(promise: nil)
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 | /// A request for this session to exec a command.
126 | public struct ExecRequest: Hashable {
| `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 | /// The command to exec.
128 | public var command: String
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:65:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
63 |
64 | func channelInactive(context: ChannelHandlerContext) {
65 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
66 | try await self.context?.terminate()
| `- note: closure captures 'self' which is accessible to code in the current task
67 | self.context = nil
68 | self.pipeChannel = nil
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
88 | }
89 | case ChannelEvent.inputClosed:
90 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
91 | try await self.context?.inputClosed()
| `- note: closure captures 'self' which is accessible to code in the current task
92 | }
93 | default:
[918/923] Compiling Citadel Server.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
38 | func handlerAdded(context: ChannelHandlerContext) {
39 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
40 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
41 | }
42 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
57 | guard let shell = shell, let parent = context.channel.parent else {
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
60 | return context.channel.close()
61 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
60 | return context.channel.close()
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | return
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
65 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
66 | ShellServerSubsystem.setupChannelHanders(
67 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
68 | shell: shell,
69 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
71 | )
72 | }.flatMap { () -> EventLoopFuture<Void> in
73 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
73 | let promise = context.eventLoop.makePromise(of: Void.self)
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
78 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
79 | }
80 | case let event as SSHChannelRequestEvent.SubsystemRequest:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
89 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
90 | SFTPServerSubsystem.setupChannelHanders(
91 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
92 | sftp: sftp,
93 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
95 | )
96 | }.flatMap { () -> EventLoopFuture<Void> in
97 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
97 | let promise = context.eventLoop.makePromise(of: Void.self)
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
102 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 | }
104 | default:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
43 | /// }
44 | /// }
45 | public struct NIOAny {
| `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
46 | @usableFromInline
47 | let _storage: _NIOAny
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:168:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
166 | handlers.append(ExecHandler(delegate: exec, username: username))
167 |
168 | return channel.pipeline.addHandlers(handlers)
| `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
169 | case .directTCPIP(let request):
170 | guard let delegate = directTCPIP else {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:174:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
172 | }
173 |
174 | return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
| `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
175 | return delegate.initializeDirectTCPIPChannel(
176 | channel,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:22: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | internal final class DataToBufferCodec: ChannelDuplexHandler {
| `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:324:21: warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
322 |
323 | return channel.pipeline.addHandlers([
324 | NIOSSHHandler(
| `- warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
325 | role: .server(server),
326 | allocator: channel.allocator,
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/NIOSSHHandler.swift:81:1: note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
79 |
80 | @available(*, unavailable)
81 | extension NIOSSHHandler: Sendable {}
| `- note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
82 |
83 | extension NIOSSHHandler {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:333:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
:
331 | }
332 | ),
333 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
334 | ])
335 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:341:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
239 | /// The server can be closed using the `close()` method.
240 | /// - Note: This class is not thread safe.
241 | public final class SSHServer {
| `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
242 | let channel: Channel
243 | let delegate: CitadelServerDelegate
:
339 | return try await bootstrap.bind(host: host, port: port).map { channel in
340 | SSHServer(channel: channel, logger: logger, delegate: delegate)
341 | }.get()
| `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
342 | }
343 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 | }
101 |
102 | done.futureResult.whenFailure(context.fireErrorCaught)
| `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 | }
104 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
82 |
83 | group.addTask {
84 | for try await message in self.outbound.stream {
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
| `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
| `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
| `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
| `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 | typealias OutboundIn = ByteBuffer
32 | typealias OutboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
| `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 | CloseErrorHandler(logger: logger)
138 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 | )
139 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 | self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 | streamContinuation.yield(.stderr(stderr))
284 | case .eof(let error):
285 | self.logger.debug("EOF triggered, ending the command stream.")
| `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 | if let error {
287 | streamContinuation.finish(throwing: error)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
| `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 | private(set) var session: SSHClientSession
114 | private var userInitiatedClose = false
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
73 | done.completeWithTask {
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
76 | try await self.delegate.startShell(
| `- note: closure captures non-Sendable 'self'
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- note: closure captures non-Sendable 'shellContext'
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
81 | }
82 |
83 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
84 | for try await message in self.outbound.stream {
| `- note: closure captures 'self' which is accessible to code in the current task
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
465 | )
466 |
467 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
468 | do {
469 | let stream = try await executeCommandStream(command, inShell: inShell)
| `- note: closure captures 'self' which is accessible to code in the current task
470 | for try await chunk in stream {
471 | switch chunk {
[919/923] Compiling Citadel ShellDelegate.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
38 | func handlerAdded(context: ChannelHandlerContext) {
39 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
40 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
41 | }
42 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
57 | guard let shell = shell, let parent = context.channel.parent else {
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
60 | return context.channel.close()
61 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
60 | return context.channel.close()
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | return
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
65 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
66 | ShellServerSubsystem.setupChannelHanders(
67 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
68 | shell: shell,
69 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
71 | )
72 | }.flatMap { () -> EventLoopFuture<Void> in
73 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
73 | let promise = context.eventLoop.makePromise(of: Void.self)
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
78 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
79 | }
80 | case let event as SSHChannelRequestEvent.SubsystemRequest:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
89 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
90 | SFTPServerSubsystem.setupChannelHanders(
91 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
92 | sftp: sftp,
93 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
95 | )
96 | }.flatMap { () -> EventLoopFuture<Void> in
97 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
97 | let promise = context.eventLoop.makePromise(of: Void.self)
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
102 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 | }
104 | default:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
43 | /// }
44 | /// }
45 | public struct NIOAny {
| `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
46 | @usableFromInline
47 | let _storage: _NIOAny
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:168:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
166 | handlers.append(ExecHandler(delegate: exec, username: username))
167 |
168 | return channel.pipeline.addHandlers(handlers)
| `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
169 | case .directTCPIP(let request):
170 | guard let delegate = directTCPIP else {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:174:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
172 | }
173 |
174 | return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
| `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
175 | return delegate.initializeDirectTCPIPChannel(
176 | channel,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:22: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | internal final class DataToBufferCodec: ChannelDuplexHandler {
| `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:324:21: warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
322 |
323 | return channel.pipeline.addHandlers([
324 | NIOSSHHandler(
| `- warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
325 | role: .server(server),
326 | allocator: channel.allocator,
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/NIOSSHHandler.swift:81:1: note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
79 |
80 | @available(*, unavailable)
81 | extension NIOSSHHandler: Sendable {}
| `- note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
82 |
83 | extension NIOSSHHandler {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:333:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
:
331 | }
332 | ),
333 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
334 | ])
335 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:341:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
239 | /// The server can be closed using the `close()` method.
240 | /// - Note: This class is not thread safe.
241 | public final class SSHServer {
| `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
242 | let channel: Channel
243 | let delegate: CitadelServerDelegate
:
339 | return try await bootstrap.bind(host: host, port: port).map { channel in
340 | SSHServer(channel: channel, logger: logger, delegate: delegate)
341 | }.get()
| `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
342 | }
343 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 | }
101 |
102 | done.futureResult.whenFailure(context.fireErrorCaught)
| `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 | }
104 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
82 |
83 | group.addTask {
84 | for try await message in self.outbound.stream {
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
| `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
| `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
| `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
| `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 | typealias OutboundIn = ByteBuffer
32 | typealias OutboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
| `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 | CloseErrorHandler(logger: logger)
138 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 | )
139 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 | self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 | streamContinuation.yield(.stderr(stderr))
284 | case .eof(let error):
285 | self.logger.debug("EOF triggered, ending the command stream.")
| `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 | if let error {
287 | streamContinuation.finish(throwing: error)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
| `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 | private(set) var session: SSHClientSession
114 | private var userInitiatedClose = false
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
73 | done.completeWithTask {
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
76 | try await self.delegate.startShell(
| `- note: closure captures non-Sendable 'self'
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- note: closure captures non-Sendable 'shellContext'
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
81 | }
82 |
83 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
84 | for try await message in self.outbound.stream {
| `- note: closure captures 'self' which is accessible to code in the current task
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
465 | )
466 |
467 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
468 | do {
469 | let stream = try await executeCommandStream(command, inShell: inShell)
| `- note: closure captures 'self' which is accessible to code in the current task
470 | for try await chunk in stream {
471 | switch chunk {
[920/923] Compiling Citadel TTY.swift
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
38 | func handlerAdded(context: ChannelHandlerContext) {
39 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
40 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
41 | }
42 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
57 | guard let shell = shell, let parent = context.channel.parent else {
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
60 | return context.channel.close()
61 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
58 | _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
59 | self.configured.succeed(())
60 | return context.channel.close()
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
61 | }
62 | return
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
65 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
66 | ShellServerSubsystem.setupChannelHanders(
67 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
68 | shell: shell,
69 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
71 | )
72 | }.flatMap { () -> EventLoopFuture<Void> in
73 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
73 | let promise = context.eventLoop.makePromise(of: Void.self)
74 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
75 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
76 | return promise.futureResult
77 | }.whenFailure { _ in
78 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
79 | }
80 | case let event as SSHChannelRequestEvent.SubsystemRequest:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
89 | parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
90 | SFTPServerSubsystem.setupChannelHanders(
91 | channel: context.channel,
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
92 | sftp: sftp,
93 | logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
95 | )
96 | }.flatMap { () -> EventLoopFuture<Void> in
97 | let promise = context.eventLoop.makePromise(of: Void.self)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
18 | }
19 |
20 | final class SubsystemHandler: ChannelDuplexHandler {
| `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
21 | typealias InboundIn = SSHChannelData
22 | typealias InboundOut = SSHChannelData
:
97 | let promise = context.eventLoop.makePromise(of: Void.self)
98 | context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
99 | self.configured.succeed(())
| `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 | return promise.futureResult
101 | }.whenFailure { _ in
102 | context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 | }
104 | default:
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 | func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 | configured.futureResult.whenSuccess {
114 | context.fireChannelRead(data)
| `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
43 | /// }
44 | /// }
45 | public struct NIOAny {
| `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
46 | @usableFromInline
47 | let _storage: _NIOAny
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:168:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
166 | handlers.append(ExecHandler(delegate: exec, username: username))
167 |
168 | return channel.pipeline.addHandlers(handlers)
| `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
169 | case .directTCPIP(let request):
170 | guard let delegate = directTCPIP else {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:174:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
172 | }
173 |
174 | return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
| `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
175 | return delegate.initializeDirectTCPIPChannel(
176 | channel,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:22: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | internal final class DataToBufferCodec: ChannelDuplexHandler {
| `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:324:21: warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
322 |
323 | return channel.pipeline.addHandlers([
324 | NIOSSHHandler(
| `- warning: conformance of 'NIOSSHHandler' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
325 | role: .server(server),
326 | allocator: channel.allocator,
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/NIOSSHHandler.swift:81:1: note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
79 |
80 | @available(*, unavailable)
81 | extension NIOSSHHandler: Sendable {}
| `- note: conformance of 'NIOSSHHandler' to 'Sendable' has been explicitly marked unavailable here
82 |
83 | extension NIOSSHHandler {
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:333:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
:
331 | }
332 | ),
333 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
334 | ])
335 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:341:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
239 | /// The server can be closed using the `close()` method.
240 | /// - Note: This class is not thread safe.
241 | public final class SSHServer {
| `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
242 | let channel: Channel
243 | let delegate: CitadelServerDelegate
:
339 | return try await bootstrap.bind(host: host, port: port).map { channel in
340 | SSHServer(channel: channel, logger: logger, delegate: delegate)
341 | }.get()
| `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
342 | }
343 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 | }
101 |
102 | done.futureResult.whenFailure(context.fireErrorCaught)
| `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 | }
104 |
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
76 | try await self.delegate.startShell(
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
33 | }
34 |
35 | public struct SSHShellContext {
| `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
36 | public struct WindowSize {
37 | public let columns: Int
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
82 |
83 | group.addTask {
84 | for try await message in self.outbound.stream {
| `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
| `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
2 | import NIOSSH
3 |
4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
| `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
5 | typealias InboundIn = SSHChannelData
6 | typealias InboundOut = ByteBuffer
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 | return channel.pipeline.addHandlers(
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
| `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
| `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 | typealias OutboundIn = ByteBuffer
32 | typealias OutboundOut = SSHChannelData
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
43 | }
44 |
45 | final class ShellServerInboundHandler: ChannelInboundHandler {
| `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
46 | typealias InboundIn = ByteBuffer
47 |
:
134 | SSHChannelDataUnwrapper(),
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
| `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 | CloseErrorHandler(logger: logger)
138 | )
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 | SSHOutboundChannelDataWrapper(),
136 | shellInboundHandler,
137 | CloseErrorHandler(logger: logger)
| `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 | )
139 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
4 | import NIOConcurrencyHelpers
5 |
6 | final class CloseErrorHandler: ChannelInboundHandler {
| `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
7 | typealias InboundIn = Any
8 | let logger: Logger
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 | context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 | self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 | context.fireErrorCaught(error)
| `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1792:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1790 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1791 | /// `ChannelHandler`.
1792 | public final class ChannelHandlerContext: ChannelInvoker {
| `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1793 | // visible for ChannelPipeline to modify
1794 | fileprivate var next: Optional<ChannelHandlerContext>
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 | streamContinuation.yield(.stderr(stderr))
284 | case .eof(let error):
285 | self.logger.debug("EOF triggered, ending the command stream.")
| `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 | if let error {
287 | streamContinuation.finish(throwing: error)
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
| `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 | private(set) var session: SSHClientSession
114 | private var userInitiatedClose = false
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
73 | done.completeWithTask {
74 | try await withThrowingTaskGroup(of: Void.self) { group in
75 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
76 | try await self.delegate.startShell(
| `- note: closure captures non-Sendable 'self'
77 | inbound: self.inbound.stream,
78 | outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
79 | context: shellContext
| `- note: closure captures non-Sendable 'shellContext'
80 | )
81 | }
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
81 | }
82 |
83 | group.addTask {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
84 | for try await message in self.outbound.stream {
| `- note: closure captures 'self' which is accessible to code in the current task
85 | switch message.event {
86 | case .stdout(let data):
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
465 | )
466 |
467 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
468 | do {
469 | let stream = try await executeCommandStream(command, inShell: inShell)
| `- note: closure captures 'self' which is accessible to code in the current task
470 | for try await chunk in stream {
471 | switch chunk {
[921/930] Emitting module CitadelServerExample
[922/930] Compiling CitadelServerExample Terminal.swift
[923/930] Compiling CitadelServerExample Extensions.swift
[924/930] Compiling CitadelServerExample BasicCommands.swift
[925/930] Compiling CitadelServerExample Server.swift
/Users/admin/builder/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:24:42: warning: non-sendable result type 'SSHServer' cannot be sent from nonisolated context in call to static method 'host(host:port:hostKeys:algorithms:protocolOptions:logger:authenticationDelegate:group:)'; this is an error in the Swift 6 language mode
22 | }
23 |
24 | let server = try await SSHServer.host(
| `- warning: non-sendable result type 'SSHServer' cannot be sent from nonisolated context in call to static method 'host(host:port:hostKeys:algorithms:protocolOptions:logger:authenticationDelegate:group:)'; this is an error in the Swift 6 language mode
25 | host: "localhost",
26 | port: 2323,
/Users/admin/builder/spi-builder-workspace/Sources/Citadel/Server.swift:241:20: note: class 'SSHServer' does not conform to the 'Sendable' protocol
239 | /// The server can be closed using the `close()` method.
240 | /// - Note: This class is not thread safe.
241 | public final class SSHServer {
| `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
242 | let channel: Channel
243 | let delegate: CitadelServerDelegate
/Users/admin/builder/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:1:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Citadel'
1 | import Citadel
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Citadel'
2 | import Crypto
3 | import Foundation
/Users/admin/builder/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:76:36: warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
74 | ) {
75 | if case .password(.init(password: password)) = request.request, request.username == username {
76 | return responsePromise.succeed(.success)
| `- warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
77 | }
78 |
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/User Authentication/UserAuthenticationMethod.swift:211:13: note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
209 |
210 | /// The outcome of a user authentication attempt.
211 | public enum NIOSSHUserAuthenticationOutcome {
| `- note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
212 | case success
213 | case partialSuccess(remainingMethods: NIOSSHAvailableUserAuthenticationMethods)
/Users/admin/builder/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:5:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
3 | import Foundation
4 | import NIO
5 | import NIOSSH
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
6 |
7 | @main struct ExampleSSHServer {
/Users/admin/builder/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:79:32: warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
77 | }
78 |
79 | return responsePromise.succeed(.failure)
| `- warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
80 | }
81 | }
/Users/admin/builder/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/User Authentication/UserAuthenticationMethod.swift:211:13: note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
209 |
210 | /// The outcome of a user authentication attempt.
211 | public enum NIOSSHUserAuthenticationOutcome {
| `- note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
212 | case success
213 | case partialSuccess(remainingMethods: NIOSSHAvailableUserAuthenticationMethods)
[926/930] Compiling CitadelServerExample HostKeyFile.swift
[927/930] Compiling CitadelServerExample EchoShell.swift
[927/930] Write Objects.LinkFileList
[928/930] Linking CitadelServerExample
[929/930] Applying CitadelServerExample
Build complete! (57.78s)
Fetching https://github.com/apple/swift-crypto.git from cache
Fetching https://github.com/Joannis/swift-nio-ssh.git
Fetching https://github.com/attaswift/BigInt.git
Fetching https://github.com/mtynior/ColorizeSwift.git
Fetching https://github.com/apple/swift-log.git from cache
[1/2845] Fetching swift-nio-ssh
[2/3136] Fetching swift-nio-ssh, colorizeswift
[61/7962] Fetching swift-nio-ssh, colorizeswift, bigint
Fetched https://github.com/Joannis/swift-nio-ssh.git from cache (1.24s)
Fetched https://github.com/mtynior/ColorizeSwift.git from cache (1.24s)
Fetched https://github.com/attaswift/BigInt.git from cache (1.24s)
Fetched https://github.com/apple/swift-log.git from cache (1.25s)
Fetched https://github.com/apple/swift-crypto.git from cache (1.56s)
Computing version for https://github.com/Joannis/swift-nio-ssh.git
Computed https://github.com/Joannis/swift-nio-ssh.git at 0.3.5 (2.13s)
Fetching https://github.com/apple/swift-nio.git from cache
Fetching https://github.com/apple/swift-atomics.git from cache
Fetched https://github.com/apple/swift-atomics.git from cache (0.75s)
Fetched https://github.com/apple/swift-nio.git from cache (2.52s)
Computing version for https://github.com/mtynior/ColorizeSwift.git
Computed https://github.com/mtynior/ColorizeSwift.git at 1.7.0 (5.78s)
Computing version for https://github.com/apple/swift-atomics.git
Computed https://github.com/apple/swift-atomics.git at 1.3.0 (0.47s)
Computing version for https://github.com/apple/swift-crypto.git
Computed https://github.com/apple/swift-crypto.git at 3.15.1 (2.99s)
Fetching https://github.com/apple/swift-asn1.git from cache
Fetched https://github.com/apple/swift-asn1.git from cache (0.64s)
Computing version for https://github.com/apple/swift-asn1.git
Computed https://github.com/apple/swift-asn1.git at 1.5.0 (3.17s)
Computing version for https://github.com/attaswift/BigInt.git
Computed https://github.com/attaswift/BigInt.git at 5.7.0 (0.46s)
Computing version for https://github.com/apple/swift-nio.git
Computed https://github.com/apple/swift-nio.git at 2.87.0 (0.63s)
Fetching https://github.com/apple/swift-system.git from cache
Fetching https://github.com/apple/swift-collections.git from cache
Fetched https://github.com/apple/swift-system.git from cache (1.34s)
Fetched https://github.com/apple/swift-collections.git from cache (1.35s)
Computing version for https://github.com/apple/swift-system.git
Computed https://github.com/apple/swift-system.git at 1.6.3 (1.88s)
Computing version for https://github.com/apple/swift-collections.git
Computed https://github.com/apple/swift-collections.git at 1.3.0 (0.57s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.6.4 (0.45s)
Creating working copy for https://github.com/apple/swift-collections.git
Working copy of https://github.com/apple/swift-collections.git resolved at 1.3.0
Creating working copy for https://github.com/apple/swift-system.git
Working copy of https://github.com/apple/swift-system.git resolved at 1.6.3
Creating working copy for https://github.com/apple/swift-nio.git
Working copy of https://github.com/apple/swift-nio.git resolved at 2.87.0
Creating working copy for https://github.com/Joannis/swift-nio-ssh.git
Working copy of https://github.com/Joannis/swift-nio-ssh.git resolved at 0.3.5
Creating working copy for https://github.com/attaswift/BigInt.git
Working copy of https://github.com/attaswift/BigInt.git resolved at 5.7.0
Creating working copy for https://github.com/mtynior/ColorizeSwift.git
Working copy of https://github.com/mtynior/ColorizeSwift.git resolved at 1.7.0
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.6.4
Creating working copy for https://github.com/apple/swift-asn1.git
Working copy of https://github.com/apple/swift-asn1.git resolved at 1.5.0
Creating working copy for https://github.com/apple/swift-atomics.git
Working copy of https://github.com/apple/swift-atomics.git resolved at 1.3.0
Creating working copy for https://github.com/apple/swift-crypto.git
Working copy of https://github.com/apple/swift-crypto.git resolved at 3.15.1
Build complete.
{
"dependencies" : [
{
"identity" : "swift-nio-ssh",
"requirement" : {
"range" : [
{
"lower_bound" : "0.3.4",
"upper_bound" : "0.4.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/Joannis/swift-nio-ssh.git"
},
{
"identity" : "swift-log",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-log.git"
},
{
"identity" : "bigint",
"requirement" : {
"range" : [
{
"lower_bound" : "5.2.0",
"upper_bound" : "6.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/attaswift/BigInt.git"
},
{
"identity" : "swift-crypto",
"requirement" : {
"range" : [
{
"lower_bound" : "3.12.3",
"upper_bound" : "4.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-crypto.git"
},
{
"identity" : "colorizeswift",
"requirement" : {
"range" : [
{
"lower_bound" : "1.5.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/mtynior/ColorizeSwift.git"
}
],
"manifest_display_name" : "Citadel",
"name" : "Citadel",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "14.0"
},
{
"name" : "ios",
"version" : "17.0"
}
],
"products" : [
{
"name" : "Citadel",
"targets" : [
"Citadel"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "CitadelServerExample",
"targets" : [
"CitadelServerExample"
],
"type" : {
"executable" : null
}
}
],
"targets" : [
{
"c99name" : "CitadelTests",
"module_type" : "SwiftTarget",
"name" : "CitadelTests",
"path" : "Tests/CitadelTests",
"product_dependencies" : [
"NIOSSH",
"BigInt",
"Logging"
],
"sources" : [
"Citadel2Tests.swift",
"EndToEndTests.swift",
"KeyTests.swift",
"RemotePortForwardTests.swift"
],
"target_dependencies" : [
"Citadel"
],
"type" : "test"
},
{
"c99name" : "CitadelServerExample",
"module_type" : "SwiftTarget",
"name" : "CitadelServerExample",
"path" : "Sources/CitadelServerExample",
"product_dependencies" : [
"ColorizeSwift"
],
"product_memberships" : [
"CitadelServerExample"
],
"sources" : [
"EchoShell/BasicCommands.swift",
"EchoShell/EchoShell.swift",
"EchoShell/Extensions.swift",
"EchoShell/Terminal.swift",
"HostKeyFile.swift",
"Server.swift"
],
"target_dependencies" : [
"Citadel"
],
"type" : "executable"
},
{
"c99name" : "Citadel",
"module_type" : "SwiftTarget",
"name" : "Citadel",
"path" : "Sources/Citadel",
"product_dependencies" : [
"NIOSSH",
"Crypto",
"_CryptoExtras",
"BigInt",
"Logging"
],
"product_memberships" : [
"Citadel",
"CitadelServerExample"
],
"sources" : [
"Algorithms/AES.swift",
"Algorithms/DH-Helpers.swift",
"Algorithms/DiffieHellmanGroup14Sha1.swift",
"Algorithms/DiffieHellmanGroup14Sha256.swift",
"Algorithms/RSA.swift",
"BCrypt.swift",
"ByteBufferHelpers.swift",
"ChannelUnwrapper.swift",
"Client.swift",
"ClientSession.swift",
"DirectTCPIP/Client/DirectTCPIP+Client.swift",
"DirectTCPIP/Server/DirectTCPIP+Server.swift",
"Errors.swift",
"Exec/Client/ExecClient.swift",
"Exec/Server/ExecDelegate.swift",
"Exec/Server/ExecHandler.swift",
"NIOGlueHandler.swift",
"OpenSSHKey.swift",
"RemotePortForward/Client/RemotePortForward+Client.swift",
"RemotePortForward/Server/RemotePortForward+Server.swift",
"SFTP/Client/SFTPClient.swift",
"SFTP/Client/SFTPClientInboundHandler.swift",
"SFTP/Client/SFTPFile.swift",
"SFTP/SFTPBasicEnums.swift",
"SFTP/SFTPFileFlags.swift",
"SFTP/SFTPMessage.swift",
"SFTP/SFTPMessageParser.swift",
"SFTP/SFTPSerializer.swift",
"SFTP/Server/SFTPServer.swift",
"SFTP/Server/SFTPServerInboundHandler.swift",
"SSHAuthenticationMethod.swift",
"SSHCert.swift",
"SSHConnectionPoolSettings.swift",
"SSHKeyTypeDetection.swift",
"Server.swift",
"Shell/Server/ShellDelegate.swift",
"TTY/Client/TTY.swift"
],
"target_dependencies" : [
"CCitadelBcrypt"
],
"type" : "library"
},
{
"c99name" : "CCitadelBcrypt",
"module_type" : "ClangTarget",
"name" : "CCitadelBcrypt",
"path" : "Sources/CCitadelBcrypt",
"product_memberships" : [
"Citadel",
"CitadelServerExample"
],
"sources" : [
"bcrypt-kdf.c",
"bcrypt.c",
"blf.c"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.