From 88c1200ae480950b81836bb7d653f2bda3bc5c35 Mon Sep 17 00:00:00 2001 From: tomer doron Date: Thu, 7 Sep 2023 17:16:31 -0700 Subject: [PATCH] remove swift-backtrace in swift >= 5.9 motivation: swift 5.9 ships with builtin backtrace support \o/ changes: * remove the dependency on swift-backtrace when using swift 5.9 or above * conditionalize the call to Backtrace.install to relevant versions only --- Package.swift | 4 +- Package@swift-5.7.swift | 73 +++++++++++++++++++++++ Package@swift-5.8.swift | 73 +++++++++++++++++++++++ Sources/AWSLambdaRuntimeCore/Lambda.swift | 4 ++ 4 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 Package@swift-5.7.swift create mode 100644 Package@swift-5.8.swift diff --git a/Package.swift b/Package.swift index a4559656..1b47e1d0 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.7 +// swift-tools-version:5.9 import PackageDescription @@ -23,7 +23,6 @@ let package = Package( 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", from: "1.0.0"), ], targets: [ @@ -34,7 +33,6 @@ let package = Package( ]), .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"), diff --git a/Package@swift-5.7.swift b/Package@swift-5.7.swift new file mode 100644 index 00000000..a4559656 --- /dev/null +++ b/Package@swift-5.7.swift @@ -0,0 +1,73 @@ +// 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", from: "1.0.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/Package@swift-5.8.swift b/Package@swift-5.8.swift new file mode 100644 index 00000000..a4559656 --- /dev/null +++ b/Package@swift-5.8.swift @@ -0,0 +1,73 @@ +// 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", from: "1.0.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/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index 2592f48c..ae225d01 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -18,7 +18,9 @@ import Glibc import Darwin.C #endif +#if swift(<5.9) import Backtrace +#endif import Logging import NIOCore import NIOPosix @@ -85,7 +87,9 @@ public enum Lambda { handlerType: (some ByteBufferLambdaHandler).Type ) -> Result { let _run = { (configuration: LambdaConfiguration) -> Result in + #if swift(<5.9) Backtrace.install() + #endif var logger = Logger(label: "Lambda") logger.logLevel = configuration.general.logLevel