You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ra...@apache.org on 2021/09/22 17:54:19 UTC

[openwhisk-runtime-swift] branch master updated: remove Swift 4 support (#145)

This is an automated email from the ASF dual-hosted git repository.

rabbah 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 11592a7  remove Swift 4 support (#145)
11592a7 is described below

commit 11592a73610342c479973b07ed2ec5bfe45e5082
Author: David Grove <dg...@users.noreply.github.com>
AuthorDate: Wed Sep 22 13:53:29 2021 -0400

    remove Swift 4 support (#145)
---
 .travis.yml                                        |   5 -
 README.md                                          | 268 ---------------------
 ansible/files/runtimes.json                        |  14 --
 core/swift42Action/CHANGELOG.md                    |  40 ---
 core/swift42Action/Dockerfile                      |  70 ------
 core/swift42Action/Package.swift                   |  37 ---
 core/swift42Action/_Whisk.swift                    | 164 -------------
 core/swift42Action/build.gradle                    |  19 --
 core/swift42Action/buildandrecord.py               |  82 -------
 core/swift42Action/main.swift                      |  24 --
 core/swift42Action/swiftbuild.py                   | 119 ---------
 core/swift42Action/swiftbuild.py.launcher.swift    | 133 ----------
 examples/swift-main-single/Makefile                |   4 +-
 examples/swift-main-zip/Makefile                   |  10 +-
 settings.gradle                                    |   3 -
 tests/dat/actions/HelloSwift4/Package.swift        |  37 ---
 tests/dat/actions/HelloSwift4/Sources/main.swift   |  24 --
 tests/dat/actions/HelloSwift4Codable/Package.swift |  37 ---
 .../actions/HelloSwift4Codable/Sources/main.swift  |  32 ---
 tests/dat/actions/Makefile                         |  10 +-
 tests/dat/build.sh                                 |   5 -
 .../Swift42ActionContainerTests.scala              | 118 ---------
 .../Swift42CodableActionContainerTests.scala       |  27 ---
 .../SwiftCodableActionContainerTests.scala         |   2 +-
 .../test/scala/runtime/sdk/Swift42SDKTests.scala   |  26 --
 tools/travis/build.sh                              |   1 -
 tools/travis/publish.sh                            |   4 +-
 27 files changed, 11 insertions(+), 1304 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index d3eb103..e85effe 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -42,11 +42,6 @@ deploy:
       all_branches: true
       repo: apache/openwhisk-runtime-swift
   - provider: script
-    script: "./tools/travis/publish.sh openwhisk 4.2 nightly"
-    on:
-      branch: master
-      repo: apache/openwhisk-runtime-swift
-  - provider: script
     script: "./tools/travis/publish.sh openwhisk 5.1 nightly && ./tools/travis/publish.sh openwhisk 5.3 nightly && ./tools/travis/publish.sh openwhisk 5.4 nightly"
     on:
       branch: master
diff --git a/README.md b/README.md
index c1d76c6..282e77c 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,6 @@
 
 
 ## Changelogs
-- [Swift 4.2   CHANGELOG.md](core/swift42Action/CHANGELOG.md)
 - [Swift 5.1   CHANGELOG.md](core/swift51Action/CHANGELOG.md)
 - [Swift 5.3   CHANGELOG.md](core/swift53Action/CHANGELOG.md)
 - [Swift 5.4   CHANGELOG.md](core/swift54Action/CHANGELOG.md)
@@ -148,270 +147,3 @@ zip - -r * | docker run -i openwhisk/action-swift-v5.1 -compile main >../action.
 ```
 
 For more build examples see [here](./examples/)
-
-## Swift 4.x support
-
-Some examples of using Codable In and Out
-### Codable style function signature
-Create file `helloCodableAsync.swift`
-```swift
-// Domain model/entity
-struct Employee: Codable {
-  let id: Int?
-  let name: String?
-}
-// codable main function
-func main(input: Employee, respondWith: (Employee?, Error?) -> Void) -> Void {
-    // For simplicity, just passing same Employee instance forward
-    respondWith(input, nil)
-}
-```
-```
-wsk action update helloCodableAsync helloCodableAsync.swift swift:4.2
-```
-```
-ok: updated action helloCodableAsync
-```
-```
-wsk action invoke helloCodableAsync -r -p id 42 -p name Carlos
-```
-```json
-{
-    "id": 42,
-    "name": "Carlos"
-}
-```
-
-### Codable Error Handling
-Create file `helloCodableAsync.swift`
-```swift
-struct Employee: Codable {
-    let id: Int?
-    let name: String?
-}
-enum VendingMachineError: Error {
-    case invalidSelection
-    case insufficientFunds(coinsNeeded: Int)
-    case outOfStock
-}
-func main(input: Employee, respondWith: (Employee?, Error?) -> Void) -> Void {
-    // Return real error
-    do{
-        throw VendingMachineError.insufficientFunds(coinsNeeded: 5)
-    } catch {
-        respondWith(nil, error)
-    }
-}
-```
-```
-wsk action update helloCodableError helloCodableError.swift swift:4.2
-```
-```
-ok: updated action helloCodableError
-```
-```
-wsk action invoke helloCodableError -b -p id 42 -p name Carlos
-```
-```json
-{
-  "name": "helloCodableError",
-  "response": {
-    "result": {
-      "error": "insufficientFunds(5)"
-    },
-    "status": "application error",
-    "success": false
-  }
-}
-```
-
-## Packaging an action as a Swift executable using Swift 4.x
-
-When you create an OpenWhisk Swift action with a Swift source file, it has to be compiled into a binary before the action is run. Once done, subsequent calls to the action are much faster until the container holding your action is purged. This delay is known as the cold-start delay.
-
-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.
-
-### Compiling Swift 4.2
-
-### Compiling Swift 4.2 single file
-
-Use the docker container and pass the single source file as stdin.
-Pass the name of the method to the flag `-compile`
-```
-docker run -i openwhisk/action-swift-v4.2 -compile main <main.swift >../action.zip
-```
-
-### Compiling Swift 4.2 multiple files with dependencies
-Use the docker container and pass a zip archive containing a `Package.swift` and source files a main source file in the location `Sources/main.swift`.
-```
-zip - -r * | docker run -i openwhisk/action-swift-v4.2 -compile main >../action.zip
-```
-
-For more build examples see [here](./examples/)
-
-### Building the Swift4 Image
-```
-./gradlew core:swift42Action:distDocker
-```
-This will produce the image `whisk/action-swift-v4.2`
-
-Build and Push image
-```
-docker login
-./gradlew core:swift42Action:distDocker -PdockerImagePrefix=$prefix-user -PdockerRegistry=docker.io
-```
-
-
-## Codable Support with Swift 4.x
-
-Some examples of using Codable In and Out
-
-### Codable style function signature
-Create file `helloCodableAsync.swift`
-```swift
-// Domain model/entity
-struct Employee: Codable {
-  let id: Int
-  let name: String
-}
-// codable main function
-func main(input: Employee, respondWith: (Employee?, Error?) -> Void) -> Void {
-    // For simplicity, just passing same Employee instance forward
-    respondWith(input, nil)
-}
-```
-```
-wsk action update helloCodableAsync helloCodableAsync.swift swift:4.2
-```
-```
-ok: updated action helloCodableAsync
-```
-```
-wsk action invoke helloCodableAsync -r -p id 42 -p name Carlos
-```
-```json
-{
-    "id": 42,
-    "name": "Carlos"
-}
-```
-
-### Codable Error Handling
-Create file `helloCodableAsync.swift`
-```swift
-struct Employee: Codable {
-    let id: Int
-    let name: String
-}
-enum VendingMachineError: Error {
-    case invalidSelection
-    case insufficientFunds(coinsNeeded: Int)
-    case outOfStock
-}
-func main(input: Employee, respondWith: (Employee?, Error?) -> Void) -> Void {
-    // Return real error
-    do{
-        throw VendingMachineError.insufficientFunds(coinsNeeded: 5)
-    } catch {
-        respondWith(nil, error)
-    }
-}
-```
-```
-wsk action update helloCodableError helloCodableError.swift swift:4.2
-```
-```
-ok: updated action helloCodableError
-```
-```
-wsk action invoke helloCodableError -b -p id 42 -p name Carlos
-```
-```json
-{
-  "name": "helloCodableError",
-  "response": {
-    "result": {
-      "error": "insufficientFunds(5)"
-    },
-    "status": "application error",
-    "success": false
-  }
-}
-```
-
-### Using Swift 4.2
-To use as a docker action
-```
-wsk action update myAction myAction.swift --docker openwhisk/action-swift-v4.2:1.0.7
-```
-This works on any deployment of Apache OpenWhisk
-
-### To use on deployment that contains the runtime as a kind
-To use as a kind action
-```
-wsk action update myAction myAction.swift --kind swift:4.2
-```
-
-## Local development
-```
-./gradlew core:swift42Action:distDocker
-```
-This will produce the image `whisk/action-swift-v4.2`
-
-Build and Push image
-```
-docker login
-./gradlew core:swift42Action:distDocker -PdockerImagePrefix=$prefix-user -PdockerRegistry=docker.io
-```
-
-Deploy OpenWhisk using ansible environment that contains the kind `swift:4.2`
-Assuming you have OpenWhisk already deploy locally and `OPENWHISK_HOME` pointing to root directory of OpenWhisk core repository.
-
-Set `ROOTDIR` to the root directory of this repository.
-
-Redeploy OpenWhisk
-```
-cd $OPENWHISK_HOME/ansible
-ANSIBLE_CMD="ansible-playbook -i ${ROOTDIR}/ansible/environments/local"
-$ANSIBLE_CMD setup.yml
-$ANSIBLE_CMD couchdb.yml
-$ANSIBLE_CMD initdb.yml
-$ANSIBLE_CMD wipe.yml
-$ANSIBLE_CMD openwhisk.yml
-```
-
-Or you can use `wskdev` and create a soft link to the target ansible environment, for example:
-```
-ln -s ${ROOTDIR}/ansible/environments/local ${OPENWHISK_HOME}/ansible/environments/local-swift
-wskdev fresh -t local-swift
-```
-
-### Testing
-Install dependencies from the root directory on $OPENWHISK_HOME repository
-```
-./gradlew :common:scala:install :core:controller:install :core:invoker:install :tests:install
-```
-
-Using gradle to run all tests
-```
-./gradlew :tests:test
-```
-Using gradle to run some tests
-```
-./gradlew :tests:test --tests *ActionContainerTests*
-```
-Using IntelliJ:
-- Import project as gradle project.
-- Make sure the working directory is root of the project/repo
-
-#### Using container image to test
-To use as docker action push to your own Docker Hub account
-```
-docker tag whisk/action-swift-v4.2 $user_prefix/action-swift-v4.2
-docker push $user_prefix/action-swift-v4.2
-```
-Then create the action using your image from Docker Hub
-```
-wsk action update myAction myAction.swift --docker $user_prefix/action-swift-v4.2
-```
-The `$user_prefix` is usually your Docker Hub user id.
diff --git a/ansible/files/runtimes.json b/ansible/files/runtimes.json
index 4239c7f..f7f8800 100644
--- a/ansible/files/runtimes.json
+++ b/ansible/files/runtimes.json
@@ -31,20 +31,6 @@
     ],
     "swift": [
       {
-        "kind": "swift:4.2",
-        "default": false,
-        "image": {
-          "prefix": "testing",
-          "name": "action-swift-v4.2",
-          "tag": "latest"
-        },
-        "deprecated": false,
-        "attached": {
-          "attachmentName": "codefile",
-          "attachmentType": "text/plain"
-        }
-      },
-      {
         "kind": "swift:5.1",
         "default": false,
         "image": {
diff --git a/core/swift42Action/CHANGELOG.md b/core/swift42Action/CHANGELOG.md
deleted file mode 100644
index 8280bfe..0000000
--- a/core/swift42Action/CHANGELOG.md
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
--->
-
-# Apache OpenWhisk Swift 4.2 Runtime Container
-
-## 1.17.0
-- Build actionloop from 1.16@1.18.0 (#143)
-- Resolve akka versions explicitly. (#141, #139)
-
-## 1.16.0
-  - Use 1.17.0 release of openwhisk-runtime-go
-
-## 1.15.0
-  - Move from golang:1.12 to golang:1.15 to build the runtime proxy. (#121)
-  - Build proxy from openwhisk-runtime-go 1.16.0 release (#122)
-
-## 1.14.0
-  - Support for __OW_ACTION_VERSION (openwhisk/4761)
-
-## 1.13.0-incubating
- - Initial Release
-
-Packages included:
-  - No packages included, use Package.swift and pre-compile action.
diff --git a/core/swift42Action/Dockerfile b/core/swift42Action/Dockerfile
deleted file mode 100644
index 68d21c0..0000000
--- a/core/swift42Action/Dockerfile
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# build go proxy from source
-FROM golang:1.16 AS builder_source
-ARG GO_PROXY_GITHUB_USER=apache
-ARG GO_PROXY_GITHUB_BRANCH=master
-RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
-   https://github.com/${GO_PROXY_GITHUB_USER}/openwhisk-runtime-go /src ;\
-   cd /src ; env GO111MODULE=on CGO_ENABLED=0 go build main/proxy.go && \
-   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.18.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
-
-FROM swift:4.2
-
-# select the builder to use
-ARG GO_PROXY_BUILD_FROM=release
-
-RUN rm -rf /var/lib/apt/lists/* && apt-get clean && apt-get update \
-	&& apt-get install -y --no-install-recommends locales python3 vim \
-	&& rm -rf /var/lib/apt/lists/* \
-	&& locale-gen en_US.UTF-8
-
-ENV LANG="en_US.UTF-8" \
-	LANGUAGE="en_US:en" \
-	LC_ALL="en_US.UTF-8"
-
-RUN mkdir -p /swiftAction
-WORKDIR /swiftAction
-
-
-COPY --from=builder_source /bin/proxy /bin/proxy_source
-COPY --from=builder_release /bin/proxy /bin/proxy_release
-RUN mv /bin/proxy_${GO_PROXY_BUILD_FROM} /bin/proxy
-ADD swiftbuild.py /bin/compile
-ADD swiftbuild.py.launcher.swift /bin/compile.launcher.swift
-COPY _Whisk.swift /swiftAction/Sources/
-COPY Package.swift /swiftAction/
-COPY buildandrecord.py /swiftAction/
-COPY main.swift /swiftAction/Sources/
-RUN swift build -c release; \
-	touch /swiftAction/Sources/main.swift; \
-	rm /swiftAction/.build/release/Action; \
-	/swiftAction/buildandrecord.py
-
-
-ENV OW_COMPILER=/bin/compile
-ENTRYPOINT [ "/bin/proxy" ]
diff --git a/core/swift42Action/Package.swift b/core/swift42Action/Package.swift
deleted file mode 100644
index 181e352..0000000
--- a/core/swift42Action/Package.swift
+++ /dev/null
@@ -1,37 +0,0 @@
-// swift-tools-version:4.2
-// The swift-tools-version declares the minimum version of Swift required to build this package.
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PackageDescription
-
-let package = Package(
-    name: "Action",
-    products: [
-      .executable(
-        name: "Action",
-        targets:  ["Action"]
-      )
-    ],
-    targets: [
-      .target(
-        name: "Action",
-        path: "."
-      )
-    ]
-)
diff --git a/core/swift42Action/_Whisk.swift b/core/swift42Action/_Whisk.swift
deleted file mode 100644
index bcd54f6..0000000
--- a/core/swift42Action/_Whisk.swift
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import Foundation
-import Dispatch
-
-class Whisk {
-
-    static var baseUrl = ProcessInfo.processInfo.environment["__OW_API_HOST"]
-    static var apiKey = ProcessInfo.processInfo.environment["__OW_API_KEY"]
-    // This will allow user to modify the default JSONDecoder and JSONEncoder used by epilogue
-    static var jsonDecoder = JSONDecoder()
-    static var jsonEncoder = JSONEncoder()
-
-    class func invoke(actionNamed action : String, withParameters params : [String:Any], blocking: Bool = true) -> [String:Any] {
-        let parsedAction = parseQualifiedName(name: action)
-        let strBlocking = blocking ? "true" : "false"
-        let path = "/api/v1/namespaces/\(parsedAction.namespace)/actions/\(parsedAction.name)?blocking=\(strBlocking)"
-
-        return sendWhiskRequestSyncronish(uriPath: path, params: params, method: "POST")
-    }
-
-    class func trigger(eventNamed event : String, withParameters params : [String:Any]) -> [String:Any] {
-        let parsedEvent = parseQualifiedName(name: event)
-        let path = "/api/v1/namespaces/\(parsedEvent.namespace)/triggers/\(parsedEvent.name)?blocking=true"
-
-        return sendWhiskRequestSyncronish(uriPath: path, params: params, method: "POST")
-    }
-
-    class func createTrigger(triggerNamed trigger: String, withParameters params : [String:Any]) -> [String:Any] {
-        let parsedTrigger = parseQualifiedName(name: trigger)
-        let path = "/api/v1/namespaces/\(parsedTrigger.namespace)/triggers/\(parsedTrigger.name)"
-        return sendWhiskRequestSyncronish(uriPath: path, params: params, method: "PUT")
-    }
-
-    class func createRule(ruleNamed ruleName: String, withTrigger triggerName: String, andAction actionName: String) -> [String:Any] {
-        let parsedRule = parseQualifiedName(name: ruleName)
-        let path = "/api/v1/namespaces/\(parsedRule.namespace)/rules/\(parsedRule.name)"
-        let params = ["trigger":triggerName, "action":actionName]
-        return sendWhiskRequestSyncronish(uriPath: path, params: params, method: "PUT")
-    }
-
-    // handle the GCD dance to make the post async, but then obtain/return
-    // the result from this function sync
-    private class func sendWhiskRequestSyncronish(uriPath path: String, params : [String:Any], method: String) -> [String:Any] {
-        var response : [String:Any]!
-
-        let queue = DispatchQueue.global()
-        let invokeGroup = DispatchGroup()
-
-        invokeGroup.enter()
-        queue.async {
-            postUrlSession(uriPath: path, params: params, method: method, group: invokeGroup) { result in
-                response = result
-            }
-        }
-
-        // On one hand, FOREVER seems like an awfully long time...
-        // But on the other hand, I think we can rely on the system to kill this
-        // if it exceeds a reasonable execution time.
-        switch invokeGroup.wait(timeout: DispatchTime.distantFuture) {
-        case DispatchTimeoutResult.success:
-            break
-        case DispatchTimeoutResult.timedOut:
-            break
-        }
-
-        return response
-    }
-
-
-    /**
-     * Using new UrlSession
-     */
-    private class func postUrlSession(uriPath: String, params : [String:Any], method: String,group: DispatchGroup, callback : @escaping([String:Any]) -> Void) {
-
-        guard let encodedPath = uriPath.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) else {
-            callback(["error": "Error encoding uri path to make openwhisk REST call."])
-            return
-        }
-
-        let urlStr = "\(baseUrl!)\(encodedPath)"
-        if let url = URL(string: urlStr) {
-            var request = URLRequest(url: url)
-            request.httpMethod = method
-
-            do {
-                request.addValue("application/json", forHTTPHeaderField: "Content-Type")
-                request.httpBody = try JSONSerialization.data(withJSONObject: params)
-
-                let loginData: Data = apiKey!.data(using: String.Encoding.utf8, allowLossyConversion: false)!
-                let base64EncodedAuthKey  = loginData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
-                request.addValue("Basic \(base64EncodedAuthKey)", forHTTPHeaderField: "Authorization")
-                let session = URLSession(configuration: URLSessionConfiguration.default)
-
-                let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
-
-                    // exit group after we are done
-                    defer {
-                        group.leave()
-                    }
-
-                    if let error = error {
-                        callback(["error":error.localizedDescription])
-                    } else {
-
-                        if let data = data {
-                            do {
-                                //let outputStr  = String(data: data, encoding: String.Encoding.utf8) as String!
-                                //print(outputStr)
-                                let respJson = try JSONSerialization.jsonObject(with: data)
-                                if respJson is [String:Any] {
-                                    callback(respJson as! [String:Any])
-                                } else {
-                                    callback(["error":" response from server is not a dictionary"])
-                                }
-                            } catch {
-                                callback(["error":"Error creating json from response: \(error)"])
-                            }
-                        }
-                    }
-                })
-
-                task.resume()
-            } catch {
-                callback(["error":"Got error creating params body: \(error)"])
-            }
-        }
-    }
-
-    // separate an OpenWhisk qualified name (e.g. "/whisk.system/samples/date")
-    // into namespace and name components
-    private class func parseQualifiedName(name qualifiedName : String) -> (namespace : String, name : String) {
-        let defaultNamespace = "_"
-        let delimiter = "/"
-
-        let segments :[String] = qualifiedName.components(separatedBy: delimiter)
-
-        if segments.count > 2 {
-            return (segments[1], Array(segments[2..<segments.count]).joined(separator: delimiter))
-        } else if segments.count == 2 {
-            // case "/action" or "package/action"
-            let name = qualifiedName.hasPrefix(delimiter) ? segments[1] : segments.joined(separator: delimiter)
-            return (defaultNamespace, name)
-        } else {
-            return (defaultNamespace, segments[0])
-        }
-    }
-
-}
diff --git a/core/swift42Action/build.gradle b/core/swift42Action/build.gradle
deleted file mode 100644
index 87eeff3..0000000
--- a/core/swift42Action/build.gradle
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-ext.dockerImageName = 'action-swift-v4.2'
-apply from: '../../gradle/docker.gradle'
diff --git a/core/swift42Action/buildandrecord.py b/core/swift42Action/buildandrecord.py
deleted file mode 100755
index bc15f06..0000000
--- a/core/swift42Action/buildandrecord.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python3
-"""Python to generate build script.
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-"""
-from __future__ import print_function
-import os
-import sys
-from subprocess import check_output
-
-# Settings
-COMPILE_PREFIX = "/usr/bin/swiftc -module-name Action "
-LINKER_PREFIX =  "/usr/bin/swiftc -target x86_64-unknown-linux -sdk / -L /swiftAction/.build/x86_64-unknown-linux/release -o /swiftAction/.build/x86_64-unknown-linux/release/Action -module-name Action -emit-executable -Xlinker '-rpath=$ORIGIN'"
-GENERATED_BUILD_SCRIPT = "/swiftAction/swiftbuildandlink.sh"
-SPM_DIRECTORY = "/swiftAction"
-BUILD_COMMAND = ["swift", "build", "-v", "-c", "release"]
-
-# Build Swift package and capture step trace
-print("Building action")
-out = check_output(BUILD_COMMAND, cwd=SPM_DIRECTORY)
-print("action built. Decoding compile and link commands")
-
-# Look for compile and link commands in step trace
-compileCommand = None
-linkCommand = None
-
-buildInstructions = out.decode("utf-8").splitlines()
-
-for instruction in buildInstructions:
-    print(instruction)
-    if instruction.startswith(COMPILE_PREFIX):
-        compileCommand = instruction
-
-        # add flag to quiet warnings
-        compileCommand += " -suppress-warnings"
-
-    elif instruction.startswith(LINKER_PREFIX):
-        linkCommand = instruction
-
-# if found, create build script, otherwise exit with error
-if compileCommand is not None and linkCommand is not None:
-    print("Generated OpenWhisk Compile command: %s" % compileCommand)
-    print("=========")
-    print("Generated OpenWhisk Link command: %s" % linkCommand)
-
-    with open(GENERATED_BUILD_SCRIPT, "w") as buildScript:
-        buildScript.write("#!/bin/bash\n")
-        buildScript.write("#date\n")
-        buildScript.write("#echo \"Compiling\"\n")
-        buildScript.write("%s\n" % compileCommand)
-        buildScript.write("swiftStatus=$?\n")
-        buildScript.write("#echo swiftc status is $swiftStatus\n")
-        buildScript.write("if [[ \"$swiftStatus\" -eq \"0\" ]]; then\n")
-        buildScript.write("#date\n")
-        buildScript.write("#echo \"Linking\"\n")
-        buildScript.write("%s\n" % linkCommand)
-        buildScript.write("#date\n")
-        buildScript.write("else\n")
-        buildScript.write(">2& echo \"Action did not compile\"\n")
-        buildScript.write("exit 1\n")
-        buildScript.write("fi")
-
-    os.chmod(GENERATED_BUILD_SCRIPT, 0o777)
-    sys.exit(0)
-else:
-    print("Cannot generate build script: compile or link command not found")
-    sys.exit(1)
diff --git a/core/swift42Action/main.swift b/core/swift42Action/main.swift
deleted file mode 100644
index 75071a3..0000000
--- a/core/swift42Action/main.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-func main(args: [String:Any]) -> [String:Any] {
-    if let name = args["name"] as? String {
-        return [ "greeting" : "Hello \(name)!" ]
-    } else {
-        return [ "greeting" : "Hello stranger!" ]
-    }
-}
diff --git a/core/swift42Action/swiftbuild.py b/core/swift42Action/swiftbuild.py
deleted file mode 100755
index 9b40903..0000000
--- a/core/swift42Action/swiftbuild.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python3
-"""Swift Action Compiler
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""
-
-from __future__ import print_function
-import os
-import re
-import sys
-import codecs
-import subprocess
-from io import StringIO
-
-def eprint(*args, **kwargs):
-    print(*args, file=sys.stderr, **kwargs)
-
-def sources(launcher, source_dir, main):
-    actiondir = "%s/Sources" % source_dir
-    # copy the launcher fixing the main
-    dst = "%s/main.swift" % actiondir
-    with codecs.open(dst, 'a', 'utf-8') as d:
-        with codecs.open(launcher, 'r', 'utf-8') as e:
-            code = e.read()
-            code += "while let inputStr: String = readLine() {\n"
-            code += "  let json = inputStr.data(using: .utf8, allowLossyConversion: true)!\n"
-            code += "  let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any]\n"
-            code += "  for (key, value) in parsed {\n"
-            code += "    if key != \"value\" {\n"
-            code += "      setenv(\"__OW_\\(key.uppercased())\",value as! String,1)\n"
-            code += "    }\n"
-            code += "  }\n"
-            code += "  let jsonData = try JSONSerialization.data(withJSONObject: parsed[\"value\"] as Any, options: [])\n"
-            code += "  _run_main(mainFunction: %s, json: jsonData)\n" % main
-            code += "} \n"
-            d.write(code)
-
-def swift_build(dir, buildcmd):
-    # compile...
-    env = {
-      "PATH": os.environ["PATH"]
-    }
-    p = subprocess.Popen(buildcmd,
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        cwd=dir,
-        env=env)
-    (o, e) = p.communicate()
-    # stdout/stderr may be either text or bytes, depending on Python
-    # version, so if bytes, decode to text. Note that in Python 2
-    # a string will match both types; so also skip decoding in that case
-    if isinstance(o, bytes) and not isinstance(o, str):
-        o = o.decode('utf-8')
-    if isinstance(e, bytes) and not isinstance(e, str):
-        e = e.decode('utf-8')
-    return p.returncode, o, e
-
-def build(source_dir, target_file, buildcmd):
-    r, o, e = swift_build(source_dir, buildcmd)
-    #if e: print(e)
-    #if o: print(o)
-    if r != 0:
-        print(e)
-        print(o)
-        print(r)
-        return
-
-    bin_file = "%s/.build/release/Action" % source_dir
-    os.rename(bin_file, target_file)
-    if not os.path.isfile(target_file):
-        print("failed %s -> %s" % (bin_file, target_file))
-        return
-
-
-def main(argv):
-    if len(argv) < 4:
-        print("usage: <main-function> <source-dir> <target-dir>")
-        sys.exit(1)
-
-    main = argv[1]
-    source_dir = os.path.abspath(argv[2])
-    target = os.path.abspath("%s/exec" % argv[3])
-    launch = os.path.abspath(argv[0]+".launcher.swift")
-
-    src = "%s/exec" % source_dir
-
-    #check if single source
-    if os.path.isfile(src):
-        actiondir = os.path.abspath("Sources")
-        if not os.path.isdir(actiondir):
-            os.makedirs(actiondir, mode=0o755)
-        dst = "%s/main.swift" % actiondir
-        os.rename(src, dst)
-        sources(launch, os.path.abspath("."), main)
-        build(os.path.abspath("."), target, ["./swiftbuildandlink.sh"])
-    else:
-        actiondir = "%s/Sources" % source_dir
-        if not os.path.isdir(actiondir):
-            os.makedirs(actiondir, mode=0o755)
-        os.rename(os.path.abspath("Sources/_Whisk.swift"),"%s/Sources/_Whisk.swift" % source_dir)
-        sources(launch, source_dir, main)
-        build(source_dir, target, ["swift", "build", "-c", "release"])
-
-if __name__ == '__main__':
-    main(sys.argv)
diff --git a/core/swift42Action/swiftbuild.py.launcher.swift b/core/swift42Action/swiftbuild.py.launcher.swift
deleted file mode 100644
index 3405777..0000000
--- a/core/swift42Action/swiftbuild.py.launcher.swift
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Imports
-import Foundation
-#if os(Linux)
-    import Glibc
-#else
-    import Darwin
-#endif
-
-func _whisk_print_error(message: String, error: Error?){
-    var errStr =  "{\"error\":\"\(message)\"}\n"
-    if let error = error {
-        errStr = "{\"error\":\"\(message) \(error.localizedDescription)\"\n}"
-    }
-    _whisk_print_buffer(jsonString: errStr)
-}
-func _whisk_print_result(jsonData: Data){
-    let jsonString = String(data: jsonData, encoding: .utf8)!
-    _whisk_print_buffer(jsonString: jsonString)
-}
-func _whisk_print_buffer(jsonString: String){
-    var buf : [UInt8] = Array(jsonString.utf8)
-    buf.append(10)
-    fflush(stdout)
-    fflush(stderr)
-    write(3, buf, buf.count)
-}
-
-// snippet of code "injected" (wrapper code for invoking traditional main)
-func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void {
-    do {
-        let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any]
-        let result = mainFunction(parsed)
-        if JSONSerialization.isValidJSONObject(result) {
-            do {
-                let jsonData = try JSONSerialization.data(withJSONObject: result, options: [])
-                 _whisk_print_result(jsonData: jsonData)
-            } catch {
-                _whisk_print_error(message: "Failed to encode Dictionary type to JSON string:", error: error)
-            }
-        } else {
-            _whisk_print_error(message: "Error serializing JSON, data does not appear to be valid JSON", error: nil)
-        }
-    } catch {
-        _whisk_print_error(message: "Failed to execute action handler with error:", error: error)
-        return
-    }
-}
-
-// Codable main signature input Codable
-func _run_main<In: Decodable, Out: Encodable>(mainFunction: (In, @escaping (Out?, Error?) -> Void) -> Void, json: Data) {
-    do {
-        let input = try Whisk.jsonDecoder.decode(In.self, from: json)
-        let resultHandler = { (out: Out?, error: Error?) in
-            if let error = error {
-                _whisk_print_error(message: "Action handler callback returned an error:", error: error)
-                return
-            }
-            guard let out = out else {
-                _whisk_print_error(message: "Action handler callback did not return response or error.", error: nil)
-                return
-            }
-            do {
-                let jsonData = try Whisk.jsonEncoder.encode(out)
-                _whisk_print_result(jsonData: jsonData)
-            } catch let error as EncodingError {
-                _whisk_print_error(message: "JSONEncoder failed to encode Codable type to JSON string:", error: error)
-                return
-            } catch {
-                _whisk_print_error(message: "Failed to execute action handler with error:", error: error)
-                return
-            }
-        }
-        let _ = mainFunction(input, resultHandler)
-    } catch let error as DecodingError {
-        _whisk_print_error(message: "JSONDecoder failed to decode JSON string \(String(data: json, encoding: .utf8)!.replacingOccurrences(of: "\"", with: "\\\"")) to Codable type:", error: error)
-        return
-    } catch {
-        _whisk_print_error(message: "Failed to execute action handler with error:", error: error)
-        return
-    }
-}
-
-// Codable main signature no input
-func _run_main<Out: Encodable>(mainFunction: ( @escaping (Out?, Error?) -> Void) -> Void, json: Data) {
-    let resultHandler = { (out: Out?, error: Error?) in
-        if let error = error {
-            _whisk_print_error(message: "Action handler callback returned an error:", error: error)
-            return
-        }
-        guard let out = out else {
-            _whisk_print_error(message: "Action handler callback did not return response or error.", error: nil)
-            return
-        }
-        do {
-            let jsonData = try Whisk.jsonEncoder.encode(out)
-            _whisk_print_result(jsonData: jsonData)
-        } catch let error as EncodingError {
-            _whisk_print_error(message: "JSONEncoder failed to encode Codable type to JSON string:", error: error)
-            return
-        } catch {
-            _whisk_print_error(message: "Failed to execute action handler with error:", error: error)
-            return
-        }
-    }
-    let _ = mainFunction(resultHandler)
-}
-
-// snippets of code "injected", depending on the type of function the developer
-// wants to use traditional vs codable
-
-
-
-
-
-
-
diff --git a/examples/swift-main-single/Makefile b/examples/swift-main-single/Makefile
index effd9c4..df1ae49 100644
--- a/examples/swift-main-single/Makefile
+++ b/examples/swift-main-single/Makefile
@@ -16,8 +16,8 @@
 #
 
 OW_USER?=whisk
-OW_RUNTIME?=$(OW_USER)/action-swift-v4.2
-OW_COMPILER?=$(OW_USER)/action-swift-v4.2
+OW_RUNTIME?=$(OW_USER)/action-swift-v5.3
+OW_COMPILER?=$(OW_USER)/action-swift-v5.3
 WSK?=wsk -i
 MAIN=main
 PACKAGE=test
diff --git a/examples/swift-main-zip/Makefile b/examples/swift-main-zip/Makefile
index c0feef5..5d55958 100644
--- a/examples/swift-main-zip/Makefile
+++ b/examples/swift-main-zip/Makefile
@@ -16,12 +16,12 @@
 #
 
 OW_USER?=whisk
-OW_RUNTIME?=$(OW_USER)/action-swift-v4.2
-OW_COMPILER?=$(OW_USER)/action-swift-v4.2
+OW_RUNTIME?=$(OW_USER)/action-swift-v5.3
+OW_COMPILER?=$(OW_USER)/action-swift-v5.3
 WSK?=wsk -i
 MAIN=main
 PACKAGE=test
-SRCS=HelloSwift4/Sources/$(MAIN).swift HelloSwift4/Package.swift
+SRCS=HelloSwift5/Sources/$(MAIN).swift HelloSwift5/Package.swift
 NAME=swift-$(MAIN)-zip
 BINZIP=$(MAIN)-bin.zip
 SRCZIP=$(MAIN)-src.zip
@@ -33,10 +33,10 @@ devel: package.done $(SRCZIP)
 	$(WSK) action update $(PACKAGE)/$(NAME) $(SRCZIP) --main $(MAIN) --docker $(OW_COMPILER)
 
 $(BINZIP): $(SRCS)
-	cd HelloSwift4 ; zip - -r * | docker run -i $(OW_COMPILER) -compile $(MAIN) >../$(BINZIP)
+	cd HelloSwift5 ; zip - -r * | docker run -i $(OW_COMPILER) -compile $(MAIN) >../$(BINZIP)
 
 $(SRCZIP): $(SRCS)
-	cd HelloSwift4 ; zip ../$(SRCZIP) -r *
+	cd HelloSwift5 ; zip ../$(SRCZIP) -r *
 
 clean:
 	-$(WSK) action delete $(PACKAGE)/$(NAME)
diff --git a/settings.gradle b/settings.gradle
index 7ae6f5e..a0763e1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -17,15 +17,12 @@
 
 include 'tests'
 
-include 'core:swift42Action'
-
 include 'core:swift51Action'
 
 include 'core:swift53Action'
 
 include 'core:swift54Action'
 
-
 rootProject.name = 'runtime-swift'
 
 gradle.ext.openwhisk = [
diff --git a/tests/dat/actions/HelloSwift4/Package.swift b/tests/dat/actions/HelloSwift4/Package.swift
deleted file mode 100644
index 22f96a5..0000000
--- a/tests/dat/actions/HelloSwift4/Package.swift
+++ /dev/null
@@ -1,37 +0,0 @@
-// swift-tools-version:4.0
-// The swift-tools-version declares the minimum version of Swift required to build this package.
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PackageDescription
-
-let package = Package(
-    name: "Action",
-    products: [
-      .executable(
-        name: "Action",
-        targets:  ["Action"]
-      )
-    ],
-    targets: [
-      .target(
-        name: "Action",
-        path: "."
-      )
-    ]
-)
diff --git a/tests/dat/actions/HelloSwift4/Sources/main.swift b/tests/dat/actions/HelloSwift4/Sources/main.swift
deleted file mode 100644
index 75071a3..0000000
--- a/tests/dat/actions/HelloSwift4/Sources/main.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-func main(args: [String:Any]) -> [String:Any] {
-    if let name = args["name"] as? String {
-        return [ "greeting" : "Hello \(name)!" ]
-    } else {
-        return [ "greeting" : "Hello stranger!" ]
-    }
-}
diff --git a/tests/dat/actions/HelloSwift4Codable/Package.swift b/tests/dat/actions/HelloSwift4Codable/Package.swift
deleted file mode 100644
index 22f96a5..0000000
--- a/tests/dat/actions/HelloSwift4Codable/Package.swift
+++ /dev/null
@@ -1,37 +0,0 @@
-// swift-tools-version:4.0
-// The swift-tools-version declares the minimum version of Swift required to build this package.
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PackageDescription
-
-let package = Package(
-    name: "Action",
-    products: [
-      .executable(
-        name: "Action",
-        targets:  ["Action"]
-      )
-    ],
-    targets: [
-      .target(
-        name: "Action",
-        path: "."
-      )
-    ]
-)
diff --git a/tests/dat/actions/HelloSwift4Codable/Sources/main.swift b/tests/dat/actions/HelloSwift4Codable/Sources/main.swift
deleted file mode 100644
index 75baa4d..0000000
--- a/tests/dat/actions/HelloSwift4Codable/Sources/main.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-struct AnInput: Codable {
-    let name: String?
-}
-struct AnOutput: Codable {
-    let greeting: String?
-}
- func main(input: AnInput, respondWith: (AnOutput?, Error?) -> Void) -> Void {
-     if let name = input.name {
-         let answer = AnOutput(greeting: "Hello \(name)!")
-         respondWith(answer, nil)
-     } else {
-         let answer = AnOutput(greeting: "Hello stranger!")
-         respondWith(answer, nil)
-     }
-  }
diff --git a/tests/dat/actions/Makefile b/tests/dat/actions/Makefile
index 209265a..a5d9055 100644
--- a/tests/dat/actions/Makefile
+++ b/tests/dat/actions/Makefile
@@ -16,8 +16,8 @@
 #
 
 OW_USER?=whisk
-OW_COMPILER?=$(OW_USER)/action-swift-v4.2
-OUT?=../../build/swift4.2
+OW_COMPILER?=$(OW_USER)/action-swift-v5.3
+OUT?=../../build/swift5.3
 define Build
 	cd $(1); \
 	docker run -i $(OW_COMPILER) -compile main <./Sources/main.swift >$(OUT)/$(1).zip
@@ -30,12 +30,6 @@ define BuildWithLib
 	mv Package.swift.bak Package.swift
 endef
 
-Hello:
-	$(call Build,HelloSwift4)
-
-HelloCodable:
-	$(call Build,HelloSwift4Codable)
-
 Swifty:
 	$(call BuildWithLib,SwiftyRequest)
 
diff --git a/tests/dat/build.sh b/tests/dat/build.sh
index 3abba0c..f9c2751 100755
--- a/tests/dat/build.sh
+++ b/tests/dat/build.sh
@@ -18,11 +18,6 @@
 
 set -e
 
-../../tools/build/compile5.sh  action-swift-v4.2 HelloSwift4 swift4.2 "-v"
-../../tools/build/compile5.sh  action-swift-v4.2 HelloSwift4Codable swift4.2 "-v"
-../../tools/build/compile5.sh  action-swift-v4.2 SwiftyRequest swift4.2 "-v"
-../../tools/build/compile5.sh  action-swift-v4.2 SwiftyRequestCodable swift4.2 "-v"
-
 ../../tools/build/compile5.sh  action-swift-v5.1 HelloSwift5 swift5.1 "-v"
 ../../tools/build/compile5.sh  action-swift-v5.1 HelloSwift5Codable swift5.1 "-v"
 ../../tools/build/compile5.sh  action-swift-v5.1 SwiftyRequest5 swift5.1 "-v"
diff --git a/tests/src/test/scala/runtime/actionContainers/Swift42ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift42ActionContainerTests.scala
deleted file mode 100644
index 5a3c395..0000000
--- a/tests/src/test/scala/runtime/actionContainers/Swift42ActionContainerTests.scala
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package runtime.actionContainers
-
-import java.io.File
-
-import actionContainers.ResourceHelpers
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-import spray.json.{JsObject, JsString}
-
-@RunWith(classOf[JUnitRunner])
-class Swift42ActionContainerTests extends SwiftActionContainerTests {
-  override lazy val swiftContainerImageName = "action-swift-v4.2"
-  override lazy val swiftBinaryName = "tests/dat/build/swift4.2/HelloSwift4.zip"
-  lazy val partyCompile = "tests/dat/build/swift4.2/SwiftyRequest.zip"
-  lazy val partyCompileCodable = "tests/dat/build/swift4.2/SwiftyRequestCodable.zip"
-
-  val httpCode = """
-                   | import Dispatch
-                   | func main(args:[String: Any]) -> [String:Any] {
-                   |     var resp :[String:Any] = ["error":"getUrl failed"]
-                   |     guard let urlStr = args["getUrl"] as? String else {
-                   |         return ["error":"getUrl not found in action input"]
-                   |     }
-                   |     guard let url = URL(string: urlStr) else {
-                   |         return ["error":"invalid url string \(urlStr)"]
-                   |     }
-                   |     let request = URLRequest(url: url)
-                   |     let session = URLSession(configuration: .default)
-                   |     let semaphore = DispatchSemaphore(value: 0)
-                   |     let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
-                   |         print("done with http request")
-                   |         if let error = error {
-                   |             print("There was an error \(error)")
-                   |         } else if let data = data,
-                   |             let response = response as? HTTPURLResponse,
-                   |             response.statusCode == 200 {
-                   |             do {
-                   |                 let respJson = try JSONSerialization.jsonObject(with: data)
-                   |                 if respJson is [String:Any] {
-                   |                     resp = respJson as! [String:Any]
-                   |                 } else {
-                   |                     resp = ["error":"Response from server is not a dictionary"]
-                   |                 }
-                   |             } catch {
-                   |                 resp = ["error":"Error creating json from response: \(error)"]
-                   |             }
-                   |         }
-                   |         semaphore.signal()
-                   |     })
-                   |     task.resume()
-                   |     _ = semaphore.wait(timeout: .distantFuture)
-                   |     return resp
-                   | }
-                 """.stripMargin
-
-  it should "support ability to use 3rd party packages like SwiftyRequest" in {
-    val zip = new File(partyCompile).toPath
-    val code = ResourceHelpers.readAsBase64(zip)
-
-    val (out, err) = withActionContainer() { c =>
-      val (initCode, initRes) = c.init(initPayload(code))
-      initCode should be(200)
-
-      val args = JsObject("message" -> (JsString("serverless")))
-      val (runCode, runRes) = c.run(runPayload(args))
-
-      runCode should be(200)
-      val json = runRes.get.fields.get("json")
-      json shouldBe Some(args)
-    }
-
-    checkStreams(out, err, {
-      case (o, e) =>
-        if (enforceEmptyOutputStream) o shouldBe empty
-        e shouldBe empty
-    })
-  }
-
-  it should "support ability to use escaping completion in Codable" in {
-    val zip = new File(partyCompileCodable).toPath
-    val code = ResourceHelpers.readAsBase64(zip)
-
-    val (out, err) = withActionContainer() { c =>
-      val (initCode, initRes) = c.init(initPayload(code, main = "mainCodable"))
-      initCode should be(200)
-
-      val (runCode, runRes) = c.run(runPayload(JsObject()))
-
-      runCode should be(200)
-      runRes.get.fields.get("greeting") shouldBe Some(JsString("success"))
-
-    }
-
-    checkStreams(out, err, {
-      case (o, e) =>
-        if (enforceEmptyOutputStream) o shouldBe empty
-        e shouldBe empty
-    })
-  }
-
-}
diff --git a/tests/src/test/scala/runtime/actionContainers/Swift42CodableActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift42CodableActionContainerTests.scala
deleted file mode 100644
index 0e721fc..0000000
--- a/tests/src/test/scala/runtime/actionContainers/Swift42CodableActionContainerTests.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package runtime.actionContainers
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class Swift42CodableActionContainerTests extends SwiftCodableActionContainerTests {
-  override lazy val swiftContainerImageName = "action-swift-v4.2"
-  override lazy val swiftBinaryName = "tests/dat/build/swift4.2/HelloSwift4Codable.zip"
-}
diff --git a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
index 5c033e7..e455d99 100644
--- a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala
@@ -33,7 +33,7 @@ abstract class SwiftCodableActionContainerTests extends BasicActionRunnerTests w
   // note: "out" will likely not be empty in some swift build as the compiler
   // prints status messages and there doesn't seem to be a way to quiet them
   val enforceEmptyOutputStream = false
-  lazy val swiftContainerImageName = "action-swift-v4.0"
+  lazy val swiftContainerImageName = "???"
   lazy val swiftBinaryName = "tests/dat/build/swift4.0/HelloCodable.zip"
 
   behavior of s"Codable $swiftContainerImageName"
diff --git a/tests/src/test/scala/runtime/sdk/Swift42SDKTests.scala b/tests/src/test/scala/runtime/sdk/Swift42SDKTests.scala
deleted file mode 100644
index 06402ee..0000000
--- a/tests/src/test/scala/runtime/sdk/Swift42SDKTests.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package runtime.sdk
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class Swift42SDKTests extends SwiftSDKTests {
-  override lazy val actionKind = "swift:4.2"
-}
diff --git a/tools/travis/build.sh b/tools/travis/build.sh
index 8104212..bf6e83b 100755
--- a/tools/travis/build.sh
+++ b/tools/travis/build.sh
@@ -46,7 +46,6 @@ TERM=dumb ./gradlew install
 # Build runtime
 cd $ROOTDIR
 TERM=dumb ./gradlew \
-:core:swift42Action:distDocker \
 :core:swift51Action:distDocker \
 :core:swift53Action:distDocker \
 :core:swift54Action:distDocker \
diff --git a/tools/travis/publish.sh b/tools/travis/publish.sh
index 8a0ece3..d2eebdd 100755
--- a/tools/travis/publish.sh
+++ b/tools/travis/publish.sh
@@ -30,9 +30,7 @@ IMAGE_PREFIX=$1
 RUNTIME_VERSION=$2
 IMAGE_TAG=$3
 
-if [ ${RUNTIME_VERSION} == "4.2" ]; then
-  RUNTIME="swift42Action"
-elif [ ${RUNTIME_VERSION} == "5.1" ]; then
+if [ ${RUNTIME_VERSION} == "5.1" ]; then
   RUNTIME="swift51Action"
 elif [ ${RUNTIME_VERSION} == "5.3" ]; then
   RUNTIME="swift53Action"