Skip to content

Commit 31c13d2

Browse files
committed
[autodetect] Move autodetect to pkg
1 parent 7c99803 commit 31c13d2

File tree

6 files changed

+79
-4
lines changed

6 files changed

+79
-4
lines changed

internal/autodetect/autodetect.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import (
55
"fmt"
66
"io"
77

8-
"go.jetpack.io/devbox/internal/autodetect/detector"
9-
"go.jetpack.io/devbox/internal/devbox"
10-
"go.jetpack.io/devbox/internal/devbox/devopt"
8+
"go.jetpack.io/devbox/pkg/autodetect/detector"
9+
"go.jetpack.io/devbox/pkg/devbox"
10+
"go.jetpack.io/devbox/pkg/devbox/devopt"
1111
)
1212

1313
func PopulateConfig(ctx context.Context, path string, stderr io.Writer) error {

internal/boxcli/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"github.com/pkg/errors"
88
"github.com/spf13/cobra"
99

10-
"go.jetpack.io/devbox/internal/autodetect"
1110
"go.jetpack.io/devbox/internal/devbox"
11+
"go.jetpack.io/devbox/pkg/autodetect"
1212
)
1313

1414
type initFlags struct {

pkg/autodetect/autodetect.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package autodetect
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
8+
"go.jetpack.io/devbox/internal/devbox"
9+
"go.jetpack.io/devbox/internal/devbox/devopt"
10+
"go.jetpack.io/devbox/pkg/autodetect/detector"
11+
)
12+
13+
func PopulateConfig(ctx context.Context, path string, stderr io.Writer) error {
14+
pkgs, err := packages(ctx, path)
15+
if err != nil {
16+
return err
17+
}
18+
devbox, err := devbox.Open(&devopt.Opts{
19+
Dir: path,
20+
Stderr: stderr,
21+
})
22+
if err != nil {
23+
return err
24+
}
25+
return devbox.Add(ctx, pkgs, devopt.AddOpts{})
26+
}
27+
28+
func DryRun(ctx context.Context, path string, stderr io.Writer) error {
29+
pkgs, err := packages(ctx, path)
30+
if err != nil {
31+
return err
32+
} else if len(pkgs) == 0 {
33+
fmt.Fprintln(stderr, "No packages to add")
34+
return nil
35+
}
36+
fmt.Fprintln(stderr, "Packages to add:")
37+
for _, pkg := range pkgs {
38+
fmt.Fprintln(stderr, pkg)
39+
}
40+
return nil
41+
}
42+
43+
func detectors(path string) []detector.Detector {
44+
return []detector.Detector{
45+
&detector.PythonDetector{Root: path},
46+
&detector.PoetryDetector{Root: path},
47+
}
48+
}
49+
50+
func packages(ctx context.Context, path string) ([]string, error) {
51+
mostRelevantDetector, err := relevantDetector(path)
52+
if err != nil || mostRelevantDetector == nil {
53+
return nil, err
54+
}
55+
return mostRelevantDetector.Packages(ctx)
56+
}
57+
58+
// relevantDetector returns the most relevant detector for the given path.
59+
// We could modify this to return a list of detectors and their scores or
60+
// possibly grouped detectors by category (e.g. python, server, etc.)
61+
func relevantDetector(path string) (detector.Detector, error) {
62+
relevantScore := 0.0
63+
var mostRelevantDetector detector.Detector
64+
for _, detector := range detectors(path) {
65+
score, err := detector.IsRelevant(path)
66+
if err != nil {
67+
return nil, err
68+
}
69+
if score > relevantScore {
70+
relevantScore = score
71+
mostRelevantDetector = detector
72+
}
73+
}
74+
return mostRelevantDetector, nil
75+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)