From d19d8998d8e63da2abcd978dd167440be41de4cf Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" Date: Tue, 24 Dec 2019 10:30:24 +0000 Subject: [PATCH] Fix vendoring for go-execute Signed-off-by: Alex Ellis (OpenFaaS Ltd) --- Gopkg.lock | 10 +- README.md | 6 +- .../github.com/alexellis/go-execute/LICENSE | 21 ++++ .../alexellis/go-execute/pkg/v1/exec.go | 117 ++++++++++++++++++ 4 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 vendor/github.com/alexellis/go-execute/LICENSE create mode 100644 vendor/github.com/alexellis/go-execute/pkg/v1/exec.go diff --git a/Gopkg.lock b/Gopkg.lock index fd7201d..56af5cf 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -37,6 +37,14 @@ pruneopts = "UT" revision = "9e921883ac929bbe515b39793ece99ce3a9d7706" +[[projects]] + digest = "1:74860eb071d52337d67e9ffd6893b29affebd026505aa917ec23131576a91a77" + name = "github.com/alexellis/go-execute" + packages = ["pkg/v1"] + pruneopts = "UT" + revision = "961405ea754427780f2151adff607fa740d377f7" + version = "0.3.0" + [[projects]] digest = "1:386ca0ac781cc1b630b3ed21725759770174140164b3faf3810e6ed6366a970b" name = "github.com/containerd/containerd" @@ -440,7 +448,7 @@ analyzer-name = "dep" analyzer-version = 1 input-imports = [ - "github.com/alexellis/go-execute", + "github.com/alexellis/go-execute/pkg/v1", "github.com/containerd/containerd", "github.com/containerd/containerd/cio", "github.com/containerd/containerd/containers", diff --git a/README.md b/README.md index 12837fd..d323b35 100644 --- a/README.md +++ b/README.md @@ -67,17 +67,17 @@ Or get from binaries: ```sh # For x86_64 -sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.0/faasd" \ +sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.1/faasd" \ -o "/usr/local/bin/faasd" \ && sudo chmod a+x "/usr/local/bin/faasd" # armhf -sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.0/faasd-armhf" \ +sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.1/faasd-armhf" \ -o "/usr/local/bin/faasd" \ && sudo chmod a+x "/usr/local/bin/faasd" # arm64 -sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.0/faasd-arm64" \ +sudo curl -fSLs "https://github.com/alexellis/faasd/releases/download/0.2.1/faasd-arm64" \ -o "/usr/local/bin/faasd" \ && sudo chmod a+x "/usr/local/bin/faasd" ``` diff --git a/vendor/github.com/alexellis/go-execute/LICENSE b/vendor/github.com/alexellis/go-execute/LICENSE new file mode 100644 index 0000000..4c5e6af --- /dev/null +++ b/vendor/github.com/alexellis/go-execute/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Inlets + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/alexellis/go-execute/pkg/v1/exec.go b/vendor/github.com/alexellis/go-execute/pkg/v1/exec.go new file mode 100644 index 0000000..0f4242a --- /dev/null +++ b/vendor/github.com/alexellis/go-execute/pkg/v1/exec.go @@ -0,0 +1,117 @@ +package execute + +import ( + "bytes" + "fmt" + "io" + "os" + "os/exec" + "strings" +) + +type ExecTask struct { + Command string + Args []string + Shell bool + Env []string + Cwd string + + // StreamStdio prints stdout and stderr directly to os.Stdout/err as + // the command runs. + StreamStdio bool + + // PrintCommand prints the command before executing + PrintCommand bool +} + +type ExecResult struct { + Stdout string + Stderr string + ExitCode int +} + +func (et ExecTask) Execute() (ExecResult, error) { + argsSt := "" + if len(et.Args) > 0 { + argsSt = strings.Join(et.Args, " ") + } + + if et.PrintCommand { + fmt.Println("exec: ", et.Command, argsSt) + } + + var cmd *exec.Cmd + + if et.Shell { + var args []string + if len(et.Args) == 0 { + startArgs := strings.Split(et.Command, " ") + script := strings.Join(startArgs, " ") + args = append([]string{"-c"}, fmt.Sprintf("%s", script)) + + } else { + script := strings.Join(et.Args, " ") + args = append([]string{"-c"}, fmt.Sprintf("%s %s", et.Command, script)) + + } + + cmd = exec.Command("/bin/bash", args...) + } else { + if strings.Index(et.Command, " ") > 0 { + parts := strings.Split(et.Command, " ") + command := parts[0] + args := parts[1:] + cmd = exec.Command(command, args...) + + } else { + cmd = exec.Command(et.Command, et.Args...) + } + } + + cmd.Dir = et.Cwd + + if len(et.Env) > 0 { + cmd.Env = os.Environ() + for _, env := range et.Env { + cmd.Env = append(cmd.Env, env) + } + } + + stdoutBuff := bytes.Buffer{} + stderrBuff := bytes.Buffer{} + + var stdoutWriters io.Writer + var stderrWriters io.Writer + + if et.StreamStdio { + stdoutWriters = io.MultiWriter(os.Stdout, &stdoutBuff) + stderrWriters = io.MultiWriter(os.Stderr, &stderrBuff) + } else { + stdoutWriters = &stdoutBuff + stderrWriters = &stderrBuff + } + + cmd.Stdout = stdoutWriters + cmd.Stderr = stderrWriters + + startErr := cmd.Start() + + if startErr != nil { + return ExecResult{}, startErr + } + + exitCode := 0 + execErr := cmd.Wait() + if execErr != nil { + if exitError, ok := execErr.(*exec.ExitError); ok { + + exitCode = exitError.ExitCode() + } + } + + return ExecResult{ + Stdout: string(stdoutBuff.Bytes()), + Stderr: string(stderrBuff.Bytes()), + ExitCode: exitCode, + }, nil +}