forked from toolshed/abra
.gitea
cli
app
catalogue
formatter
internal
command.go
common.go
copy.go
deploy.go
errors.go
errors_test.go
new.go
recipe.go
record.go
server.go
validate.go
recipe
record
server
autocomplete.go
cli.go
upgrade.go
cmd
pkg
scripts
tests
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
Makefile
README.md
go.mod
go.sum
renovate.json
40 lines
556 B
Go
40 lines
556 B
Go
package internal
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os/exec"
|
|
)
|
|
|
|
// RunCmd runs a shell command and streams stdout/stderr in real-time.
|
|
func RunCmd(cmd *exec.Cmd) error {
|
|
r, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
cmd.Stderr = cmd.Stdout
|
|
done := make(chan struct{})
|
|
scanner := bufio.NewScanner(r)
|
|
|
|
go func() {
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
fmt.Println(line)
|
|
}
|
|
done <- struct{}{}
|
|
}()
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
return err
|
|
}
|
|
|
|
<-done
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|