44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/logrusorgru/aurora"
|
|
)
|
|
|
|
// goVet executes "go vet" recursively for each module in the git repo. As of
|
|
// go 1.13, "go vet ./..." is required to recurse but does not straddle
|
|
// module boundaries. It must be run in a valid package directory. It is
|
|
// significantly faster than running individual "go vet ." in each dir.
|
|
func goVet() error {
|
|
return filepath.Walk(".", goVetW)
|
|
}
|
|
|
|
func goVetW(path string, info os.FileInfo, err error) error {
|
|
switch {
|
|
case err != nil:
|
|
return err
|
|
case info.Mode().IsDir() && strings.HasPrefix(info.Name(), "."):
|
|
return filepath.SkipDir
|
|
case info.Mode().IsRegular() && info.Name() == "go.mod":
|
|
dir := filepath.Dir(path)
|
|
Info(" running %q in %s", aurora.Blue("go vet"), aurora.Green(dir))
|
|
cmd := exec.Command("go", "vet", "./...")
|
|
cmd.Dir = path
|
|
op, err := cmd.CombinedOutput()
|
|
switch {
|
|
case len(op) > 0 && err != nil:
|
|
return fmt.Errorf("go vet failed: %s\n%s\n", aurora.Red(err), op)
|
|
case len(op) > 0:
|
|
return fmt.Errorf("%s:\n%s\n", aurora.Red("go vet reports"), op)
|
|
case err != nil:
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|