From 2c77dd6d95ecbb7571263cef7bb4e9ef49d369b1 Mon Sep 17 00:00:00 2001 From: Mike Landau Date: Mon, 7 Oct 2024 13:21:42 -0700 Subject: [PATCH 1/2] [autodetect] Move autodetect to pkg --- internal/autodetect/autodetect.go | 6 +- internal/boxcli/init.go | 2 +- pkg/autodetect/autodetect.go | 75 +++++++++++++++++++ .../autodetect/detector/detector.go | 0 .../autodetect/detector/poetry.go | 0 .../autodetect/detector/python.go | 0 6 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 pkg/autodetect/autodetect.go rename {internal => pkg}/autodetect/detector/detector.go (100%) rename {internal => pkg}/autodetect/detector/poetry.go (100%) rename {internal => pkg}/autodetect/detector/python.go (100%) diff --git a/internal/autodetect/autodetect.go b/internal/autodetect/autodetect.go index 786e479e5c0..bfd0f5c321b 100644 --- a/internal/autodetect/autodetect.go +++ b/internal/autodetect/autodetect.go @@ -5,9 +5,9 @@ import ( "fmt" "io" - "go.jetpack.io/devbox/internal/autodetect/detector" - "go.jetpack.io/devbox/internal/devbox" - "go.jetpack.io/devbox/internal/devbox/devopt" + "go.jetpack.io/devbox/pkg/autodetect/detector" + "go.jetpack.io/devbox/pkg/devbox" + "go.jetpack.io/devbox/pkg/devbox/devopt" ) func PopulateConfig(ctx context.Context, path string, stderr io.Writer) error { diff --git a/internal/boxcli/init.go b/internal/boxcli/init.go index 3029b6e9540..1efaebabb3f 100644 --- a/internal/boxcli/init.go +++ b/internal/boxcli/init.go @@ -7,8 +7,8 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" - "go.jetpack.io/devbox/internal/autodetect" "go.jetpack.io/devbox/internal/devbox" + "go.jetpack.io/devbox/pkg/autodetect" ) type initFlags struct { diff --git a/pkg/autodetect/autodetect.go b/pkg/autodetect/autodetect.go new file mode 100644 index 00000000000..a3e2be16384 --- /dev/null +++ b/pkg/autodetect/autodetect.go @@ -0,0 +1,75 @@ +package autodetect + +import ( + "context" + "fmt" + "io" + + "go.jetpack.io/devbox/internal/devbox" + "go.jetpack.io/devbox/internal/devbox/devopt" + "go.jetpack.io/devbox/pkg/autodetect/detector" +) + +func PopulateConfig(ctx context.Context, path string, stderr io.Writer) error { + pkgs, err := packages(ctx, path) + if err != nil { + return err + } + devbox, err := devbox.Open(&devopt.Opts{ + Dir: path, + Stderr: stderr, + }) + if err != nil { + return err + } + return devbox.Add(ctx, pkgs, devopt.AddOpts{}) +} + +func DryRun(ctx context.Context, path string, stderr io.Writer) error { + pkgs, err := packages(ctx, path) + if err != nil { + return err + } else if len(pkgs) == 0 { + fmt.Fprintln(stderr, "No packages to add") + return nil + } + fmt.Fprintln(stderr, "Packages to add:") + for _, pkg := range pkgs { + fmt.Fprintln(stderr, pkg) + } + return nil +} + +func detectors(path string) []detector.Detector { + return []detector.Detector{ + &detector.PythonDetector{Root: path}, + &detector.PoetryDetector{Root: path}, + } +} + +func packages(ctx context.Context, path string) ([]string, error) { + mostRelevantDetector, err := relevantDetector(path) + if err != nil || mostRelevantDetector == nil { + return nil, err + } + return mostRelevantDetector.Packages(ctx) +} + +// relevantDetector returns the most relevant detector for the given path. +// We could modify this to return a list of detectors and their scores or +// possibly grouped detectors by category (e.g. python, server, etc.) +func relevantDetector(path string) (detector.Detector, error) { + relevantScore := 0.0 + var mostRelevantDetector detector.Detector + for _, detector := range detectors(path) { + score, err := detector.IsRelevant(path) + if err != nil { + return nil, err + } + if score > relevantScore { + relevantScore = score + mostRelevantDetector = detector + } + } + return mostRelevantDetector, nil +} diff --git a/internal/autodetect/detector/detector.go b/pkg/autodetect/detector/detector.go similarity index 100% rename from internal/autodetect/detector/detector.go rename to pkg/autodetect/detector/detector.go diff --git a/internal/autodetect/detector/poetry.go b/pkg/autodetect/detector/poetry.go similarity index 100% rename from internal/autodetect/detector/poetry.go rename to pkg/autodetect/detector/poetry.go diff --git a/internal/autodetect/detector/python.go b/pkg/autodetect/detector/python.go similarity index 100% rename from internal/autodetect/detector/python.go rename to pkg/autodetect/detector/python.go From f32c93e3021ad5c2c5cb0b3b0a7757910b31837b Mon Sep 17 00:00:00 2001 From: Mike Landau Date: Mon, 7 Oct 2024 13:24:47 -0700 Subject: [PATCH 2/2] Remove old file --- internal/autodetect/autodetect.go | 75 ------------------------------- pkg/autodetect/autodetect.go | 2 +- 2 files changed, 1 insertion(+), 76 deletions(-) delete mode 100644 internal/autodetect/autodetect.go diff --git a/internal/autodetect/autodetect.go b/internal/autodetect/autodetect.go deleted file mode 100644 index bfd0f5c321b..00000000000 --- a/internal/autodetect/autodetect.go +++ /dev/null @@ -1,75 +0,0 @@ -package autodetect - -import ( - "context" - "fmt" - "io" - - "go.jetpack.io/devbox/pkg/autodetect/detector" - "go.jetpack.io/devbox/pkg/devbox" - "go.jetpack.io/devbox/pkg/devbox/devopt" -) - -func PopulateConfig(ctx context.Context, path string, stderr io.Writer) error { - pkgs, err := packages(ctx, path) - if err != nil { - return err - } - devbox, err := devbox.Open(&devopt.Opts{ - Dir: path, - Stderr: stderr, - }) - if err != nil { - return err - } - return devbox.Add(ctx, pkgs, devopt.AddOpts{}) -} - -func DryRun(ctx context.Context, path string, stderr io.Writer) error { - pkgs, err := packages(ctx, path) - if err != nil { - return err - } else if len(pkgs) == 0 { - fmt.Fprintln(stderr, "No packages to add") - return nil - } - fmt.Fprintln(stderr, "Packages to add:") - for _, pkg := range pkgs { - fmt.Fprintln(stderr, pkg) - } - return nil -} - -func detectors(path string) []detector.Detector { - return []detector.Detector{ - &detector.PythonDetector{Root: path}, - &detector.PoetryDetector{Root: path}, - } -} - -func packages(ctx context.Context, path string) ([]string, error) { - mostRelevantDetector, err := relevantDetector(path) - if err != nil || mostRelevantDetector == nil { - return nil, err - } - return mostRelevantDetector.Packages(ctx) -} - -// relevantDetector returns the most relevant detector for the given path. -// We could modify this to return a list of detectors and their scores or -// possibly grouped detectors by category (e.g. python, server, etc.) -func relevantDetector(path string) (detector.Detector, error) { - relevantScore := 0.0 - var mostRelevantDetector detector.Detector - for _, detector := range detectors(path) { - score, err := detector.Relevance(path) - if err != nil { - return nil, err - } - if score > relevantScore { - relevantScore = score - mostRelevantDetector = detector - } - } - return mostRelevantDetector, nil -} diff --git a/pkg/autodetect/autodetect.go b/pkg/autodetect/autodetect.go index a3e2be16384..09cd51e064d 100644 --- a/pkg/autodetect/autodetect.go +++ b/pkg/autodetect/autodetect.go @@ -62,7 +62,7 @@ func relevantDetector(path string) (detector.Detector, error) { relevantScore := 0.0 var mostRelevantDetector detector.Detector for _, detector := range detectors(path) { - score, err := detector.IsRelevant(path) + score, err := detector.Relevance(path) if err != nil { return nil, err }