(v0.1.1) Automated packaging of release by Packagr
This commit is contained in:
+84
@@ -0,0 +1,84 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
stderrors "errors"
|
||||
"fmt"
|
||||
"github.com/kvz/logstreamer"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
)
|
||||
|
||||
//http://craigwickesser.com/2015/02/golang-cmd-with-custom-environment/
|
||||
//http://www.ryanday.net/2012/10/01/installing-go-and-gopath/
|
||||
//
|
||||
|
||||
func BashCmdExec(cmd string, workingDir string, environ []string, logPrefix string) error {
|
||||
return CmdExec("sh", []string{"-c", cmd}, workingDir, environ, logPrefix)
|
||||
}
|
||||
|
||||
func CmdExec(cmdName string, cmdArgs []string, workingDir string, environ []string, logPrefix string) error {
|
||||
if logPrefix == "" {
|
||||
logPrefix = " >> "
|
||||
} else {
|
||||
logPrefix = logPrefix + " | "
|
||||
}
|
||||
|
||||
// Create a logger (your app probably already has one)
|
||||
logger := log.New(os.Stdout, logPrefix, log.Ldate|log.Ltime)
|
||||
|
||||
// Setup a streamer that we'll pipe cmd.Stdout to
|
||||
logStreamerOut := logstreamer.NewLogstreamer(logger, "stdout", false)
|
||||
defer logStreamerOut.Close()
|
||||
// Setup a streamer that we'll pipe cmd.Stderr to.
|
||||
// We want to record/buffer anything that's written to this (3rd argument true)
|
||||
logStreamerErr := logstreamer.NewLogstreamer(logger, "stderr", true)
|
||||
defer logStreamerErr.Close()
|
||||
|
||||
cmd := exec.Command(cmdName, cmdArgs...)
|
||||
cmd.Stdout = logStreamerOut
|
||||
cmd.Stderr = logStreamerErr
|
||||
if environ != nil {
|
||||
cmd.Env = environ
|
||||
}
|
||||
if workingDir != "" && path.IsAbs(workingDir) {
|
||||
cmd.Dir = workingDir
|
||||
} else if workingDir != "" {
|
||||
return stderrors.New("Working Directory must be an absolute path")
|
||||
}
|
||||
//cmdReader, err := cmd.StdoutPipe()
|
||||
//if err != nil {
|
||||
// fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
|
||||
// return err
|
||||
//}
|
||||
//
|
||||
//done := make(chan struct{})
|
||||
//
|
||||
//scanner := bufio.NewScanner(cmdReader)
|
||||
//go func() {
|
||||
// for scanner.Scan() {
|
||||
// fmt.Printf("%s%s\n", logPrefix, scanner.Text())
|
||||
// }
|
||||
// done <- struct{}{}
|
||||
//
|
||||
//}()
|
||||
|
||||
// Reset any error we recorded
|
||||
logStreamerErr.FlushRecord()
|
||||
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
|
||||
return err
|
||||
}
|
||||
|
||||
//<-done
|
||||
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user