You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by dg...@apache.org on 2022/08/15 13:43:23 UTC
[openwhisk-runtime-swift] branch master updated: Support array result include sequence action (#150)
This is an automated email from the ASF dual-hosted git repository.
dgrove pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-swift.git
The following commit(s) were added to refs/heads/master by this push:
new 027bb83 Support array result include sequence action (#150)
027bb83 is described below
commit 027bb83e926d9d7d8780606a2f9bd4723267a6a5
Author: ningyougang <41...@qq.com>
AuthorDate: Mon Aug 15 21:43:18 2022 +0800
Support array result include sequence action (#150)
---
README.md | 27 ++++++++++-
core/swift51Action/Dockerfile | 8 ++--
core/swift51Action/main.swift | 5 ++-
core/swift51Action/swiftbuild.py.launcher.swift | 4 +-
core/swift53Action/Dockerfile | 8 ++--
core/swift53Action/main.swift | 5 ++-
core/swift53Action/swiftbuild.py.launcher.swift | 4 +-
core/swift54Action/Dockerfile | 8 ++--
core/swift54Action/main.swift | 5 ++-
core/swift54Action/swiftbuild.py.launcher.swift | 4 +-
examples/swift-main-single/main.swift | 7 +--
.../swift-main-zip/HelloSwift4/Sources/main.swift | 4 +-
tests/dat/actions/HelloSwift5/Sources/main.swift | 5 ++-
tests/dat/actions/SwiftyRequest/Sources/main.swift | 4 +-
.../dat/actions/SwiftyRequest5/Sources/main.swift | 4 +-
tests/dat/actions/sdk/swift4/createRule.swift | 11 ++---
tests/dat/actions/sdk/swift4/createTrigger.swift | 7 +--
tests/dat/actions/sdk/swift4/hello.swift | 5 ++-
tests/dat/actions/sdk/swift4/invoke.swift | 5 ++-
.../dat/actions/sdk/swift4/invokeNonBlocking.swift | 5 ++-
tests/dat/actions/sdk/swift4/trigger.swift | 7 +--
tests/dat/actions/sdk/swift5/createRule.swift | 11 ++---
tests/dat/actions/sdk/swift5/createTrigger.swift | 7 +--
tests/dat/actions/sdk/swift5/hello.swift | 5 ++-
tests/dat/actions/sdk/swift5/invoke.swift | 5 ++-
.../dat/actions/sdk/swift5/invokeNonBlocking.swift | 5 ++-
tests/dat/actions/sdk/swift5/trigger.swift | 7 +--
.../Swift51ActionContainerTests.scala | 5 ++-
.../Swift53ActionContainerTests.scala | 5 ++-
.../Swift54ActionContainerTests.scala | 5 ++-
.../SwiftActionContainerTests.scala | 52 ++++++++++++++++++----
.../SwiftCodableActionContainerTests.scala | 2 +-
32 files changed, 165 insertions(+), 86 deletions(-)
diff --git a/README.md b/README.md
index 1942676..b46e800 100644
--- a/README.md
+++ b/README.md
@@ -33,8 +33,9 @@ The traditional support for the dictionary still works:
```swift
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let dict = args as! [String:Any]
+ if let name = dict["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
@@ -42,6 +43,28 @@ func main(args: [String:Any]) -> [String:Any] {
}
```
+For the return result, not only support `dictionary`, but also support `array`
+
+So a very simple `hello array` function woule be:
+
+```swift
+func main(args: Any) -> Any {
+ var arr = ["a", "b"]
+ return arr
+}
+```
+
+And support array result for sequence action as well, the first action's array result can be used as next action's input parameter.
+
+So the function can be:
+
+```swift
+ func main(args: Any) -> Any {
+ return args
+ }
+```
+When invokes above action, we can pass an array object as the input parameter.
+
## Swift 5.x support
Some examples of using Codable In and Out
diff --git a/core/swift51Action/Dockerfile b/core/swift51Action/Dockerfile
index 99c742c..8175a05 100644
--- a/core/swift51Action/Dockerfile
+++ b/core/swift51Action/Dockerfile
@@ -16,7 +16,7 @@
#
# build go proxy from source
-FROM golang:1.16 AS builder_source
+FROM golang:1.18 AS builder_source
ARG GO_PROXY_GITHUB_USER=apache
ARG GO_PROXY_GITHUB_BRANCH=master
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
@@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
mv proxy /bin/proxy
# or build it from a release
-FROM golang:1.16 AS builder_release
-ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0
+FROM golang:1.18 AS builder_release
+ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0
RUN curl -sL \
https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\
| tar xzf -\
&& cd openwhisk-runtime-go-*/main\
- && GO111MODULE=on go build -o /bin/proxy
+ && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy
FROM swift:5.1.5
diff --git a/core/swift51Action/main.swift b/core/swift51Action/main.swift
index 75071a3..2c6b1de 100644
--- a/core/swift51Action/main.swift
+++ b/core/swift51Action/main.swift
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/core/swift51Action/swiftbuild.py.launcher.swift b/core/swift51Action/swiftbuild.py.launcher.swift
index 3405777..5260280 100644
--- a/core/swift51Action/swiftbuild.py.launcher.swift
+++ b/core/swift51Action/swiftbuild.py.launcher.swift
@@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){
}
// snippet of code "injected" (wrapper code for invoking traditional main)
-func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void {
+func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void {
do {
- let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any]
+ let parsed = try JSONSerialization.jsonObject(with: json, options: [])
let result = mainFunction(parsed)
if JSONSerialization.isValidJSONObject(result) {
do {
diff --git a/core/swift53Action/Dockerfile b/core/swift53Action/Dockerfile
index 9807280..cc91019 100644
--- a/core/swift53Action/Dockerfile
+++ b/core/swift53Action/Dockerfile
@@ -16,7 +16,7 @@
#
# build go proxy from source
-FROM golang:1.16 AS builder_source
+FROM golang:1.18 AS builder_source
ARG GO_PROXY_GITHUB_USER=apache
ARG GO_PROXY_GITHUB_BRANCH=master
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
@@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
mv proxy /bin/proxy
# or build it from a release
-FROM golang:1.16 AS builder_release
-ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0
+FROM golang:1.18 AS builder_release
+ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0
RUN curl -sL \
https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\
| tar xzf -\
&& cd openwhisk-runtime-go-*/main\
- && GO111MODULE=on go build -o /bin/proxy
+ && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy
FROM swift:5.3
diff --git a/core/swift53Action/main.swift b/core/swift53Action/main.swift
index 75071a3..2c6b1de 100644
--- a/core/swift53Action/main.swift
+++ b/core/swift53Action/main.swift
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/core/swift53Action/swiftbuild.py.launcher.swift b/core/swift53Action/swiftbuild.py.launcher.swift
index 3405777..5260280 100644
--- a/core/swift53Action/swiftbuild.py.launcher.swift
+++ b/core/swift53Action/swiftbuild.py.launcher.swift
@@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){
}
// snippet of code "injected" (wrapper code for invoking traditional main)
-func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void {
+func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void {
do {
- let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any]
+ let parsed = try JSONSerialization.jsonObject(with: json, options: [])
let result = mainFunction(parsed)
if JSONSerialization.isValidJSONObject(result) {
do {
diff --git a/core/swift54Action/Dockerfile b/core/swift54Action/Dockerfile
index d330660..f1f4a7f 100644
--- a/core/swift54Action/Dockerfile
+++ b/core/swift54Action/Dockerfile
@@ -16,7 +16,7 @@
#
# build go proxy from source
-FROM golang:1.16 AS builder_source
+FROM golang:1.18 AS builder_source
ARG GO_PROXY_GITHUB_USER=apache
ARG GO_PROXY_GITHUB_BRANCH=master
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
@@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
mv proxy /bin/proxy
# or build it from a release
-FROM golang:1.16 AS builder_release
-ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0
+FROM golang:1.18 AS builder_release
+ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0
RUN curl -sL \
https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\
| tar xzf -\
&& cd openwhisk-runtime-go-*/main\
- && GO111MODULE=on go build -o /bin/proxy
+ && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy
FROM swift:5.4
diff --git a/core/swift54Action/main.swift b/core/swift54Action/main.swift
index 75071a3..2c6b1de 100644
--- a/core/swift54Action/main.swift
+++ b/core/swift54Action/main.swift
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/core/swift54Action/swiftbuild.py.launcher.swift b/core/swift54Action/swiftbuild.py.launcher.swift
index 3405777..5260280 100644
--- a/core/swift54Action/swiftbuild.py.launcher.swift
+++ b/core/swift54Action/swiftbuild.py.launcher.swift
@@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){
}
// snippet of code "injected" (wrapper code for invoking traditional main)
-func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void {
+func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void {
do {
- let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any]
+ let parsed = try JSONSerialization.jsonObject(with: json, options: [])
let result = mainFunction(parsed)
if JSONSerialization.isValidJSONObject(result) {
do {
diff --git a/examples/swift-main-single/main.swift b/examples/swift-main-single/main.swift
index 9a7aaf8..2de8dcb 100644
--- a/examples/swift-main-single/main.swift
+++ b/examples/swift-main-single/main.swift
@@ -15,15 +15,16 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello swif4.2!" ]
}
}
-func mainenv(args: [String: Any]) -> [String: Any] {
+func mainenv(args: Any) -> Any {
let env = ProcessInfo.processInfo.environment
var a = "???"
var b = "???"
diff --git a/examples/swift-main-zip/HelloSwift4/Sources/main.swift b/examples/swift-main-zip/HelloSwift4/Sources/main.swift
index 6237c80..7ba5e13 100644
--- a/examples/swift-main-zip/HelloSwift4/Sources/main.swift
+++ b/examples/swift-main-zip/HelloSwift4/Sources/main.swift
@@ -15,8 +15,8 @@
# limitations under the License.
#
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/tests/dat/actions/HelloSwift5/Sources/main.swift b/tests/dat/actions/HelloSwift5/Sources/main.swift
index a8bfed4..4d927ec 100644
--- a/tests/dat/actions/HelloSwift5/Sources/main.swift
+++ b/tests/dat/actions/HelloSwift5/Sources/main.swift
@@ -17,8 +17,9 @@
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/tests/dat/actions/SwiftyRequest/Sources/main.swift b/tests/dat/actions/SwiftyRequest/Sources/main.swift
index 35de61e..e145587 100644
--- a/tests/dat/actions/SwiftyRequest/Sources/main.swift
+++ b/tests/dat/actions/SwiftyRequest/Sources/main.swift
@@ -19,12 +19,12 @@ import SwiftyRequest
import Dispatch
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
+func main(args: Any) -> Any {
var resp :[String:Any] = ["error":"Action failed"]
let echoURL = "http://httpbin.org/post"
// setting body data to {"Data":"string"}
- let origJson: [String: Any] = args
+ let origJson = args as! [String:Any]
guard let data = try? JSONSerialization.data(withJSONObject: origJson, options: []) else {
return ["error": "Could not encode json"]
}
diff --git a/tests/dat/actions/SwiftyRequest5/Sources/main.swift b/tests/dat/actions/SwiftyRequest5/Sources/main.swift
index 8aac40a..7afe444 100644
--- a/tests/dat/actions/SwiftyRequest5/Sources/main.swift
+++ b/tests/dat/actions/SwiftyRequest5/Sources/main.swift
@@ -19,12 +19,12 @@ import SwiftyRequest
import Dispatch
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
+func main(args: Any) -> Any {
var resp :[String:Any] = ["error":"Action failed"]
let echoURL = "http://httpbin.org/post"
// setting body data to {"Data":"string"}
- let origJson: [String: Any] = args
+ let origJson = args as! [String:Any]
guard let data = try? JSONSerialization.data(withJSONObject: origJson, options: []) else {
return ["error": "Could not encode json"]
}
diff --git a/tests/dat/actions/sdk/swift4/createRule.swift b/tests/dat/actions/sdk/swift4/createRule.swift
index 6c8895f..f02c31e 100644
--- a/tests/dat/actions/sdk/swift4/createRule.swift
+++ b/tests/dat/actions/sdk/swift4/createRule.swift
@@ -15,18 +15,19 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- guard let triggerName = args["triggerName"] as? String else {
+ guard let triggerName = newArgs["triggerName"] as? String else {
return ["error": "You must specify a triggerName parameter!"]
}
- guard let actionName = args["actionName"] as? String else {
+ guard let actionName = newArgs["actionName"] as? String else {
return ["error": "You must specify a actionName parameter!"]
}
- guard let ruleName = args["ruleName"] as? String else {
+ guard let ruleName = newArgs["ruleName"] as? String else {
return ["error": "You must specify a ruleName parameter!"]
}
print("Rule Name: \(ruleName), Trigger Name: \(triggerName), actionName: \(actionName)")
diff --git a/tests/dat/actions/sdk/swift4/createTrigger.swift b/tests/dat/actions/sdk/swift4/createTrigger.swift
index 097497e..93075ba 100644
--- a/tests/dat/actions/sdk/swift4/createTrigger.swift
+++ b/tests/dat/actions/sdk/swift4/createTrigger.swift
@@ -15,12 +15,13 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- guard let triggerName = args["triggerName"] as? String else {
+ guard let triggerName = newArgs["triggerName"] as? String else {
return ["error": "You must specify a triggerName parameter!"]
}
print("Trigger Name: \(triggerName)")
diff --git a/tests/dat/actions/sdk/swift4/hello.swift b/tests/dat/actions/sdk/swift4/hello.swift
index 75071a3..2c6b1de 100644
--- a/tests/dat/actions/sdk/swift4/hello.swift
+++ b/tests/dat/actions/sdk/swift4/hello.swift
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/tests/dat/actions/sdk/swift4/invoke.swift b/tests/dat/actions/sdk/swift4/invoke.swift
index 5afca75..222f1ab 100644
--- a/tests/dat/actions/sdk/swift4/invoke.swift
+++ b/tests/dat/actions/sdk/swift4/invoke.swift
@@ -26,8 +26,9 @@ struct Activation: Decodable {
let activationId: String
}
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
diff --git a/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift b/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift
index b81c308..68f3b39 100644
--- a/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift
+++ b/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift
@@ -19,8 +19,9 @@ struct Activation: Decodable {
let activationId: String
}
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
diff --git a/tests/dat/actions/sdk/swift4/trigger.swift b/tests/dat/actions/sdk/swift4/trigger.swift
index a7307f3..4d9649a 100644
--- a/tests/dat/actions/sdk/swift4/trigger.swift
+++ b/tests/dat/actions/sdk/swift4/trigger.swift
@@ -15,12 +15,13 @@
* limitations under the License.
*/
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- if let triggerName = args["triggerName"] as? String {
+ if let triggerName = newArgs ["triggerName"] as? String {
print("Trigger Name: \(triggerName)")
return Whisk.trigger(eventNamed: triggerName, withParameters: [:])
} else {
diff --git a/tests/dat/actions/sdk/swift5/createRule.swift b/tests/dat/actions/sdk/swift5/createRule.swift
index 7f7a88b..b2751e0 100644
--- a/tests/dat/actions/sdk/swift5/createRule.swift
+++ b/tests/dat/actions/sdk/swift5/createRule.swift
@@ -17,18 +17,19 @@
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- guard let triggerName = args["triggerName"] as? String else {
+ guard let triggerName = newArgs["triggerName"] as? String else {
return ["error": "You must specify a triggerName parameter!"]
}
- guard let actionName = args["actionName"] as? String else {
+ guard let actionName = newArgs["actionName"] as? String else {
return ["error": "You must specify a actionName parameter!"]
}
- guard let ruleName = args["ruleName"] as? String else {
+ guard let ruleName = newArgs["ruleName"] as? String else {
return ["error": "You must specify a ruleName parameter!"]
}
print("Rule Name: \(ruleName), Trigger Name: \(triggerName), actionName: \(actionName)")
diff --git a/tests/dat/actions/sdk/swift5/createTrigger.swift b/tests/dat/actions/sdk/swift5/createTrigger.swift
index bd3e497..fc24508 100644
--- a/tests/dat/actions/sdk/swift5/createTrigger.swift
+++ b/tests/dat/actions/sdk/swift5/createTrigger.swift
@@ -17,12 +17,13 @@
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- guard let triggerName = args["triggerName"] as? String else {
+ guard let triggerName = newArgs["triggerName"] as? String else {
return ["error": "You must specify a triggerName parameter!"]
}
print("Trigger Name: \(triggerName)")
diff --git a/tests/dat/actions/sdk/swift5/hello.swift b/tests/dat/actions/sdk/swift5/hello.swift
index a8bfed4..4d927ec 100644
--- a/tests/dat/actions/sdk/swift5/hello.swift
+++ b/tests/dat/actions/sdk/swift5/hello.swift
@@ -17,8 +17,9 @@
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let name = args["name"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let name = newArgs["name"] as? String {
return [ "greeting" : "Hello \(name)!" ]
} else {
return [ "greeting" : "Hello stranger!" ]
diff --git a/tests/dat/actions/sdk/swift5/invoke.swift b/tests/dat/actions/sdk/swift5/invoke.swift
index ba03066..3992a00 100644
--- a/tests/dat/actions/sdk/swift5/invoke.swift
+++ b/tests/dat/actions/sdk/swift5/invoke.swift
@@ -28,8 +28,9 @@ struct Activation: Decodable {
let activationId: String
}
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
diff --git a/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift b/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift
index 043e0b4..cb3507e 100644
--- a/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift
+++ b/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift
@@ -21,8 +21,9 @@ struct Activation: Decodable {
let activationId: String
}
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
diff --git a/tests/dat/actions/sdk/swift5/trigger.swift b/tests/dat/actions/sdk/swift5/trigger.swift
index 0481e23..2459247 100644
--- a/tests/dat/actions/sdk/swift5/trigger.swift
+++ b/tests/dat/actions/sdk/swift5/trigger.swift
@@ -17,12 +17,13 @@
import Foundation
-func main(args: [String:Any]) -> [String:Any] {
- if let baseUrl = args["baseUrl"] as? String {
+func main(args: Any) -> Any {
+ let newArgs = args as! [String:Any]
+ if let baseUrl = newArgs["baseUrl"] as? String {
//Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs"
Whisk.baseUrl = baseUrl
}
- if let triggerName = args["triggerName"] as? String {
+ if let triggerName = newArgs["triggerName"] as? String {
print("Trigger Name: \(triggerName)")
return Whisk.trigger(eventNamed: triggerName, withParameters: [:])
} else {
diff --git a/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala
index 183f867..af58421 100644
--- a/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala
@@ -37,9 +37,10 @@ class Swift51ActionContainerTests extends SwiftActionContainerTests {
| #if canImport(FoundationNetworking)
| import FoundationNetworking
| #endif
- | func main(args:[String: Any]) -> [String:Any] {
+ | func main(args: Any) -> Any {
| var resp :[String:Any] = ["error":"getUrl failed"]
- | guard let urlStr = args["getUrl"] as? String else {
+ | let newArgs = args as! [String:Any]
+ | guard let urlStr = newArgs["getUrl"] as? String else {
| return ["error":"getUrl not found in action input"]
| }
| guard let url = URL(string: urlStr) else {
diff --git a/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala
index 0814f9a..3acf7ac 100644
--- a/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala
@@ -37,9 +37,10 @@ class Swift53ActionContainerTests extends SwiftActionContainerTests {
| #if canImport(FoundationNetworking)
| import FoundationNetworking
| #endif
- | func main(args:[String: Any]) -> [String:Any] {
+ | func main(args: Any) -> Any {
| var resp :[String:Any] = ["error":"getUrl failed"]
- | guard let urlStr = args["getUrl"] as? String else {
+ | let newArgs = args as! [String:Any]
+ | guard let urlStr = newArgs["getUrl"] as? String else {
| return ["error":"getUrl not found in action input"]
| }
| guard let url = URL(string: urlStr) else {
diff --git a/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala
index 4ae7358..e4487e1 100644
--- a/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala
@@ -37,9 +37,10 @@ class Swift54ActionContainerTests extends SwiftActionContainerTests {
| #if canImport(FoundationNetworking)
| import FoundationNetworking
| #endif
- | func main(args:[String: Any]) -> [String:Any] {
+ | func main(args: Any) -> Any {
| var resp :[String:Any] = ["error":"getUrl failed"]
- | guard let urlStr = args["getUrl"] as? String else {
+ | let newArgs = args as! [String:Any]
+ | guard let urlStr = newArgs["getUrl"] as? String else {
| return ["error":"getUrl not found in action input"]
| }
| guard let url = URL(string: urlStr) else {
diff --git a/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala
index 147baa7..421be38 100644
--- a/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala
@@ -50,7 +50,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
override val testInitCannotBeCalledMoreThanOnce = {
TestConfig("""
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| return args
| }
""".stripMargin)
@@ -59,7 +59,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
override val testEntryPointOtherThanMain = {
TestConfig(
"""
- | func niam(args: [String: Any]) -> [String: Any] {
+ | func niam(args: Any) -> Any {
| return args
| }
""".stripMargin,
@@ -78,7 +78,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
| }
| }
|
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| print("hello stdout")
| var standardError = FileHandle.standardError
| print("hello stderr", to: &standardError)
@@ -89,8 +89,9 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
override val testUnicode = {
TestConfig("""
- | func main(args: [String: Any]) -> [String: Any] {
- | if let str = args["delimiter"] as? String {
+ | func main(args: Any) -> Any {
+ | let newArgs = args as! [String:Any]
+ | if let str = newArgs["delimiter"] as? String {
| let msg = "\(str) ☃ \(str)"
| print(msg)
| return [ "winter" : msg ]
@@ -104,7 +105,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
override val testEnv = {
TestConfig(
"""
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| let env = ProcessInfo.processInfo.environment
| var a = "???"
| var b = "???"
@@ -142,7 +143,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
override val testLargeInput = {
TestConfig("""
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| return args
| }
""".stripMargin)
@@ -151,7 +152,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
it should "support application errors" in {
val (out, err) = withActionContainer() { c =>
val code = """
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| return [ "error": "sorry" ]
| }
""".stripMargin
@@ -220,6 +221,41 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk
})
}
+ it should "support return array result" in {
+ val (out, err) = withActionContainer() { c =>
+ val code = """
+ | func main(args: Any) -> Any {
+ | var arr = ["a", "b"]
+ | return arr
+ | }
+ """.stripMargin
+
+ val (initCode, _) = c.init(initPayload(code))
+ initCode should be(200)
+
+ val (runCode, runRes) = c.runForJsArray(runPayload(JsObject()))
+ runCode should be(200)
+ runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
+ }
+ }
+
+ it should "support array as input param" in {
+ val (out, err) = withActionContainer() { c =>
+ val code = """
+ | func main(args: Any) -> Any {
+ | return args
+ | }
+ """.stripMargin
+
+ val (initCode, _) = c.init(initPayload(code))
+ initCode should be(200)
+
+ val (runCode, runRes) = c.runForJsArray(runPayload(JsArray(JsString("a"), JsString("b"))))
+ runCode should be(200)
+ runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
+ }
+ }
+
// Helpers specific to swift actions
override def withActionContainer(env: Map[String, String] = Map.empty)(code: ActionContainer => Unit) = {
withContainer(swiftContainerImageName, env)(code)
diff --git a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
index e455d99..0b3a55c 100644
--- a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
@@ -198,7 +198,7 @@ abstract class SwiftCodableActionContainerTests extends BasicActionRunnerTests w
""".stripMargin
} else {
"""
- | func main(args: [String: Any]) -> [String: Any] {
+ | func main(args: Any) -> Any {
| return args
| }
""".stripMargin