ref: c9c19d794537cf76ff281788c3d6cf5f2beac54d
parent: 1d52bfbb4792f86b85ae5bca7af5b75bb5c69289
author: Nate Finch <nate.finch@gmail.com>
date: Sat Oct 21 07:37:00 EDT 2017
Fix error handling in mage build * print gofmt errors * don't error on lint failures * explanatory comments and fix an error text
--- a/magefile.go
+++ b/magefile.go
@@ -5,6 +5,7 @@
import (
"bytes"
"errors"
+ "fmt"
"io/ioutil"
"os"
"path/filepath"
@@ -124,6 +125,7 @@
return err
}
failed := false
+ first := true
for _, pkg := range pkgs {files, err := filepath.Glob(filepath.Join(pkg, "*.go"))
if err != nil {@@ -130,9 +132,22 @@
return nil
}
for _, f := range files {- if err := sh.Run("gofmt", "-l", f); err != nil {- failed = false
+ // gofmt doesn't exit with non-zero when it finds unformatted code
+ // so we have to explicitly look for output, and if we find any, we
+ // should fail this target.
+ s, err := sh.Output("gofmt", "-l", f)+ if err != nil {+ fmt.Printf("ERROR: running gofmt on %q: %v\n", f, err)+ failed = true
}
+ if s != "" {+ if first {+ fmt.Println("The following files are not gofmt'ed:")+ first = false
+ }
+ failed = true
+ fmt.Println(s)
+ }
}
}
if failed {@@ -164,12 +179,15 @@
}
failed := false
for _, pkg := range pkgs {- if _, err := sh.Exec(nil, os.Stderr, os.Stderr, "golint", "-set_exit_status", pkg); err != nil {+ // We don't actually want to fail this target if we find golint errors,
+ // so we don't pass -set_exit_status, but we still print out any failures.
+ if _, err := sh.Exec(nil, os.Stderr, nil, "golint", pkg); err != nil {+ fmt.Printf("ERROR: running go lint on %q: %v\n", pkg, err)failed = true
}
}
if failed {- return errors.New("golint errors!")+ return errors.New("errors running golint")}
return nil
}
@@ -178,7 +196,7 @@
func Vet() error {mg.Deps(govendor)
if err := sh.Run("govendor", "vet", "+local"); err != nil {- return errors.New("go vet errors!")+ return fmt.Errorf("error running govendor: %v", err)}
return nil
}
--
⑨