mage: Init packages once

`go list ./...` fails when run in parallel on Windows. This also applies to running `go test ./...` and `go list/...` so we serialize tests.
This commit is contained in:
Bjørn Erik Pedersen 2018-08-30 12:28:29 +02:00
parent 293e12355d
commit ea8ef573c6

View file

@ -12,6 +12,7 @@ import (
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"sync"
"time" "time"
"github.com/magefile/mage/mg" "github.com/magefile/mage/mg"
@ -98,7 +99,11 @@ func Check() {
fmt.Printf("Skip Check on %s\n", runtime.Version()) fmt.Printf("Skip Check on %s\n", runtime.Version())
return return
} }
mg.Deps(Test386, Fmt, Vet)
mg.Deps(Test386)
mg.Deps(Fmt, Vet)
// don't run two tests in parallel, they saturate the CPUs anyway, and running two // don't run two tests in parallel, they saturate the CPUs anyway, and running two
// causes memory issues in CI. // causes memory issues in CI.
mg.Deps(TestRace) mg.Deps(TestRace)
@ -161,18 +166,26 @@ func Fmt() error {
return nil return nil
} }
var pkgPrefixLen = len("github.com/gohugoio/hugo") var (
pkgPrefixLen = len("github.com/gohugoio/hugo")
pkgs []string
pkgsInit sync.Once
)
func hugoPackages() ([]string, error) { func hugoPackages() ([]string, error) {
s, err := sh.Output(goexe, "list", "./...") var err error
pkgsInit.Do(func() {
var s string
s, err = sh.Output(goexe, "list", "./...")
if err != nil { if err != nil {
return nil, err return
} }
pkgs := strings.Split(s, "\n") pkgs = strings.Split(s, "\n")
for i := range pkgs { for i := range pkgs {
pkgs[i] = "." + pkgs[i][pkgPrefixLen:] pkgs[i] = "." + pkgs[i][pkgPrefixLen:]
} }
return pkgs, nil })
return pkgs, err
} }
// Run golint linter // Run golint linter