You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ms...@apache.org on 2022/05/13 12:27:31 UTC

[openwhisk-runtime-go] branch master updated: drop golang1.13 and golang1.15 (#167)

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

msciabarra pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-go.git


The following commit(s) were added to refs/heads/master by this push:
     new 21dedfe  drop golang1.13 and golang1.15 (#167)
21dedfe is described below

commit 21dedfee0ecf572f33f9b9e6d743f5a598c3a80d
Author: David Grove <dg...@users.noreply.github.com>
AuthorDate: Fri May 13 08:27:27 2022 -0400

    drop golang1.13 and golang1.15 (#167)
---
 .travis.yml                                        |   2 +-
 docs/BUILD.md                                      |   4 +-
 docs/DEPLOY.md                                     |   2 +-
 golang1.13/Dockerfile                              |  48 -------
 golang1.13/Makefile                                |  45 -------
 golang1.13/bin/compile                             | 138 ---------------------
 golang1.13/build.gradle                            |  38 ------
 golang1.13/lib/launcher.go                         | 122 ------------------
 golang1.15/Dockerfile                              |  54 --------
 golang1.15/Makefile                                |  44 -------
 golang1.15/bin/compile                             | 138 ---------------------
 golang1.15/build.gradle                            |  38 ------
 golang1.15/lib/launcher.go                         | 122 ------------------
 settings.gradle                                    |   2 -
 .../ActionLoopBasicGo13Tests.scala                 |  31 -----
 .../ActionLoopBasicGo15Tests.scala                 |  31 -----
 .../ActionLoopGo13ContainerTests.scala             |  31 -----
 .../ActionLoopGo15ContainerTests.scala             |  31 -----
 18 files changed, 4 insertions(+), 917 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index f295134..6cad132 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -51,7 +51,7 @@ deploy:
       repo: apache/openwhisk-runtime-go
   - provider: script
     skip_cleanup: true
-    script: "./tools/travis/publish.sh openwhisk 1.13 nightly && ./tools/travis/publish.sh openwhisk 1.15 nightly && ./tools/travis/publish.sh openwhisk 1.16 nightly && ./tools/travis/publish.sh openwhisk 1.17 nightly && ./tools/travis/publish.sh openwhisk 1.18 nightly"
+    script: "./tools/travis/publish.sh openwhisk 1.16 nightly && ./tools/travis/publish.sh openwhisk 1.17 nightly && ./tools/travis/publish.sh openwhisk 1.18 nightly"
     on:
       branch: master
       repo: apache/openwhisk-runtime-go
diff --git a/docs/BUILD.md b/docs/BUILD.md
index bef4bc2..14b5841 100644
--- a/docs/BUILD.md
+++ b/docs/BUILD.md
@@ -43,9 +43,9 @@ To build the docker images, after compiling go proxy:
 
 This will build the images:
 
-* `action-golang-v1.13`: an image supporting Go 1.13 sources (does expect an ack)
-* `action-golang-v1.15`: an image supporting Go 1.15 sources (does expect an ack)
 * `action-golang-v1.16`: an image supporting Go 1.16 sources (does expect an ack)
+* `action-golang-v1.17`: an image supporting Go 1.17 sources (does expect an ack)
+* `action-golang-v1.18`: an image supporting Go 1.18 sources (does expect an ack)
 * `actionloop-base`: the base image, supporting generic executables ans shell script (does not expect an ack)
 
 The `actionloop-base` image can be used for supporting other compiled programming languages as long as they implement a `compile` script and the *action loop* protocol described below. Please check [ENVVARS.md](ENVVARS.md) for configuration options
diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md
index 4f928b8..a784bd0 100644
--- a/docs/DEPLOY.md
+++ b/docs/DEPLOY.md
@@ -19,7 +19,7 @@
 
 # Deployment options
 
-There are a few images provided: the `actionloop-base` and the `action-golang-v1.13`, `action-golang-v1.15` and `action-golang-v1.16` are available. Each image accepts different input in the deployment.
+There are a few images provided: the `actionloop-base` and the `action-golang-v1.16`, `action-golang-v1.17` and `action-golang-v1.18` are available. Each image accepts different input in the deployment.
 
 <a name="actionloop">
 
diff --git a/golang1.13/Dockerfile b/golang1.13/Dockerfile
deleted file mode 100644
index 59f7da7..0000000
--- a/golang1.13/Dockerfile
+++ /dev/null
@@ -1,48 +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.
-#
-FROM golang:1.13.15
-RUN echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" \
-     >>/etc/apt/sources.list &&\
-    echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections &&\
-    apt-get update &&\
-    # Upgrade installed packages to get latest security fixes if the base image does not contain them already.
-    apt-get upgrade -y --no-install-recommends &&\
-    apt-get install -y apt-utils &&\
-    apt-get install -y \
-     curl \
-     jq \
-     git \
-     vim &&\
-    apt-get -y install \
-     librdkafka1=0.11.6-1.1 \
-     librdkafka++1=0.11.6-1.1 &&\
-    apt-get -y install \
-     librdkafka-dev=0.11.6-1.1 &&\
-    # Cleanup apt data, we do not need them later on.
-    apt-get clean && rm -rf /var/lib/apt/lists/* &&\
-    go get -u github.com/go-delve/delve/cmd/dlv &&\
-    mkdir /action
-
-WORKDIR /action
-ADD proxy /bin/proxy
-ADD bin/compile /bin/compile
-ADD lib/launcher.go /lib/launcher.go
-ENV OW_COMPILER=/bin/compile
-ENV OW_LOG_INIT_ERROR=1
-ENV OW_WAIT_FOR_ACK=1
-ENV OW_EXECUTION_ENV=openwhisk/action-golang-v1.13
-ENTRYPOINT [ "/bin/proxy" ]
diff --git a/golang1.13/Makefile b/golang1.13/Makefile
deleted file mode 100644
index 5f86e0a..0000000
--- a/golang1.13/Makefile
+++ /dev/null
@@ -1,45 +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.
-#
-IMG=action-golang-v1.13:latest
-
-build:
-	../gradlew distDocker
-
-localbuild:
-	GOOS=linux GOARCH=amd64 go build -o proxy -a  -ldflags '-extldflags "-static"' ../main/proxy.go
-	docker build -t $(IMG) .
-	docker tag $(IMG) whisk/$(IMG)
-
-push: build
-	docker tag $(IMG) actionloop/$(IMG)
-	docker push actionloop/$(IMG)
-
-clean:
-	docker rmi -f whisk/$(IMG) actionloop/$(IMG)
-
-.PHONY: debug
-debug:
-	docker run -p 8080:8080 -p 8079:8079 \
-	--name go-action --rm -ti --entrypoint=/bin/bash \
-	-e OW_COMPILER=/mnt/bin/compile \
-	-v $(PWD):/mnt whisk/$(IMG)
-
-enter:
-enter:
-	docker exec -ti go-action bash
-
-.PHONY: build clean  debug
diff --git a/golang1.13/bin/compile b/golang1.13/bin/compile
deleted file mode 100755
index 9b1217f..0000000
--- a/golang1.13/bin/compile
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/python -u
-"""Golang 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, os.path, sys, re, shutil, subprocess, traceback, codecs
-from os.path import dirname, exists
-from time import sleep
-
-# write a file creating intermediate directories
-def write_file(file, body, executable=False):
-    try: os.makedirs(dirname(file), mode=0o755)
-    except: pass
-    with open(file, mode="wb") as f:
-        f.write(body)
-    if executable:
-        os.chmod(file, 0o755)
-
-# copy a file eventually replacing a substring
-def copy_replace(src, dst, match=None, replacement=""):
-    with open(src, 'rb') as s:
-        body = s.read()
-        if match:
-            body = body.replace(match, replacement)
-        write_file(dst, body)
-
-
-def sources(launcher, source_dir, main):
-    func = main.capitalize()
-    has_main = None
-
-    # copy the exec to exec.go
-    # also check if it has a main in it
-    src = "%s/exec" % source_dir
-    dst = "%s/exec__.go" % source_dir
-    if os.path.isfile(src):
-        with codecs.open(src, 'r', 'utf-8') as s:
-            with codecs.open(dst, 'w', 'utf-8') as d:
-                body = s.read()
-                has_main = re.match(r".*package\s+main\W.*func\s+main\s*\(\s*\)", body, flags=re.DOTALL)
-                d.write(body)
-
-    # copy the launcher fixing the main
-    if not has_main:
-        dst = "%s/main__.go" % source_dir
-        if os.path.isdir("%s/main" % source_dir):
-            dst = "%s/main/main__.go" % source_dir
-        with codecs.open(dst, 'w', 'utf-8') as d:
-            with codecs.open(launcher, 'r', 'utf-8') as e:
-                code = e.read()
-                code = code.replace("Main", func)
-                d.write(code)
-
-def build(source_dir, target_dir):
-    # compile...
-    source_dir = os.path.abspath(source_dir)
-    parent = dirname(source_dir)
-    target = os.path.abspath("%s/exec" % target_dir)
-    if os.environ.get("__OW_EXECUTION_ENV"):
-      write_file("%s.env" % target, os.environ["__OW_EXECUTION_ENV"])
-
-    env = {
-      "GOROOT": "/usr/local/go",
-      "GOPATH": "/home/go",
-      "PATH": os.environ["PATH"],
-      "GOCACHE": "/tmp",
-      "GO111MODULE": "on"
-    }
-
-    gomod = "%s/go.mod" % source_dir
-    with open(os.devnull, "w") as dn:
-        if exists(gomod):
-            ret = subprocess.call(["go", "mod", "download"], cwd=source_dir, env=env, stderr=dn, stdout=dn)
-            if ret != 0:
-                print("cannot download modules")
-                return
-        else:
-            ret = subprocess.call(["go", "mod", "init", "exec"], cwd=source_dir, env=env, stdout=dn, stderr=dn)
-            if ret != 0:
-                print("cannot init modules")
-                return
-
-    ldflags = "-s -w"
-    gobuild = ["go", "build", "-o", target, "-ldflags", ldflags]
-    if os.environ.get("__OW_EXECUTION_ENV"):
-        ldflags += " -X main.OwExecutionEnv=%s" % os.environ["__OW_EXECUTION_ENV"]
-    ret = subprocess.call(gobuild, cwd=source_dir, env=env)
-    if ret != 0:
-        print("failed", " ".join(gobuild), "\nin", source_dir, "\nenv", env)
-
-def debug(source_dir, target_dir, port):
-    source_dir = os.path.abspath(source_dir)
-    target = os.path.abspath("%s/exec" % target_dir)
-    if os.environ.get("__OW_EXECUTION_ENV"):
-      write_file("%s/exec.env" % source_dir, os.environ["__OW_EXECUTION_ENV"])
-    shutil.rmtree(target_dir)
-    shutil.move(source_dir, target_dir)
-    write_file(target, """#!/bin/bash
-cd "$(dirname $0)"
-export GOCACHE=/tmp
-export PATH=%s
-exec script -q  -c '/go/bin/dlv debug --headless --listen=127.0.0.1:%s --continue --accept-multiclient --log-dest /tmp/delve.log'
-""" % (os.environ["PATH"], port) , True)   
- 
-def main(argv):
-    if len(argv) < 4:
-        print("usage: <main-file> <source-dir> <target-dir>")
-        sys.exit(1)
-
-    main = argv[1]
-    source_dir = argv[2]
-    target_dir = argv[3]
-    launcher = dirname(dirname(argv[0]))+"/lib/launcher.go"
-    sources(launcher, source_dir, main)
-
-    # if the debug port is present and not empty build with debug
-    if os.environ.get("__OW_DEBUG_PORT"):
-        debug(source_dir, target_dir, os.environ["__OW_DEBUG_PORT"])
-    else:
-        build(source_dir, target_dir)
-
-if __name__ == '__main__':
-    main(sys.argv)
diff --git a/golang1.13/build.gradle b/golang1.13/build.gradle
deleted file mode 100644
index 5323ec2..0000000
--- a/golang1.13/build.gradle
+++ /dev/null
@@ -1,38 +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-golang-v1.13'
-apply from: '../gradle/docker.gradle'
-
-distDocker.dependsOn 'staticBuildProxy'
-distDocker.finalizedBy('cleanup')
-
-task staticBuildProxy(type: Exec) {
-	environment CGO_ENABLED: "0"
-	environment GOOS: "linux"
-	environment GOARCH: "amd64"
-    environment GO111MODULE: "on"
-
-	commandLine 'go', 'build',
-		'-o',  'proxy', '-a',
-		'-ldflags', '-extldflags "-static"',
-		'../main/proxy.go'
-}
-
-task cleanup(type: Delete) {
-    delete 'proxy'
-}
diff --git a/golang1.13/lib/launcher.go b/golang1.13/lib/launcher.go
deleted file mode 100644
index 3f95c15..0000000
--- a/golang1.13/lib/launcher.go
+++ /dev/null
@@ -1,122 +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 main
-
-import (
-	"bufio"
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"io"
-	"log"
-	"os"
-	"strings"
-)
-
-// OwExecutionEnv is the execution environment set at compile time
-var OwExecutionEnv = ""
-
-func main() {
-	// check if the execution environment is correct
-	if OwExecutionEnv != "" && OwExecutionEnv != os.Getenv("__OW_EXECUTION_ENV") {
-		fmt.Println("Execution Environment Mismatch")
-		fmt.Println("Expected: ", OwExecutionEnv)
-		fmt.Println("Actual: ", os.Getenv("__OW_EXECUTION_ENV"))
-		os.Exit(1)
-	}
-
-	// debugging
-	var debug = os.Getenv("OW_DEBUG") != ""
-	if debug {
-		f, err := os.OpenFile("/tmp/action.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
-		if err == nil {
-			log.SetOutput(f)
-		}
-		log.Printf("Environment: %v", os.Environ())
-	}
-
-	// assign the main function
-	type Action func(event map[string]interface{}) map[string]interface{}
-	var action Action
-	action = Main
-
-	// input
-	out := os.NewFile(3, "pipe")
-	defer out.Close()
-	reader := bufio.NewReader(os.Stdin)
-
-	// acknowledgement of started action
-	fmt.Fprintf(out, `{ "ok": true}%s`, "\n")
-	if debug {
-		log.Println("action started")
-	}
-
-	// read-eval-print loop
-	for {
-		// read one line
-		inbuf, err := reader.ReadBytes('\n')
-		if err != nil {
-			if err != io.EOF {
-				log.Println(err)
-			}
-			break
-		}
-		if debug {
-			log.Printf(">>>'%s'>>>", inbuf)
-		}
-		// parse one line
-		var input map[string]interface{}
-		err = json.Unmarshal(inbuf, &input)
-		if err != nil {
-			log.Println(err.Error())
-			fmt.Fprintf(out, "{ error: %q}\n", err.Error())
-			continue
-		}
-		if debug {
-			log.Printf("%v\n", input)
-		}
-		// set environment variables
-		for k, v := range input {
-			if k == "value" {
-				continue
-			}
-			if s, ok := v.(string); ok {
-				os.Setenv("__OW_"+strings.ToUpper(k), s)
-			}
-		}
-		// get payload if not empty
-		var payload map[string]interface{}
-		if value, ok := input["value"].(map[string]interface{}); ok {
-			payload = value
-		}
-		// process the request
-		result := action(payload)
-		// encode the answer
-		output, err := json.Marshal(&result)
-		if err != nil {
-			log.Println(err.Error())
-			fmt.Fprintf(out, "{ error: %q}\n", err.Error())
-			continue
-		}
-		output = bytes.Replace(output, []byte("\n"), []byte(""), -1)
-		if debug {
-			log.Printf("<<<'%s'<<<", output)
-		}
-		fmt.Fprintf(out, "%s\n", output)
-	}
-}
diff --git a/golang1.15/Dockerfile b/golang1.15/Dockerfile
deleted file mode 100644
index e8de9c0..0000000
--- a/golang1.15/Dockerfile
+++ /dev/null
@@ -1,54 +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.
-#
-
-# Do not fix the patch level for golang:1.15 to automatically get security fixes.
-FROM golang:1.15
-
-ENV GO111MODULE=on
-
-RUN echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" \
-     >>/etc/apt/sources.list &&\
-    echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections &&\
-    apt-get update &&\
-    # Upgrade installed packages to get latest security fixes if the base image does not contain them already.
-    apt-get upgrade -y --no-install-recommends &&\
-    apt-get install -y apt-utils &&\
-    apt-get install -y \
-     curl \
-     jq \
-     git \
-     zip \
-     vim &&\
-    apt-get -y install \
-     librdkafka1=0.11.6-1.1 \
-     librdkafka++1=0.11.6-1.1 &&\
-    apt-get -y install \
-     librdkafka-dev=0.11.6-1.1 &&\
-    # Cleanup apt data, we do not need them later on.
-    apt-get clean && rm -rf /var/lib/apt/lists/* &&\
-    go get -u github.com/go-delve/delve/cmd/dlv@v1.8.1 &&\
-    mkdir /action
-
-WORKDIR /action
-ADD proxy /bin/proxy
-ADD bin/compile /bin/compile
-ADD lib/launcher.go /lib/launcher.go
-ENV OW_COMPILER=/bin/compile
-ENV OW_LOG_INIT_ERROR=1
-ENV OW_WAIT_FOR_ACK=1
-ENV OW_EXECUTION_ENV=openwhisk/action-golang-v1.15
-ENTRYPOINT [ "/bin/proxy" ]
diff --git a/golang1.15/Makefile b/golang1.15/Makefile
deleted file mode 100644
index 989ed11..0000000
--- a/golang1.15/Makefile
+++ /dev/null
@@ -1,44 +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.
-#
-IMG=action-golang-v1.15
-
-build:
-	../gradlew distDocker
-
-localbuild:
-	GOOS=linux GOARCH=amd64 go build -o proxy -a  -ldflags '-extldflags "-static"' ../main/proxy.go
-	docker build -t $(IMG) .
-	docker tag $(IMG) whisk/$(IMG)
-
-push: build
-	docker tag $(IMG) actionloop/$(IMG)
-	docker push actionloop/$(IMG):nightly
-
-clean:
-	docker rmi -f whisk/$(IMG) actionloop/$(IMG)
-
-debug: build
-	docker run -p 8080:8080 \
-	--name go-action --rm -ti --entrypoint=/bin/bash \
-	-e OW_COMPILER=/mnt/bin/compile \
-	-v $(PWD):/mnt whisk/$(IMG)
-
-enter:
-	docker exec -ti go-action bash
-
-
-.PHONY: build push clean debug enter
diff --git a/golang1.15/bin/compile b/golang1.15/bin/compile
deleted file mode 100755
index 9b1217f..0000000
--- a/golang1.15/bin/compile
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/python -u
-"""Golang 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, os.path, sys, re, shutil, subprocess, traceback, codecs
-from os.path import dirname, exists
-from time import sleep
-
-# write a file creating intermediate directories
-def write_file(file, body, executable=False):
-    try: os.makedirs(dirname(file), mode=0o755)
-    except: pass
-    with open(file, mode="wb") as f:
-        f.write(body)
-    if executable:
-        os.chmod(file, 0o755)
-
-# copy a file eventually replacing a substring
-def copy_replace(src, dst, match=None, replacement=""):
-    with open(src, 'rb') as s:
-        body = s.read()
-        if match:
-            body = body.replace(match, replacement)
-        write_file(dst, body)
-
-
-def sources(launcher, source_dir, main):
-    func = main.capitalize()
-    has_main = None
-
-    # copy the exec to exec.go
-    # also check if it has a main in it
-    src = "%s/exec" % source_dir
-    dst = "%s/exec__.go" % source_dir
-    if os.path.isfile(src):
-        with codecs.open(src, 'r', 'utf-8') as s:
-            with codecs.open(dst, 'w', 'utf-8') as d:
-                body = s.read()
-                has_main = re.match(r".*package\s+main\W.*func\s+main\s*\(\s*\)", body, flags=re.DOTALL)
-                d.write(body)
-
-    # copy the launcher fixing the main
-    if not has_main:
-        dst = "%s/main__.go" % source_dir
-        if os.path.isdir("%s/main" % source_dir):
-            dst = "%s/main/main__.go" % source_dir
-        with codecs.open(dst, 'w', 'utf-8') as d:
-            with codecs.open(launcher, 'r', 'utf-8') as e:
-                code = e.read()
-                code = code.replace("Main", func)
-                d.write(code)
-
-def build(source_dir, target_dir):
-    # compile...
-    source_dir = os.path.abspath(source_dir)
-    parent = dirname(source_dir)
-    target = os.path.abspath("%s/exec" % target_dir)
-    if os.environ.get("__OW_EXECUTION_ENV"):
-      write_file("%s.env" % target, os.environ["__OW_EXECUTION_ENV"])
-
-    env = {
-      "GOROOT": "/usr/local/go",
-      "GOPATH": "/home/go",
-      "PATH": os.environ["PATH"],
-      "GOCACHE": "/tmp",
-      "GO111MODULE": "on"
-    }
-
-    gomod = "%s/go.mod" % source_dir
-    with open(os.devnull, "w") as dn:
-        if exists(gomod):
-            ret = subprocess.call(["go", "mod", "download"], cwd=source_dir, env=env, stderr=dn, stdout=dn)
-            if ret != 0:
-                print("cannot download modules")
-                return
-        else:
-            ret = subprocess.call(["go", "mod", "init", "exec"], cwd=source_dir, env=env, stdout=dn, stderr=dn)
-            if ret != 0:
-                print("cannot init modules")
-                return
-
-    ldflags = "-s -w"
-    gobuild = ["go", "build", "-o", target, "-ldflags", ldflags]
-    if os.environ.get("__OW_EXECUTION_ENV"):
-        ldflags += " -X main.OwExecutionEnv=%s" % os.environ["__OW_EXECUTION_ENV"]
-    ret = subprocess.call(gobuild, cwd=source_dir, env=env)
-    if ret != 0:
-        print("failed", " ".join(gobuild), "\nin", source_dir, "\nenv", env)
-
-def debug(source_dir, target_dir, port):
-    source_dir = os.path.abspath(source_dir)
-    target = os.path.abspath("%s/exec" % target_dir)
-    if os.environ.get("__OW_EXECUTION_ENV"):
-      write_file("%s/exec.env" % source_dir, os.environ["__OW_EXECUTION_ENV"])
-    shutil.rmtree(target_dir)
-    shutil.move(source_dir, target_dir)
-    write_file(target, """#!/bin/bash
-cd "$(dirname $0)"
-export GOCACHE=/tmp
-export PATH=%s
-exec script -q  -c '/go/bin/dlv debug --headless --listen=127.0.0.1:%s --continue --accept-multiclient --log-dest /tmp/delve.log'
-""" % (os.environ["PATH"], port) , True)   
- 
-def main(argv):
-    if len(argv) < 4:
-        print("usage: <main-file> <source-dir> <target-dir>")
-        sys.exit(1)
-
-    main = argv[1]
-    source_dir = argv[2]
-    target_dir = argv[3]
-    launcher = dirname(dirname(argv[0]))+"/lib/launcher.go"
-    sources(launcher, source_dir, main)
-
-    # if the debug port is present and not empty build with debug
-    if os.environ.get("__OW_DEBUG_PORT"):
-        debug(source_dir, target_dir, os.environ["__OW_DEBUG_PORT"])
-    else:
-        build(source_dir, target_dir)
-
-if __name__ == '__main__':
-    main(sys.argv)
diff --git a/golang1.15/build.gradle b/golang1.15/build.gradle
deleted file mode 100644
index 67da25b..0000000
--- a/golang1.15/build.gradle
+++ /dev/null
@@ -1,38 +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-golang-v1.15'
-apply from: '../gradle/docker.gradle'
-
-distDocker.dependsOn 'staticBuildProxy'
-distDocker.finalizedBy('cleanup')
-
-task staticBuildProxy(type: Exec) {
-	environment CGO_ENABLED: "0"
-	environment GOOS: "linux"
-	environment GOARCH: "amd64"
-    environment GO111MODULE: "on"
-
-	commandLine 'go', 'build',
-		'-o',  'proxy', '-a',
-		'-ldflags', '-extldflags "-static"',
-		'../main/proxy.go'
-}
-
-task cleanup(type: Delete) {
-    delete 'proxy'
-}
diff --git a/golang1.15/lib/launcher.go b/golang1.15/lib/launcher.go
deleted file mode 100644
index 3f95c15..0000000
--- a/golang1.15/lib/launcher.go
+++ /dev/null
@@ -1,122 +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 main
-
-import (
-	"bufio"
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"io"
-	"log"
-	"os"
-	"strings"
-)
-
-// OwExecutionEnv is the execution environment set at compile time
-var OwExecutionEnv = ""
-
-func main() {
-	// check if the execution environment is correct
-	if OwExecutionEnv != "" && OwExecutionEnv != os.Getenv("__OW_EXECUTION_ENV") {
-		fmt.Println("Execution Environment Mismatch")
-		fmt.Println("Expected: ", OwExecutionEnv)
-		fmt.Println("Actual: ", os.Getenv("__OW_EXECUTION_ENV"))
-		os.Exit(1)
-	}
-
-	// debugging
-	var debug = os.Getenv("OW_DEBUG") != ""
-	if debug {
-		f, err := os.OpenFile("/tmp/action.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
-		if err == nil {
-			log.SetOutput(f)
-		}
-		log.Printf("Environment: %v", os.Environ())
-	}
-
-	// assign the main function
-	type Action func(event map[string]interface{}) map[string]interface{}
-	var action Action
-	action = Main
-
-	// input
-	out := os.NewFile(3, "pipe")
-	defer out.Close()
-	reader := bufio.NewReader(os.Stdin)
-
-	// acknowledgement of started action
-	fmt.Fprintf(out, `{ "ok": true}%s`, "\n")
-	if debug {
-		log.Println("action started")
-	}
-
-	// read-eval-print loop
-	for {
-		// read one line
-		inbuf, err := reader.ReadBytes('\n')
-		if err != nil {
-			if err != io.EOF {
-				log.Println(err)
-			}
-			break
-		}
-		if debug {
-			log.Printf(">>>'%s'>>>", inbuf)
-		}
-		// parse one line
-		var input map[string]interface{}
-		err = json.Unmarshal(inbuf, &input)
-		if err != nil {
-			log.Println(err.Error())
-			fmt.Fprintf(out, "{ error: %q}\n", err.Error())
-			continue
-		}
-		if debug {
-			log.Printf("%v\n", input)
-		}
-		// set environment variables
-		for k, v := range input {
-			if k == "value" {
-				continue
-			}
-			if s, ok := v.(string); ok {
-				os.Setenv("__OW_"+strings.ToUpper(k), s)
-			}
-		}
-		// get payload if not empty
-		var payload map[string]interface{}
-		if value, ok := input["value"].(map[string]interface{}); ok {
-			payload = value
-		}
-		// process the request
-		result := action(payload)
-		// encode the answer
-		output, err := json.Marshal(&result)
-		if err != nil {
-			log.Println(err.Error())
-			fmt.Fprintf(out, "{ error: %q}\n", err.Error())
-			continue
-		}
-		output = bytes.Replace(output, []byte("\n"), []byte(""), -1)
-		if debug {
-			log.Printf("<<<'%s'<<<", output)
-		}
-		fmt.Fprintf(out, "%s\n", output)
-	}
-}
diff --git a/settings.gradle b/settings.gradle
index 4dfbe80..810aef6 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -18,8 +18,6 @@
 include 'tests'
 
 include 'actionloop'
-include 'golang1.13'
-include 'golang1.15'
 include 'golang1.16'
 include 'golang1.17'
 include 'golang1.18'
diff --git a/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo13Tests.scala b/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo13Tests.scala
deleted file mode 100644
index 19d461f..0000000
--- a/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo13Tests.scala
+++ /dev/null
@@ -1,31 +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 common.WskActorSystem
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class ActionLoopBasicGo13Tests
-    extends ActionLoopBasicGoTests
-    with WskActorSystem {
-
-  override lazy val goCompiler = "action-golang-v1.13"
-  override lazy val image = goCompiler
-  override lazy val requireAck = true
-}
diff --git a/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo15Tests.scala b/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo15Tests.scala
deleted file mode 100644
index 738c76f..0000000
--- a/tests/src/test/scala/runtime/actionContainers/ActionLoopBasicGo15Tests.scala
+++ /dev/null
@@ -1,31 +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 common.WskActorSystem
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class ActionLoopBasicGo15Tests
-    extends ActionLoopBasicGoTests
-    with WskActorSystem {
-
-  override lazy val goCompiler = "action-golang-v1.15"
-  override lazy val image = goCompiler
-  override lazy val requireAck = true
-}
diff --git a/tests/src/test/scala/runtime/actionContainers/ActionLoopGo13ContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/ActionLoopGo13ContainerTests.scala
deleted file mode 100644
index ec4aae5..0000000
--- a/tests/src/test/scala/runtime/actionContainers/ActionLoopGo13ContainerTests.scala
+++ /dev/null
@@ -1,31 +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 common.WskActorSystem
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-@RunWith(classOf[JUnitRunner])
-class ActionLoopGo13ContainerTests
-    extends ActionLoopGoContainerTests
-    with WskActorSystem {
-
-  override lazy val goCompiler = "action-golang-v1.13"
-  override lazy val image = goCompiler
-
-}
diff --git a/tests/src/test/scala/runtime/actionContainers/ActionLoopGo15ContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/ActionLoopGo15ContainerTests.scala
deleted file mode 100644
index b85ca33..0000000
--- a/tests/src/test/scala/runtime/actionContainers/ActionLoopGo15ContainerTests.scala
+++ /dev/null
@@ -1,31 +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 common.WskActorSystem
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-@RunWith(classOf[JUnitRunner])
-class ActionLoopGo15ContainerTests
-    extends ActionLoopGoContainerTests
-    with WskActorSystem {
-
-  override lazy val goCompiler = "action-golang-v1.15"
-  override lazy val image = goCompiler
-
-}