From 9babfea76c370c54e3195b5cedec0e1a562a7268 Mon Sep 17 00:00:00 2001 From: Aryan Shah Date: Thu, 22 Aug 2024 14:03:15 +0100 Subject: [PATCH] Require Swift 6 --- Package.swift | 37 ++++++----- Package@swift-5.8.swift | 92 -------------------------- Plugins/AWSLambdaPackager/Plugin.swift | 13 +++- 3 files changed, 32 insertions(+), 110 deletions(-) delete mode 100644 Package@swift-5.8.swift diff --git a/Package.swift b/Package.swift index cb9c5321..0fa425f4 100644 --- a/Package.swift +++ b/Package.swift @@ -1,14 +1,11 @@ -// swift-tools-version:5.9 +// swift-tools-version:6.0 import PackageDescription let package = Package( name: "swift-aws-lambda-runtime", platforms: [ - .macOS(.v12), - .iOS(.v15), - .tvOS(.v15), - .watchOS(.v8), + .macOS(.v15) ], products: [ // this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods @@ -16,6 +13,7 @@ let package = Package( // this has all the main functionality for lambda and it does not link Foundation .library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]), // plugin to package the lambda, creating an archive that can be uploaded to AWS + // requires Linux or at least macOS v15 .plugin(name: "AWSLambdaPackager", targets: ["AWSLambdaPackager"]), // for testing only .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), @@ -23,7 +21,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), - .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), + .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), ], targets: [ .target( @@ -32,7 +30,8 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .target( name: "AWSLambdaRuntimeCore", @@ -42,15 +41,15 @@ let package = Package( .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOConcurrencyHelpers", package: "swift-nio"), .product(name: "NIOPosix", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .plugin( name: "AWSLambdaPackager", capability: .command( intent: .custom( verb: "archive", - description: - "Archive the Lambda binary and prepare it for uploading to AWS. Requires docker on macOS or non Amazonlinux 2 distributions." + description: "Archive the Lambda binary and prepare it for uploading to AWS. Requires docker on macOS or non Amazonlinux 2 distributions." ) ) ), @@ -60,14 +59,16 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .testTarget( name: "AWSLambdaRuntimeTests", dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .byName(name: "AWSLambdaRuntime"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), // testing helper .target( @@ -75,16 +76,22 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntime"), .product(name: "NIO", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] + ), + .testTarget( + name: "AWSLambdaTestingTests", + dependencies: ["AWSLambdaTesting"], + swiftSettings: [.swiftLanguageMode(.v5)] ), - .testTarget(name: "AWSLambdaTestingTests", dependencies: ["AWSLambdaTesting"]), // for perf testing .executableTarget( name: "MockServer", dependencies: [ .product(name: "NIOHTTP1", package: "swift-nio"), .product(name: "NIO", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), ] ) diff --git a/Package@swift-5.8.swift b/Package@swift-5.8.swift deleted file mode 100644 index 7add120b..00000000 --- a/Package@swift-5.8.swift +++ /dev/null @@ -1,92 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -let package = Package( - name: "swift-aws-lambda-runtime", - platforms: [ - .macOS(.v12), - .iOS(.v15), - .tvOS(.v15), - .watchOS(.v8), - ], - products: [ - // this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods - .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), - // this has all the main functionality for lambda and it does not link Foundation - .library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]), - // plugin to package the lambda, creating an archive that can be uploaded to AWS - .plugin(name: "AWSLambdaPackager", targets: ["AWSLambdaPackager"]), - // for testing only - .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), - ], - dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.43.1")), - .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), - .package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")), - .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), - ], - targets: [ - .target( - name: "AWSLambdaRuntime", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .product(name: "NIOCore", package: "swift-nio"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] - ), - .target( - name: "AWSLambdaRuntimeCore", - dependencies: [ - .product(name: "Logging", package: "swift-log"), - .product(name: "Backtrace", package: "swift-backtrace"), - .product(name: "NIOHTTP1", package: "swift-nio"), - .product(name: "NIOCore", package: "swift-nio"), - .product(name: "NIOConcurrencyHelpers", package: "swift-nio"), - .product(name: "NIOPosix", package: "swift-nio"), - ] - ), - .plugin( - name: "AWSLambdaPackager", - capability: .command( - intent: .custom( - verb: "archive", - description: - "Archive the Lambda binary and prepare it for uploading to AWS. Requires docker on macOS or non Amazonlinux 2 distributions." - ) - ) - ), - .testTarget( - name: "AWSLambdaRuntimeCoreTests", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .product(name: "NIOTestUtils", package: "swift-nio"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] - ), - .testTarget( - name: "AWSLambdaRuntimeTests", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .byName(name: "AWSLambdaRuntime"), - ] - ), - // testing helper - .target( - name: "AWSLambdaTesting", - dependencies: [ - .byName(name: "AWSLambdaRuntime"), - .product(name: "NIO", package: "swift-nio"), - ] - ), - .testTarget(name: "AWSLambdaTestingTests", dependencies: ["AWSLambdaTesting"]), - // for perf testing - .executableTarget( - name: "MockServer", - dependencies: [ - .product(name: "NIOHTTP1", package: "swift-nio"), - .product(name: "NIO", package: "swift-nio"), - ] - ), - ] -) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 9ae2ad04..9825f070 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -15,6 +15,7 @@ import Dispatch import Foundation import PackagePlugin +import Synchronization #if os(macOS) import Darwin @@ -28,6 +29,7 @@ import ucrt #error("Unsupported platform") #endif +@available(macOS 15.0, *) @main struct AWSLambdaPackager: CommandPlugin { func performCommand(context: PackagePlugin.PluginContext, arguments: [String]) async throws { @@ -282,10 +284,10 @@ struct AWSLambdaPackager: CommandPlugin { print("\(executable.string) \(arguments.joined(separator: " "))") } - var output = "" + let outputMutex = Mutex("") let outputSync = DispatchGroup() let outputQueue = DispatchQueue(label: "AWSLambdaPackager.output") - let outputHandler = { (data: Data?) in + let outputHandler = { @Sendable (data: Data?) in dispatchPrecondition(condition: .onQueue(outputQueue)) outputSync.enter() @@ -299,7 +301,9 @@ struct AWSLambdaPackager: CommandPlugin { return } - output += _output + "\n" + outputMutex.withLock { output in + output += _output + "\n" + } switch logLevel { case .silent: @@ -336,6 +340,8 @@ struct AWSLambdaPackager: CommandPlugin { // wait for output to be full processed outputSync.wait() + let output = outputMutex.withLock { $0 } + if process.terminationStatus != 0 { // print output on failure and if not already printed if logLevel < .output { @@ -359,6 +365,7 @@ struct AWSLambdaPackager: CommandPlugin { } } +@available(macOS 15.0, *) private struct Configuration: CustomStringConvertible { public let outputDirectory: Path public let products: [Product]