From ea8ef573c6f869de95fdf4b19765d34026de6471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 30 Aug 2018 12:28:29 +0200 Subject: [PATCH] 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. --- magefile.go | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/magefile.go b/magefile.go index 91c79b1ddc0..b00b3bbe41a 100644 --- a/magefile.go +++ b/magefile.go @@ -12,6 +12,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" "time" "github.com/magefile/mage/mg" @@ -98,7 +99,11 @@ func Check() { fmt.Printf("Skip Check on %s\n", runtime.Version()) 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 // causes memory issues in CI. mg.Deps(TestRace) @@ -161,18 +166,26 @@ func Fmt() error { 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) { - s, err := sh.Output(goexe, "list", "./...") - if err != nil { - return nil, err - } - pkgs := strings.Split(s, "\n") - for i := range pkgs { - pkgs[i] = "." + pkgs[i][pkgPrefixLen:] - } - return pkgs, nil + var err error + pkgsInit.Do(func() { + var s string + s, err = sh.Output(goexe, "list", "./...") + if err != nil { + return + } + pkgs = strings.Split(s, "\n") + for i := range pkgs { + pkgs[i] = "." + pkgs[i][pkgPrefixLen:] + } + }) + return pkgs, err } // Run golint linter