Skip to content

Commit c75825c

Browse files
committed
packaging plugin
motivation: add an easy wasy for lambda users to package their lambda and upload it to AWS changes: * add SwiftPM plugin with the verb "archive" * use docker to build and package the lambda(s)
1 parent f2a0ef5 commit c75825c

File tree

6 files changed

+419
-11
lines changed

6 files changed

+419
-11
lines changed

Examples/Echo/Package.swift

+11-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
// swift-tools-version:5.5
1+
// swift-tools-version:5.6
22

3+
import Foundation
34
import PackageDescription
45

6+
// this is the dependency on the swift-aws-lambda-runtime library
7+
var dependencies = [Package.Dependency]()
8+
if FileManager.default.fileExists(atPath: "../../Package.swift") {
9+
dependencies.append(Package.Dependency.package(name: "swift-aws-lambda-runtime", path: "../.."))
10+
} else {
11+
dependencies.append(Package.Dependency.package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"))
12+
}
13+
514
let package = Package(
615
name: "swift-aws-lambda-runtime-example",
716
platforms: [
@@ -10,12 +19,7 @@ let package = Package(
1019
products: [
1120
.executable(name: "MyLambda", targets: ["MyLambda"]),
1221
],
13-
dependencies: [
14-
// this is the dependency on the swift-aws-lambda-runtime library
15-
// in real-world projects this would say
16-
// .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0")
17-
.package(name: "swift-aws-lambda-runtime", path: "../.."),
18-
],
22+
dependencies: dependencies,
1923
targets: [
2024
.executableTarget(
2125
name: "MyLambda",

Package.swift

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.2
1+
// swift-tools-version:5.6
22

33
import PackageDescription
44

@@ -9,6 +9,8 @@ let package = Package(
99
.library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]),
1010
// this has all the main functionality for lambda and it does not link Foundation
1111
.library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]),
12+
// plugin to package the lambda, preparing an archive that can be uploaded to AWS. requires docker.
13+
.plugin(name: "AWSLambdaPackager", targets: ["AWSLambdaPackager"]),
1214
// for testing only
1315
.library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]),
1416
],
@@ -31,6 +33,10 @@ let package = Package(
3133
.product(name: "NIOConcurrencyHelpers", package: "swift-nio"),
3234
.product(name: "NIOPosix", package: "swift-nio"),
3335
]),
36+
.plugin(
37+
name: "AWSLambdaPackager",
38+
capability: .command(intent: .custom(verb: "archive", description: "Archive Lambda binary and prepare it for uploading to AWS"))
39+
),
3440
.testTarget(name: "AWSLambdaRuntimeCoreTests", dependencies: [
3541
.byName(name: "AWSLambdaRuntimeCore"),
3642
.product(name: "NIOTestUtils", package: "swift-nio"),

[email protected]

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// swift-tools-version:5.2
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "swift-aws-lambda-runtime",
7+
products: [
8+
// this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods
9+
.library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]),
10+
// this has all the main functionality for lambda and it does not link Foundation
11+
.library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]),
12+
// for testing only
13+
.library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]),
14+
],
15+
dependencies: [
16+
.package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.33.0")),
17+
.package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")),
18+
.package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")),
19+
],
20+
targets: [
21+
.target(name: "AWSLambdaRuntime", dependencies: [
22+
.byName(name: "AWSLambdaRuntimeCore"),
23+
.product(name: "NIOCore", package: "swift-nio"),
24+
.product(name: "NIOFoundationCompat", package: "swift-nio"),
25+
]),
26+
.target(name: "AWSLambdaRuntimeCore", dependencies: [
27+
.product(name: "Logging", package: "swift-log"),
28+
.product(name: "Backtrace", package: "swift-backtrace"),
29+
.product(name: "NIOHTTP1", package: "swift-nio"),
30+
.product(name: "NIOCore", package: "swift-nio"),
31+
.product(name: "NIOConcurrencyHelpers", package: "swift-nio"),
32+
.product(name: "NIOPosix", package: "swift-nio"),
33+
]),
34+
.testTarget(name: "AWSLambdaRuntimeCoreTests", dependencies: [
35+
.byName(name: "AWSLambdaRuntimeCore"),
36+
.product(name: "NIOTestUtils", package: "swift-nio"),
37+
.product(name: "NIOFoundationCompat", package: "swift-nio"),
38+
]),
39+
.testTarget(name: "AWSLambdaRuntimeTests", dependencies: [
40+
.byName(name: "AWSLambdaRuntimeCore"),
41+
.byName(name: "AWSLambdaRuntime"),
42+
]),
43+
// testing helper
44+
.target(name: "AWSLambdaTesting", dependencies: [
45+
.byName(name: "AWSLambdaRuntime"),
46+
.product(name: "NIO", package: "swift-nio"),
47+
]),
48+
.testTarget(name: "AWSLambdaTestingTests", dependencies: ["AWSLambdaTesting"]),
49+
// for perf testing
50+
.target(name: "MockServer", dependencies: [
51+
.product(name: "NIOHTTP1", package: "swift-nio"),
52+
.product(name: "NIO", package: "swift-nio"),
53+
]),
54+
]
55+
)

0 commit comments

Comments
 (0)