...
1 package main
2
3 import (
4 "bytes"
5 "fmt"
6 "os"
7 "os/exec"
8 )
9
10 func CheckPackagesInstalled(pkgs []string) {
11 ok := true
12
13 for _, pkg := range pkgs {
14 if !IsCommandAvailable(pkg) {
15 fmt.Fprintf(os.Stderr, "%q: executable file not found in PATH", pkg)
16 }
17 }
18
19 if !ok {
20 os.Exit(1)
21 }
22 }
23
24 func IsCommandAvailable(name string) bool {
25 _, err := exec.LookPath(name)
26 if err != nil {
27 return false
28 }
29 return true
30 }
31
32 func Exec(command string, args []string, msg string) (string, error) {
33 var stdout, stderr bytes.Buffer
34
35 cmd := exec.Command(command, args...)
36 cmd.Stdout = &stdout
37 cmd.Stderr = &stderr
38
39 if msg != "" {
40 fmt.Printf(msg)
41 }
42
43 fmt.Printf("running: " + cmd.String() + "\n")
44
45 if err := cmd.Run(); err != nil {
46 return "", ConcatenateError(err, stderr.String())
47 }
48
49 return stdout.String(), nil
50 }
51
52 func ConcatenateError(err error, stderr string) error {
53 if len(stderr) == 0 {
54 return err
55 }
56 return fmt.Errorf("%w - %s", err, stderr)
57 }
58
View as plain text