From 34d2595d5b6fcb2833b75fc911eeba8d900e88ab Mon Sep 17 00:00:00 2001 From: gedi Date: Mon, 12 Nov 2018 11:46:11 +0200 Subject: [PATCH] if godog package is not a module, make sure it is installed --- builder_go110.go | 24 ++++++++++++++++++++++++ builder_go111_test.go | 13 +++++++++++-- builder_test.go | 30 +++++++++++++++++++++++++----- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/builder_go110.go b/builder_go110.go index 75f9a8a..00d8a7d 100644 --- a/builder_go110.go +++ b/builder_go110.go @@ -161,6 +161,16 @@ func Build(bin string) error { return err } + if !isModule(godogImportPath, mods) { + // must make sure that package is installed + // modules are installed on download + cmd := exec.Command("go", "install", "-i", godogPkg.ImportPath) + cmd.Env = os.Environ() + if out, err := cmd.CombinedOutput(); err != nil { + return fmt.Errorf("failed to install godog package: %s, reason: %v", string(out), err) + } + } + // compile godog testmain package archive // we do not depend on CGO so a lot of checks are not necessary testMainPkgOut := filepath.Join(testdir, "main.a") @@ -488,3 +498,17 @@ func readModules() []*module { } return mods } + +func isModule(name string, mods []*module) bool { + if mods == nil { + return false + } + + for _, mod := range mods { + if pkg := mod.match(name); pkg != nil { + return true + } + } + + return false +} diff --git a/builder_go111_test.go b/builder_go111_test.go index 2394408..3f833ac 100644 --- a/builder_go111_test.go +++ b/builder_go111_test.go @@ -11,8 +11,13 @@ import ( ) func TestGodogBuildWithModuleOutsideGopath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } + dir := filepath.Join(os.TempDir(), "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) if err != nil { os.RemoveAll(dir) t.Fatal(err) @@ -48,9 +53,13 @@ func TestGodogBuildWithModuleOutsideGopath(t *testing.T) { } func TestGodogBuildWithModuleInsideGopath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } gopath := filepath.Join(os.TempDir(), "_gp") dir := filepath.Join(gopath, "src", "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) if err != nil { os.RemoveAll(gopath) t.Fatal(err) diff --git a/builder_test.go b/builder_test.go index b778e8c..d3d1622 100644 --- a/builder_test.go +++ b/builder_test.go @@ -92,8 +92,12 @@ func buildTestPackage(dir, feat, src, testSrc string) error { } func TestGodogBuildWithSourceNotInGoPath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } dir := filepath.Join(os.TempDir(), "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) if err != nil { os.RemoveAll(dir) t.Fatal(err) @@ -124,8 +128,12 @@ func TestGodogBuildWithSourceNotInGoPath(t *testing.T) { } func TestGodogBuildWithoutSourceNotInGoPath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } dir := filepath.Join(os.TempDir(), "godogs") - err := buildTestPackage(dir, builderFeatureFile, "", "") + err = buildTestPackage(dir, builderFeatureFile, "", "") if err != nil { os.RemoveAll(dir) t.Fatal(err) @@ -156,8 +164,12 @@ func TestGodogBuildWithoutSourceNotInGoPath(t *testing.T) { } func TestGodogBuildWithoutTestSourceNotInGoPath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } dir := filepath.Join(os.TempDir(), "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, "") + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, "") if err != nil { os.RemoveAll(dir) t.Fatal(err) @@ -188,9 +200,13 @@ func TestGodogBuildWithoutTestSourceNotInGoPath(t *testing.T) { } func TestGodogBuildWithinGopath(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } gopath := filepath.Join(os.TempDir(), "_gp") dir := filepath.Join(gopath, "src", "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) if err != nil { os.RemoveAll(gopath) t.Fatal(err) @@ -233,9 +249,13 @@ func TestGodogBuildWithinGopath(t *testing.T) { } func TestGodogBuildWithVendoredGodog(t *testing.T) { + _, err := exec.LookPath("godog") + if err != nil { + t.SkipNow() // no command installed + } gopath := filepath.Join(os.TempDir(), "_gp") dir := filepath.Join(gopath, "src", "godogs") - err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) + err = buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile) if err != nil { os.RemoveAll(gopath) t.Fatal(err)