You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2019/01/09 22:29:32 UTC

[GitHub] csantanapr closed pull request #4210: Add swift:4.2 in default deployment

csantanapr closed pull request #4210: Add swift:4.2 in default deployment
URL: https://github.com/apache/incubator-openwhisk/pull/4210
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/ansible/files/runtimes.json b/ansible/files/runtimes.json
index fad64a3f5f..88f14f34ea 100644
--- a/ansible/files/runtimes.json
+++ b/ansible/files/runtimes.json
@@ -147,7 +147,7 @@
             },
             {
                 "kind": "swift:4.1",
-                "default": true,
+                "default": false,
                 "image": {
                     "prefix": "openwhisk",
                     "name": "action-swift-v4.1",
@@ -158,6 +158,20 @@
                     "attachmentName": "codefile",
                     "attachmentType": "text/plain"
                 }
+            },
+            {
+                "kind": "swift:4.2",
+                "default": true,
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-swift-v4.2",
+                    "tag": "latest"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
             }
         ],
         "java": [
diff --git a/core/controller/src/main/resources/apiv1swagger.json b/core/controller/src/main/resources/apiv1swagger.json
index c61cbf3837..1cd8ebc10d 100644
--- a/core/controller/src/main/resources/apiv1swagger.json
+++ b/core/controller/src/main/resources/apiv1swagger.json
@@ -1904,6 +1904,7 @@
                         "sequence",
                         "swift:3.1.1",
                         "swift:4.1",
+                        "swift:4.2",
                         "dotnet:2.2"
                     ],
                     "description": "the type of action"
diff --git a/docs/actions-swift.md b/docs/actions-swift.md
index 5db368737b..195624cdf5 100644
--- a/docs/actions-swift.md
+++ b/docs/actions-swift.md
@@ -87,7 +87,7 @@ You can create a OpenWhisk action called `helloSwift` from this function as
 follows:
 
 ```
-wsk action create helloSwift hello.swift --kind swift:4.1
+wsk action create helloSwift hello.swift --kind swift:4.2
 ```
 
 
@@ -113,7 +113,83 @@ When you create an OpenWhisk Swift action with a Swift source file, it has to be
 
 To avoid the cold-start delay, you can compile your Swift file into a binary and then upload to OpenWhisk in a zip file. As you need the OpenWhisk scaffolding, the easiest way to create the binary is to build it within the same environment as it will be run in.
 
-## Using a script to build Swift packaged action
+## Compiling Swift 4.2 packaged actions
+
+The docker runtime includes a compiler to help users compile and package Swift 4.2 actions.
+
+### Compiling a single source file for Swift 4.2
+
+To compile a single source file that doesn't depend on external libaries you can use the following command:
+```bash
+docker run -i openwhisk/action-swift-v4.2 -compile main <hello.swift >hello.zip
+```
+The docker container reads from stdin the content of the file, and writes to stdout a zip archive with the compiled swift executable.
+Use the flag `-compile` with the name of the main method.
+The zip archive is ready for deployment and invocation using the kind `swift:4.2`
+```bash
+wsk action update helloSwiftly hello.zip --kind swift:4.2
+wsk action invoke helloSwiftly -r -p name World
+```
+
+### Compiling dependencies and multi-file projects for Swift 4.2
+
+To compile multiple files and include external dependencies create the following directory structure.
+```
+.
+├── Package.swift
+└── Sources
+    └── main.swift
+```
+The directory `Sources/` should contain a file named `main.swift`.
+The `Package.swift` should start with a comment specifying version `4.2` for the Swift tooling:
+```swift
+// swift-tools-version:4.2
+import PackageDescription
+
+let package = Package(
+    name: "Action",
+    products: [
+    .executable(
+        name: "Action",
+        targets:  ["Action"]
+    )
+    ],
+    dependencies: [
+    .package(url: "https://github.com/IBM-Swift/SwiftyRequest.git", .upToNextMajor(from: "1.0.0"))
+    ],
+    targets: [
+    .target(
+        name: "Action",
+        dependencies: ["SwiftyRequest"],
+        path: "."
+    )
+    ]
+)
+```
+
+Create a zip archive with the content of the directory:
+```bash
+zip ../action-src.zip -r *
+```
+Pass the zip archive to the docker container over stdin, and the stdout will be a new zip archive with the compiled executable.
+The docker container reads from stdin the content of the zip archive, and writes to stdout a  new zip archive with the compiled swift executable.
+```
+docker run -i openwhisk/action-swift-v4.2 -compile main <action-src.zip >../action-bin.zip
+```
+In a Linux based system you can combined the `zip` and `docker run` steps in a single command:
+```
+zip - -r * | docker run -i openwhisk/action-swift-v4.2 -compile main >../action-bin.zip
+```
+
+The zip `action-bin.zip` archive is ready for deployment and invocation using the kind `swift:4.2`
+```bash
+wsk action update helloSwiftly action-bin.zip --kind swift:4.2
+wsk action invoke helloSwiftly -r
+```
+
+## Compiling Swift 4.1 packaged actions
+
+### Using a script to build Swift 3.1.1 and 4.1 packaged actions
 You can use a script to automate the packaging of the action. Create  script `compile.sh`h file the following.
 ```bash
 #!/bin/bash
@@ -256,7 +332,7 @@ and so you should include them in your own `Package.swift` only for Swift 3 acti
   ```
   wsk action update helloSwiftly build/hello.zip --kind swift:3.1.1
   ```
-  For Swift 4 use the kind `swift:3.1.1`
+  For Swift 4.1 use the kind `swift:4.1`
   ```
   wsk action update helloSwiftly build/hello.zip --kind swift:4.1
   ```
@@ -268,7 +344,7 @@ and so you should include them in your own `Package.swift` only for Swift 3 acti
 
   The time it took for the action to run is in the "duration" property and compare to the time it takes to run with a compilation step in the hello action.
 
-## Error Handling in Swift 4
+## Error Handling in Swift 4.x
 
 With the new Codable completion handler, you can pass an Error to indicate a failure in your Action.
 [Error handling in Swift](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html) resembles exception handling in other languages, with the use of the `try, catch` and `throw` keywords.
@@ -300,7 +376,7 @@ Swift 3.1.1 actions can use the following packages:
 - Watson Developer Cloud SDK version 0.16.0, https://github.com/watson-developer-cloud/swift-sdk
 
 ### Swift 4
-Swift 4 actions are executed using Swift 4.1  `--kind swift:4.1`.
-The default `--kind swift:default` is Swift 4.1.
+Swift 4 actions can be executed using Swift 4.1 or 4.2 using `--kind swift:4.1` or `--kind swift:4.2` respectively.
+The default `--kind swift:default` is Swift 4.2.
 
-Swift 4.1 action runtime doesn't embed any packages, follow the instructions for [packaged swift actions](./actions.md#packaging-an-action-as-a-swift-executable) to include dependencies using a Package.swift.
+Swift 4.x action runtimes don't embed any packages, follow the instructions for [packaged swift actions](./actions.md#packaging-an-action-as-a-swift-executable) to include dependencies using a Package.swift.
diff --git a/tests/dat/actions/unicode.tests/swift-4.2.txt b/tests/dat/actions/unicode.tests/swift-4.2.txt
new file mode 100644
index 0000000000..756d9cd027
--- /dev/null
+++ b/tests/dat/actions/unicode.tests/swift-4.2.txt
@@ -0,0 +1,12 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements; and to You under the Apache License, Version 2.0.
+
+func main(args: [String:Any]) -> [String:Any] {
+    if let str = args["delimiter"] as? String {
+        let msg = "\(str) ☃ \(str)"
+        print(msg)
+        return [ "winter" : msg ]
+    } else {
+        return [ "error" : "no delimiter" ]
+    }
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services