From 8f6d30a2d96ffeaee7db95f67a1c1c0cb57f146e Mon Sep 17 00:00:00 2001 From: soeti Date: Sat, 19 Nov 2022 13:20:13 +0200 Subject: [PATCH 1/7] Add check go.mod first to prevent cascade errors in "init" directive --- main.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.go b/main.go index b545090755..e9f2937d40 100644 --- a/main.go +++ b/main.go @@ -69,6 +69,10 @@ var initCmd = &cli.Command{ return fmt.Errorf("unable to determine import path for current directory, you probably need to run 'go mod init' first") } + // + if !fileExists("go.mod") { + return fmt.Errorf("go.mod is missing! Please, do `go mod init your-project` first\n") + } // check schema and config don't already exist for _, filename := range []string{configFilename, schemaFilename, serverFilename} { if fileExists(filename) { From 099a648a4fcc7a8979017d345c7bcf491cc0b461 Mon Sep 17 00:00:00 2001 From: soeti Date: Sat, 19 Nov 2022 15:15:43 +0200 Subject: [PATCH 2/7] Fix formatting --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index e9f2937d40..a5da4bc70b 100644 --- a/main.go +++ b/main.go @@ -69,10 +69,10 @@ var initCmd = &cli.Command{ return fmt.Errorf("unable to determine import path for current directory, you probably need to run 'go mod init' first") } - // if !fileExists("go.mod") { - return fmt.Errorf("go.mod is missing! Please, do `go mod init your-project` first\n") + return fmt.Errorf("go.mod is missing. Please, do 'go mod init' first\n") } + // check schema and config don't already exist for _, filename := range []string{configFilename, schemaFilename, serverFilename} { if fileExists(filename) { From df37ab792ef4158c1edab2005216cf09ce5cee47 Mon Sep 17 00:00:00 2001 From: soeti Date: Sat, 19 Nov 2022 19:46:19 +0200 Subject: [PATCH 3/7] Fix formatting with gofmt --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index a5da4bc70b..d13a9c4f49 100644 --- a/main.go +++ b/main.go @@ -72,7 +72,7 @@ var initCmd = &cli.Command{ if !fileExists("go.mod") { return fmt.Errorf("go.mod is missing. Please, do 'go mod init' first\n") } - + // check schema and config don't already exist for _, filename := range []string{configFilename, schemaFilename, serverFilename} { if fileExists(filename) { From a73b7a817af116b2265bfe5ad11265f849c96f62 Mon Sep 17 00:00:00 2001 From: soeti Date: Sun, 20 Nov 2022 13:00:52 +0200 Subject: [PATCH 4/7] Security update go.mod golang.org/x/text@v0.3.7 to v0.3.8 --- go.mod | 2 +- go.sum | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 7c4b827c6a..0e51ac4feb 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/stretchr/testify v1.7.1 github.com/urfave/cli/v2 v2.8.1 github.com/vektah/gqlparser/v2 v2.5.1 - golang.org/x/text v0.3.7 + golang.org/x/text v0.3.8 golang.org/x/tools v0.1.12 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 7905676342..6025b76120 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,11 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= From d8df2cca6f1b9ba2cbde3705e9ec8259dd38b4f7 Mon Sep 17 00:00:00 2001 From: soeti Date: Sun, 20 Nov 2022 13:16:23 +0200 Subject: [PATCH 5/7] Revert "Security update go.mod golang.org/x/text@v0.3.7 to v0.3.8" This reverts commit c23d183d9da4e33993e600beefcccd1fc4ec6264. --- go.mod | 2 +- go.sum | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0e51ac4feb..7c4b827c6a 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/stretchr/testify v1.7.1 github.com/urfave/cli/v2 v2.8.1 github.com/vektah/gqlparser/v2 v2.5.1 - golang.org/x/text v0.3.8 + golang.org/x/text v0.3.7 golang.org/x/tools v0.1.12 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 6025b76120..7905676342 100644 --- a/go.sum +++ b/go.sum @@ -81,11 +81,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= From e6161126551a069b45a1ad0056e1d3b252554ca9 Mon Sep 17 00:00:00 2001 From: soeti Date: Sun, 20 Nov 2022 13:20:48 +0200 Subject: [PATCH 6/7] Security update go.mod golang.org/x/text@v0.3.7 to v0.3.8 --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 7c4b827c6a..0e51ac4feb 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/stretchr/testify v1.7.1 github.com/urfave/cli/v2 v2.8.1 github.com/vektah/gqlparser/v2 v2.5.1 - golang.org/x/text v0.3.7 + golang.org/x/text v0.3.8 golang.org/x/tools v0.1.12 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 7905676342..3f9b69b51e 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,9 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= From 92b2d8d5dd800367d383ebe4b9e6850afde595c4 Mon Sep 17 00:00:00 2001 From: Steve Coffman Date: Fri, 25 Nov 2022 16:37:23 -0500 Subject: [PATCH 7/7] Adjust go.mod file to look in parent directories as well Signed-off-by: Steve Coffman --- _examples/go.mod | 2 +- _examples/go.sum | 3 ++- main.go | 54 +++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/_examples/go.mod b/_examples/go.mod index 5f87adc514..a0debb38d1 100644 --- a/_examples/go.mod +++ b/_examples/go.mod @@ -23,6 +23,6 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect - golang.org/x/text v0.3.7 + golang.org/x/text v0.3.8 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect ) diff --git a/_examples/go.sum b/_examples/go.sum index 58cd0bb709..d57ef21925 100644 --- a/_examples/go.sum +++ b/_examples/go.sum @@ -133,8 +133,9 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= diff --git a/main.go b/main.go index d13a9c4f49..e0420d1502 100644 --- a/main.go +++ b/main.go @@ -12,12 +12,13 @@ import ( "os" "path/filepath" + "github.com/urfave/cli/v2" + "github.com/99designs/gqlgen/api" "github.com/99designs/gqlgen/codegen/config" "github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/internal/code" "github.com/99designs/gqlgen/plugin/servergen" - "github.com/urfave/cli/v2" ) //go:embed init-templates/schema.graphqls @@ -39,6 +40,28 @@ func fileExists(filename string) bool { return !errors.Is(err, fs.ErrNotExist) } +// see Go source code: +// https://github.com/golang/go/blob/f57ebed35132d02e5cf016f324853217fb545e91/src/cmd/go/internal/modload/init.go#L1283 +func findModuleRoot(dir string) (roots string) { + if dir == "" { + panic("dir not set") + } + dir = filepath.Clean(dir) + + // Look for enclosing go.mod. + for { + if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { + return dir + } + d := filepath.Dir(dir) + if d == dir { // the parent of the root is itself, so we can go no further + break + } + dir = d + } + return "" +} + func initFile(filename, contents string) error { if err := os.MkdirAll(filepath.Dir(filename), 0o755); err != nil { return fmt.Errorf("unable to create directory for file '%s': %w\n", filename, err) @@ -56,20 +79,35 @@ var initCmd = &cli.Command{ Flags: []cli.Flag{ &cli.BoolFlag{Name: "verbose, v", Usage: "show logs"}, &cli.StringFlag{Name: "config, c", Usage: "the config filename", Value: "gqlgen.yml"}, - &cli.StringFlag{Name: "server", Usage: "where to write the server stub to", Value: "server.go"}, - &cli.StringFlag{Name: "schema", Usage: "where to write the schema stub to", Value: "graph/schema.graphqls"}, + &cli.StringFlag{ + Name: "server", + Usage: "where to write the server stub to", + Value: "server.go", + }, + &cli.StringFlag{ + Name: "schema", + Usage: "where to write the schema stub to", + Value: "graph/schema.graphqls", + }, }, Action: func(ctx *cli.Context) error { configFilename := ctx.String("config") serverFilename := ctx.String("server") schemaFilename := ctx.String("schema") - pkgName := code.ImportPathForDir(".") + cwd, err := os.Getwd() + if err != nil { + log.Println(err) + return fmt.Errorf("unable to determine current directory:%w", err) + } + pkgName := code.ImportPathForDir(cwd) if pkgName == "" { - return fmt.Errorf("unable to determine import path for current directory, you probably need to run 'go mod init' first") + return fmt.Errorf( + "unable to determine import path for current directory, you probably need to run 'go mod init' first", + ) } - - if !fileExists("go.mod") { + modRoot := findModuleRoot(cwd) + if modRoot == "" { return fmt.Errorf("go.mod is missing. Please, do 'go mod init' first\n") } @@ -79,7 +117,7 @@ var initCmd = &cli.Command{ return fmt.Errorf("%s already exists", filename) } } - _, err := config.LoadConfigFromDefaultLocations() + _, err = config.LoadConfigFromDefaultLocations() if err == nil { return fmt.Errorf("gqlgen.yml already exists in a parent directory\n") }