From ea394d33cca70a24cd256ec509cca0d192382402 Mon Sep 17 00:00:00 2001 From: Preslav Date: Fri, 24 May 2024 23:49:32 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20Pull=20in=20replace=20dependenci?= =?UTF-8?q?es=20from=20provider=20go.mods=20when=20using=20configure.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Preslav --- providers-sdk/v1/util/configure/configure.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/providers-sdk/v1/util/configure/configure.go b/providers-sdk/v1/util/configure/configure.go index 73e2b321a9..37ce901fc3 100644 --- a/providers-sdk/v1/util/configure/configure.go +++ b/providers-sdk/v1/util/configure/configure.go @@ -18,6 +18,7 @@ import ( "github.com/rs/zerolog/log" "github.com/spf13/cobra" "go.mondoo.com/cnquery/v11/logger" + "golang.org/x/mod/modfile" "sigs.k8s.io/yaml" ) @@ -121,7 +122,7 @@ var editProvidersCmd = &cobra.Command{ log.Fatal().Err(err).Str("path", confPath).Msg("failed to marshal updated config") } - err = os.WriteFile(confPath, raw, 0700) + err = os.WriteFile(confPath, raw, 0o700) if err != nil { log.Fatal().Err(err).Str("path", confPath).Msg("failed to write config file") } @@ -244,9 +245,24 @@ func rewireDependencies(providers []string) { log.Fatal().Err(err).Str("provider", provider).Msg("failed to stat provider go.mod") } } + + goModContent, err := os.ReadFile("providers/" + provider + "/go.mod") + if err != nil { + log.Fatal().Err(err).Str("provider", provider).Msg("failed to read provider go.mod") + } + goMod, err := modfile.Parse(fmt.Sprintf("%s/go.mod", provider), goModContent, nil) + if err != nil { + log.Fatal().Err(err).Str("provider", provider).Msg("failed to parse provider go.mod") + } + // we don't care about the specific version for dev deps += "\n\tgo.mondoo.com/cnquery/v11/providers/" + provider + " v0.0.0" replace += "\nreplace go.mondoo.com/cnquery/v11/providers/" + provider + " => ./providers/" + provider + // if the provider has any specific pinned replacements, we also add those to allow compiling + for _, r := range goMod.Replace { + // TODO: maybe we also use the modfile module to update the go.mod we're modifying + replace += "\nreplace " + r.Old.Path + " => " + r.New.Path + " " + r.New.Version + } } if deps != "" { raws = strings.Replace(raws, "require (", "require ("+deps, 1)