From 969c614dc4670c30b4a8ea8f24657247f8a28c66 Mon Sep 17 00:00:00 2001 From: tom doron Date: Tue, 17 Aug 2021 15:40:57 -0700 Subject: [PATCH 1/2] add samples motivation: demonstrate how to use events using sample code changes: * add basic sample for API Gateway * add docker setup to test samples when changing events --- Examples/Simple/.dockerignore | 1 + Examples/Simple/Package.swift | 30 ++++++++++++++++ Examples/Simple/Sources/APIGateway/main.swift | 36 +++++++++++++++++++ Examples/Simple/Tests/LinuxMain.swift | 15 ++++++++ docker/docker-compose.1804.52.yaml | 3 ++ docker/docker-compose.al2.52.yaml | 3 ++ docker/docker-compose.al2.53.yaml | 3 ++ docker/docker-compose.al2.54.yaml | 3 ++ docker/docker-compose.al2.55.yaml | 3 ++ docker/docker-compose.al2.main.yaml | 3 ++ docker/docker-compose.yaml | 7 ++++ 11 files changed, 107 insertions(+) create mode 100644 Examples/Simple/.dockerignore create mode 100644 Examples/Simple/Package.swift create mode 100644 Examples/Simple/Sources/APIGateway/main.swift create mode 100644 Examples/Simple/Tests/LinuxMain.swift diff --git a/Examples/Simple/.dockerignore b/Examples/Simple/.dockerignore new file mode 100644 index 0000000..24e5b0a --- /dev/null +++ b/Examples/Simple/.dockerignore @@ -0,0 +1 @@ +.build diff --git a/Examples/Simple/Package.swift b/Examples/Simple/Package.swift new file mode 100644 index 0000000..9bde6df --- /dev/null +++ b/Examples/Simple/Package.swift @@ -0,0 +1,30 @@ +// swift-tools-version:5.2 + +import PackageDescription + +let package = Package( + name: "swift-aws-lambda-events-samples", + platforms: [ + .macOS(.v10_13), + ], + products: [ + // demonstrate how to integrate with AWS API Gateway + .executable(name: "APIGateway", targets: ["APIGateway"]), + ], + dependencies: [ + // this is the dependency on the swift-aws-lambda-runtime library + // in real-world projects this would say + // FIXME: update this once the https://github.com/swift-server/swift-aws-lambda-runtime/pull/216 is merged + // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0") + .package(url: "https://github.com/tomerd/swift-aws-lambda-runtime.git", .branch("remove-events")), + // this is the dependency on the swift-aws-lambda-events library + // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime-events.git", from: "1.0.0") + .package(name: "swift-aws-lambda-events", path: "../..") + ], + targets: [ + .target(name: "APIGateway", dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + ]) + ] +) diff --git a/Examples/Simple/Sources/APIGateway/main.swift b/Examples/Simple/Sources/APIGateway/main.swift new file mode 100644 index 0000000..f18ecad --- /dev/null +++ b/Examples/Simple/Sources/APIGateway/main.swift @@ -0,0 +1,36 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime +import NIO + +// MARK: - Run Lambda + +Lambda.run(APIGatewayProxyLambda()) + +// MARK: - Handler, Request and Response + +// FIXME: Use proper Event abstractions once added to AWSLambdaRuntime +struct APIGatewayProxyLambda: EventLoopLambdaHandler { + public typealias In = APIGateway.V2.Request + public typealias Out = APIGateway.V2.Response + + public func handle(context: Lambda.Context, event: APIGateway.V2.Request) -> EventLoopFuture { + context.logger.debug("hello, api gateway!") + return context.eventLoop.makeSucceededFuture( + APIGateway.V2.Response(statusCode: .ok, body: "hello, world!") + ) + } +} diff --git a/Examples/Simple/Tests/LinuxMain.swift b/Examples/Simple/Tests/LinuxMain.swift new file mode 100644 index 0000000..c46de76 --- /dev/null +++ b/Examples/Simple/Tests/LinuxMain.swift @@ -0,0 +1,15 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +preconditionFailure("use `swift test --enable-test-discovery`") diff --git a/docker/docker-compose.1804.52.yaml b/docker/docker-compose.1804.52.yaml index 636c69b..33e0bcd 100644 --- a/docker/docker-compose.1804.52.yaml +++ b/docker/docker-compose.1804.52.yaml @@ -13,5 +13,8 @@ services: test: image: swift-aws-lambda-events:18.04-5.2 + test-samples: + image: swift-aws-lambda-events:18.04-5.2 + shell: image: swift-aws-lambda-events:18.04-5.2 diff --git a/docker/docker-compose.al2.52.yaml b/docker/docker-compose.al2.52.yaml index 35e6089..624fd40 100644 --- a/docker/docker-compose.al2.52.yaml +++ b/docker/docker-compose.al2.52.yaml @@ -11,5 +11,8 @@ services: test: image: swift-aws-lambda-events:al2-5.2 + test-samples: + image: swift-aws-lambda-events:al2-5.2 + shell: image: swift-aws-lambda-events:al2-5.2 diff --git a/docker/docker-compose.al2.53.yaml b/docker/docker-compose.al2.53.yaml index bad3f17..1bb94a8 100644 --- a/docker/docker-compose.al2.53.yaml +++ b/docker/docker-compose.al2.53.yaml @@ -11,5 +11,8 @@ services: test: image: swift-aws-lambda-events:al2-5.3 + test-samples: + image: swift-aws-lambda-events:al2-5.3 + shell: image: swift-aws-lambda-events:al2-5.3 diff --git a/docker/docker-compose.al2.54.yaml b/docker/docker-compose.al2.54.yaml index 6c0b1d7..c23061c 100644 --- a/docker/docker-compose.al2.54.yaml +++ b/docker/docker-compose.al2.54.yaml @@ -11,5 +11,8 @@ services: test: image: swift-aws-lambda-events:al2-5.4 + test-samples: + image: swift-aws-lambda-events:al2-5.4 + shell: image: swift-aws-lambda-events:al2-5.4 diff --git a/docker/docker-compose.al2.55.yaml b/docker/docker-compose.al2.55.yaml index a81f929..e56d906 100644 --- a/docker/docker-compose.al2.55.yaml +++ b/docker/docker-compose.al2.55.yaml @@ -11,5 +11,8 @@ services: test: image: swift-aws-lambda-events:al2-5.5 + test-samples: + image: swift-aws-lambda-events:al2-5.5 + shell: image: swift-aws-lambda-events:al2-5.5 diff --git a/docker/docker-compose.al2.main.yaml b/docker/docker-compose.al2.main.yaml index 8f96c15..19f822c 100644 --- a/docker/docker-compose.al2.main.yaml +++ b/docker/docker-compose.al2.main.yaml @@ -11,5 +11,8 @@ services: test: image: swift-aws-lambda-events:al2-main + test-samples: + image: swift-aws-lambda-events:al2-main + shell: image: swift-aws-lambda-events:al2-main diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index d161dd0..e7fba40 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -30,6 +30,13 @@ services: <<: *common command: /bin/bash -cl "swift test --enable-test-discovery -Xswiftc -warnings-as-errors $${SANITIZER_ARG-}" + test-samples: + <<: *common + command: >- + /bin/bash -clx " + swift build --package-path Examples/Simple + " + # util shell: From 6c4d566880fe4dada59904b7e9d0836907c81a88 Mon Sep 17 00:00:00 2001 From: tom doron Date: Tue, 17 Aug 2021 15:51:34 -0700 Subject: [PATCH 2/2] format --- Examples/Simple/Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/Simple/Package.swift b/Examples/Simple/Package.swift index 9bde6df..5f9d882 100644 --- a/Examples/Simple/Package.swift +++ b/Examples/Simple/Package.swift @@ -19,12 +19,12 @@ let package = Package( .package(url: "https://github.com/tomerd/swift-aws-lambda-runtime.git", .branch("remove-events")), // this is the dependency on the swift-aws-lambda-events library // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime-events.git", from: "1.0.0") - .package(name: "swift-aws-lambda-events", path: "../..") + .package(name: "swift-aws-lambda-events", path: "../.."), ], targets: [ .target(name: "APIGateway", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), - ]) + ]), ] )