diff --git a/.gitignore b/.gitignore index f9e61ac..44998a2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /*.xcodeproj lambda.zip swift-shared-libs +default.profraw diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..847ac86 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,26 @@ +os: + - linux +language: generic +sudo: required +dist: xenial + +services: + - docker + +addons: + snaps: + - name: aws-cli + confinement: classic # or devmode + channel: latest/edge + +install: + - make --version + - make docker_build + +script: + - docker image ls + - make package_layer + - make package_lambda + - make swift_test + - make swift_test SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps + - make swift_test SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject \ No newline at end of file diff --git a/Examples/HTTPSRequest/.devcontainer/Dockerfile b/Examples/HTTPSRequest/.devcontainer/Dockerfile new file mode 100644 index 0000000..84ec8c0 --- /dev/null +++ b/Examples/HTTPSRequest/.devcontainer/Dockerfile @@ -0,0 +1,27 @@ +FROM nio-swift:5.1 + +# Or your actual UID, GID on Linux if not the default 1000 +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +# Avoid warnings by switching to noninteractive +ENV DEBIAN_FRONTEND=noninteractive + +# Configure apt and install packages +RUN apt-get update \ + # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. + && groupadd --gid $USER_GID $USERNAME \ + && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ + # [Optional] Add sudo support for non-root user + && apt-get install -y sudo \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME \ + # + # Clean up + && apt-get autoremove -y \ + && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* + +# Switch back to dialog for any ad-hoc use of apt-get +ENV DEBIAN_FRONTEND= diff --git a/Examples/HTTPSRequest/.devcontainer/devcontainer.json b/Examples/HTTPSRequest/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1a5af50 --- /dev/null +++ b/Examples/HTTPSRequest/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Swift", + "dockerFile": "Dockerfile", + + "runArgs": [ + "-u", "vscode", + "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" + ], + + "settings": { + "lldb.adapterType": "bundled", + "lldb.executable": "/usr/bin/lldb", + "terminal.integrated.shell.linux": "/bin/bash" + }, + + // Uncomment the next line if you want to publish any ports. + // "appPort": [], + + "extensions": [ + "pvasek.sourcekit-lsp--dev-unofficial", + "vadimcn.vscode-lldb" + ] +} \ No newline at end of file diff --git a/Examples/HTTPSRequest/.vscode/launch.json b/Examples/HTTPSRequest/.vscode/launch.json new file mode 100644 index 0000000..c5f1148 --- /dev/null +++ b/Examples/HTTPSRequest/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/HTTPSRequest", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build" + }, + { + "type": "lldb", + "request": "launch", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/HTTPSRequestPackageTests.xctest", + "name": "Test", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "codecov" + } + ] +} \ No newline at end of file diff --git a/Examples/HTTPSRequest/.vscode/tasks.json b/Examples/HTTPSRequest/.vscode/tasks.json new file mode 100644 index 0000000..71ed875 --- /dev/null +++ b/Examples/HTTPSRequest/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "swift build", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "test", + "type": "shell", + "command": "swift test --enable-code-coverage || true", + "group": "test" + }, + { + "label": "codecov", + "type": "shell", + "command": "llvm-cov export ${workspaceFolder}/.build/x86_64-unknown-linux/debug/HTTPSRequest -instr-profile=${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/default.profdata -format=lcov > ${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/lcov.info", + "group": "test", + "dependsOn":["test"] + }, + { + "label": "run", + "type": "shell", + "command": "swift run" + } + ] +} \ No newline at end of file diff --git a/Examples/HTTPSRequest/Tests/HTTPSRequestTests/HTTPSRequestTests.swift b/Examples/HTTPSRequest/Tests/HTTPSRequestTests/HTTPSRequestTests.swift index 12363de..ac56b07 100644 --- a/Examples/HTTPSRequest/Tests/HTTPSRequestTests/HTTPSRequestTests.swift +++ b/Examples/HTTPSRequest/Tests/HTTPSRequestTests/HTTPSRequestTests.swift @@ -2,7 +2,7 @@ import class Foundation.Bundle import XCTest final class HTTPSRequestTests: XCTestCase { - func testExample() throws { + func testMissingLambdaRuntimeApi() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. @@ -26,7 +26,9 @@ final class HTTPSRequestTests: XCTestCase { let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8) - XCTAssertEqual(output, "Hello, world!\n") + let isError = output?.contains("missingEnvironmentVariables(LambdaSwiftSprinter.Context.AWSEnvironmentKey.lambdaRuntimeApi)") + + XCTAssertEqual(isError, true) } /// Returns path to the built products directory. @@ -42,6 +44,6 @@ final class HTTPSRequestTests: XCTestCase { } static var allTests = [ - ("testExample", testExample), + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), ] } diff --git a/Examples/HTTPSRequest/Tests/HTTPSRequestTests/XCTestManifests.swift b/Examples/HTTPSRequest/Tests/HTTPSRequestTests/XCTestManifests.swift index 2e66421..4d8b30d 100644 --- a/Examples/HTTPSRequest/Tests/HTTPSRequestTests/XCTestManifests.swift +++ b/Examples/HTTPSRequest/Tests/HTTPSRequestTests/XCTestManifests.swift @@ -1,9 +1,18 @@ +#if !canImport(ObjectiveC) import XCTest -#if !canImport(ObjectiveC) - public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(HTTPSRequestTests.allTests), - ] - } +extension HTTPSRequestTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__HTTPSRequestTests = [ + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), + ] +} + +public func __allTests() -> [XCTestCaseEntry] { + return [ + testCase(HTTPSRequestTests.__allTests__HTTPSRequestTests), + ] +} #endif diff --git a/Examples/HTTPSRequest/Tests/LinuxMain.swift b/Examples/HTTPSRequest/Tests/LinuxMain.swift index a5ef75b..c67783e 100644 --- a/Examples/HTTPSRequest/Tests/LinuxMain.swift +++ b/Examples/HTTPSRequest/Tests/LinuxMain.swift @@ -3,5 +3,6 @@ import XCTest import HTTPSRequestTests var tests = [XCTestCaseEntry]() -tests += HTTPSRequestTests.allTests() +tests += HTTPSRequestTests.__allTests() + XCTMain(tests) diff --git a/Examples/HelloWorld/.devcontainer/Dockerfile b/Examples/HelloWorld/.devcontainer/Dockerfile new file mode 100644 index 0000000..84ec8c0 --- /dev/null +++ b/Examples/HelloWorld/.devcontainer/Dockerfile @@ -0,0 +1,27 @@ +FROM nio-swift:5.1 + +# Or your actual UID, GID on Linux if not the default 1000 +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +# Avoid warnings by switching to noninteractive +ENV DEBIAN_FRONTEND=noninteractive + +# Configure apt and install packages +RUN apt-get update \ + # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. + && groupadd --gid $USER_GID $USERNAME \ + && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ + # [Optional] Add sudo support for non-root user + && apt-get install -y sudo \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME \ + # + # Clean up + && apt-get autoremove -y \ + && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* + +# Switch back to dialog for any ad-hoc use of apt-get +ENV DEBIAN_FRONTEND= diff --git a/Examples/HelloWorld/.devcontainer/devcontainer.json b/Examples/HelloWorld/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1a5af50 --- /dev/null +++ b/Examples/HelloWorld/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Swift", + "dockerFile": "Dockerfile", + + "runArgs": [ + "-u", "vscode", + "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" + ], + + "settings": { + "lldb.adapterType": "bundled", + "lldb.executable": "/usr/bin/lldb", + "terminal.integrated.shell.linux": "/bin/bash" + }, + + // Uncomment the next line if you want to publish any ports. + // "appPort": [], + + "extensions": [ + "pvasek.sourcekit-lsp--dev-unofficial", + "vadimcn.vscode-lldb" + ] +} \ No newline at end of file diff --git a/Examples/HelloWorld/.vscode/launch.json b/Examples/HelloWorld/.vscode/launch.json new file mode 100644 index 0000000..5f6f70f --- /dev/null +++ b/Examples/HelloWorld/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/HelloWorld", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build" + }, + { + "type": "lldb", + "request": "launch", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/HelloWorldPackageTests.xctest", + "name": "Test", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "codecov" + } + ] +} \ No newline at end of file diff --git a/Examples/HelloWorld/.vscode/tasks.json b/Examples/HelloWorld/.vscode/tasks.json new file mode 100644 index 0000000..164cb42 --- /dev/null +++ b/Examples/HelloWorld/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "swift build", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "test", + "type": "shell", + "command": "swift test --enable-code-coverage || true", + "group": "test" + }, + { + "label": "codecov", + "type": "shell", + "command": "llvm-cov export ${workspaceFolder}/.build/x86_64-unknown-linux/debug/HelloWorld -instr-profile=${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/default.profdata -format=lcov > ${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/lcov.info", + "group": "test", + "dependsOn":["test"] + }, + { + "label": "run", + "type": "shell", + "command": "swift run" + } + ] +} \ No newline at end of file diff --git a/Examples/HelloWorld/Tests/HelloWorldTests/HelloWorldTests.swift b/Examples/HelloWorld/Tests/HelloWorldTests/HelloWorldTests.swift index 3fa5daf..ef0bcb0 100644 --- a/Examples/HelloWorld/Tests/HelloWorldTests/HelloWorldTests.swift +++ b/Examples/HelloWorld/Tests/HelloWorldTests/HelloWorldTests.swift @@ -2,7 +2,7 @@ import class Foundation.Bundle import XCTest final class HelloWorldTests: XCTestCase { - func testExample() throws { + func testMissingLambdaRuntimeApi() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. @@ -18,7 +18,7 @@ final class HelloWorldTests: XCTestCase { process.executableURL = fooBinary let pipe = Pipe() - process.standardOutput = pipe + process.standardError = pipe try process.run() process.waitUntilExit() @@ -26,7 +26,7 @@ final class HelloWorldTests: XCTestCase { let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8) - XCTAssertEqual(output, "Hello, world!\n") + XCTAssertEqual(output, "missingEnvironmentVariables(LambdaSwiftSprinter.Context.AWSEnvironmentKey.lambdaRuntimeApi)\n") } /// Returns path to the built products directory. @@ -42,6 +42,6 @@ final class HelloWorldTests: XCTestCase { } static var allTests = [ - ("testExample", testExample), + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), ] } diff --git a/Examples/HelloWorld/Tests/HelloWorldTests/XCTestManifests.swift b/Examples/HelloWorld/Tests/HelloWorldTests/XCTestManifests.swift index 1697ea4..aff97de 100644 --- a/Examples/HelloWorld/Tests/HelloWorldTests/XCTestManifests.swift +++ b/Examples/HelloWorld/Tests/HelloWorldTests/XCTestManifests.swift @@ -1,9 +1,18 @@ +#if !canImport(ObjectiveC) import XCTest -#if !canImport(ObjectiveC) - public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(HelloWorldTests.allTests), - ] - } +extension HelloWorldTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__HelloWorldTests = [ + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), + ] +} + +public func __allTests() -> [XCTestCaseEntry] { + return [ + testCase(HelloWorldTests.__allTests__HelloWorldTests), + ] +} #endif diff --git a/Examples/HelloWorld/Tests/LinuxMain.swift b/Examples/HelloWorld/Tests/LinuxMain.swift index 230ef5f..f57d73b 100644 --- a/Examples/HelloWorld/Tests/LinuxMain.swift +++ b/Examples/HelloWorld/Tests/LinuxMain.swift @@ -3,5 +3,6 @@ import XCTest import HelloWorldTests var tests = [XCTestCaseEntry]() -tests += HelloWorldTests.allTests() +tests += HelloWorldTests.__allTests() + XCTMain(tests) diff --git a/Examples/S3Test/.devcontainer/Dockerfile b/Examples/S3Test/.devcontainer/Dockerfile new file mode 100644 index 0000000..84ec8c0 --- /dev/null +++ b/Examples/S3Test/.devcontainer/Dockerfile @@ -0,0 +1,27 @@ +FROM nio-swift:5.1 + +# Or your actual UID, GID on Linux if not the default 1000 +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +# Avoid warnings by switching to noninteractive +ENV DEBIAN_FRONTEND=noninteractive + +# Configure apt and install packages +RUN apt-get update \ + # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. + && groupadd --gid $USER_GID $USERNAME \ + && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ + # [Optional] Add sudo support for non-root user + && apt-get install -y sudo \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME \ + # + # Clean up + && apt-get autoremove -y \ + && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* + +# Switch back to dialog for any ad-hoc use of apt-get +ENV DEBIAN_FRONTEND= diff --git a/Examples/S3Test/.devcontainer/devcontainer.json b/Examples/S3Test/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1a5af50 --- /dev/null +++ b/Examples/S3Test/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Swift", + "dockerFile": "Dockerfile", + + "runArgs": [ + "-u", "vscode", + "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" + ], + + "settings": { + "lldb.adapterType": "bundled", + "lldb.executable": "/usr/bin/lldb", + "terminal.integrated.shell.linux": "/bin/bash" + }, + + // Uncomment the next line if you want to publish any ports. + // "appPort": [], + + "extensions": [ + "pvasek.sourcekit-lsp--dev-unofficial", + "vadimcn.vscode-lldb" + ] +} \ No newline at end of file diff --git a/Examples/S3Test/.vscode/launch.json b/Examples/S3Test/.vscode/launch.json new file mode 100644 index 0000000..9406387 --- /dev/null +++ b/Examples/S3Test/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "lldb", + "request": "launch", + "name": "Debug", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/S3Test", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build" + }, + { + "type": "lldb", + "request": "launch", + "program": "${workspaceFolder}/.build/x86_64-unknown-linux/debug/S3TestPackageTests.xctest", + "name": "Test", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "codecov" + } + ] +} \ No newline at end of file diff --git a/Examples/S3Test/.vscode/tasks.json b/Examples/S3Test/.vscode/tasks.json new file mode 100644 index 0000000..e1f69fc --- /dev/null +++ b/Examples/S3Test/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "swift build", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "test", + "type": "shell", + "command": "swift test --enable-code-coverage || true", + "group": "test" + }, + { + "label": "codecov", + "type": "shell", + "command": "llvm-cov export ${workspaceFolder}/.build/x86_64-unknown-linux/debug/S3Test -instr-profile=${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/default.profdata -format=lcov > ${workspaceFolder}/.build/x86_64-unknown-linux/debug/codecov/lcov.info", + "group": "test", + "dependsOn":["test"] + }, + { + "label": "run", + "type": "shell", + "command": "swift run" + } + ] +} \ No newline at end of file diff --git a/Examples/S3Test/Tests/LinuxMain.swift b/Examples/S3Test/Tests/LinuxMain.swift index cacbf5e..4381ca5 100644 --- a/Examples/S3Test/Tests/LinuxMain.swift +++ b/Examples/S3Test/Tests/LinuxMain.swift @@ -3,5 +3,6 @@ import XCTest import S3TestTests var tests = [XCTestCaseEntry]() -tests += S3TestTests.allTests() +tests += S3TestTests.__allTests() + XCTMain(tests) diff --git a/Examples/S3Test/Tests/S3TestTests/S3TestTests.swift b/Examples/S3Test/Tests/S3TestTests/S3TestTests.swift index c3300a7..6812f54 100644 --- a/Examples/S3Test/Tests/S3TestTests/S3TestTests.swift +++ b/Examples/S3Test/Tests/S3TestTests/S3TestTests.swift @@ -2,7 +2,7 @@ import class Foundation.Bundle import XCTest final class S3TestTests: XCTestCase { - func testExample() throws { + func testMissingLambdaRuntimeApi() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. @@ -25,8 +25,10 @@ final class S3TestTests: XCTestCase { let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8) + + let isError = output?.contains("missingEnvironmentVariables(LambdaSwiftSprinter.Context.AWSEnvironmentKey.lambdaRuntimeApi)") - XCTAssertEqual(output, "") + XCTAssertEqual(isError, true) } /// Returns path to the built products directory. @@ -42,6 +44,6 @@ final class S3TestTests: XCTestCase { } static var allTests = [ - ("testExample", testExample), + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), ] } diff --git a/Examples/S3Test/Tests/S3TestTests/XCTestManifests.swift b/Examples/S3Test/Tests/S3TestTests/XCTestManifests.swift index 66f6138..fd00cbd 100644 --- a/Examples/S3Test/Tests/S3TestTests/XCTestManifests.swift +++ b/Examples/S3Test/Tests/S3TestTests/XCTestManifests.swift @@ -1,9 +1,18 @@ +#if !canImport(ObjectiveC) import XCTest -#if !canImport(ObjectiveC) - public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(S3TestTests.allTests), - ] - } +extension S3TestTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__S3TestTests = [ + ("testMissingLambdaRuntimeApi", testMissingLambdaRuntimeApi), + ] +} + +public func __allTests() -> [XCTestCaseEntry] { + return [ + testCase(S3TestTests.__allTests__S3TestTests), + ] +} #endif diff --git a/README.md b/README.md index b9c7fb5..1b8d213 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # aws-lambda-swift-sprinter -[![Swift 5](https://img.shields.io/badge/Swift-5.0-blue.svg)](https://swift.org/download/) [![Swift 5.1](https://img.shields.io/badge/Swift-5.1-blue.svg)](https://swift.org/download/) ![](https://img.shields.io/badge/version-1.0.0--alpha.2-red) +[![Swift 5](https://img.shields.io/badge/Swift-5.0-blue.svg)](https://swift.org/download/) [![Swift 5.1](https://img.shields.io/badge/Swift-5.1-blue.svg)](https://swift.org/download/) ![](https://img.shields.io/badge/version-1.0.0--alpha.2-red) ![](https://travis-ci.com/swift-sprinter/aws-lambda-swift-sprinter.svg?branch=master) ![](./images/aws-lambda-swift-sprinter.png) @@ -208,7 +208,7 @@ Steps: - Function code - Test event -There are many ways to achieve a lambda deployment (AWS Console, SAM, ClodFormation ...), please refer to the latest [AWS Lambda documentation](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) to know more. +There are many ways to achieve a lambda deployment (AWS Console, SAM, CloudFormation ...), please refer to the latest [AWS Lambda documentation](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) to know more. #### Requirements