Skip to content

Commit 9d9f7a2

Browse files
committed
chore: move uv plugin to ecosystems folder
1 parent a89945e commit 9d9f7a2

9 files changed

Lines changed: 50 additions & 50 deletions

File tree

pkg/depgraph/sbom_resolution.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"github.com/snyk/go-application-framework/pkg/workflow"
1717

1818
"github.com/snyk/cli-extension-dep-graph/internal/snykclient"
19-
"github.com/snyk/cli-extension-dep-graph/internal/uv"
19+
"github.com/snyk/cli-extension-dep-graph/pkg/ecosystems/python/uv"
2020
"github.com/snyk/cli-extension-dep-graph/pkg/ecosystems"
2121
ecosystemslogger "github.com/snyk/cli-extension-dep-graph/pkg/ecosystems/logger"
2222
)
@@ -44,7 +44,7 @@ func handleSBOMResolution(
4444
config,
4545
logger,
4646
[]ecosystems.SCAPlugin{
47-
uv.NewUvPlugin(uv.NewUvClient(), snykClient, remoteRepoURL),
47+
uv.NewPlugin(uv.NewClient(), snykClient, remoteRepoURL),
4848
},
4949
handleLegacyResolution,
5050
)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type Plugin struct {
2424
remoteRepoURL string
2525
}
2626

27-
func NewUvPlugin(client Client, snykClient *snykclient.SnykClient, remoteRepoURL string) Plugin {
27+
func NewPlugin(client Client, snykClient *snykclient.SnykClient, remoteRepoURL string) Plugin {
2828
return Plugin{
2929
client: client,
3030
snykClient: snykClient,
@@ -43,7 +43,7 @@ func (p Plugin) BuildDepGraphsFromDir(
4343
targetFile = *options.Global.TargetFile
4444
}
4545

46-
if targetFile != "" && filepath.Base(targetFile) != UvLockFileName {
46+
if targetFile != "" && filepath.Base(targetFile) != LockFileName {
4747
log.Info(ctx, "Skipping processing uv plugin", logger.Attr("targetFile", targetFile), logger.Attr("reason", "not a 'uv.lock' file"))
4848
return &scaecosystems.PluginResult{}, nil
4949
}
@@ -202,7 +202,7 @@ func (p Plugin) discoverLockFiles(
202202
switch {
203203
case options.Global.AllProjects:
204204
findOpts = []discovery.FindOption{
205-
discovery.WithInclude(UvLockFileName),
205+
discovery.WithInclude(LockFileName),
206206
discovery.WithCommonExcludes(),
207207
}
208208
if len(options.Global.Exclude) > 0 {
@@ -212,12 +212,12 @@ func (p Plugin) discoverLockFiles(
212212
if targetFile != "" {
213213
findOpts = append(findOpts, discovery.WithTargetFile(targetFile))
214214
} else {
215-
rootLockPath := filepath.Join(dir, UvLockFileName)
215+
rootLockPath := filepath.Join(dir, LockFileName)
216216
// Default to root uv.lock file if it exists
217217
if fileExists(rootLockPath) {
218218
findRes := []discovery.FindResult{{
219219
Path: rootLockPath,
220-
RelPath: UvLockFileName,
220+
RelPath: LockFileName,
221221
}}
222222
return findRes, nil
223223
}
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ func TestPlugin_BuildDepGraphsFromDir(t *testing.T) {
262262
)
263263
}
264264
snykClient := setupMockSnykClientMultiResponse(t, mockResponses)
265-
plugin := NewUvPlugin(mockClient, snykClient, "")
265+
plugin := NewPlugin(mockClient, snykClient, "")
266266

267267
// Execute
268268
ctx := context.Background()
@@ -310,7 +310,7 @@ func TestPlugin_ShouldNotSkipProcessingWhenNoTargetFileIsSet(t *testing.T) {
310310

311311
mockClient := &MockClient{}
312312
snykClient := setupMockSnykClient(t, `{}`)
313-
plugin := NewUvPlugin(mockClient, snykClient, "")
313+
plugin := NewPlugin(mockClient, snykClient, "")
314314

315315
options := ecosystems.NewPluginOptions()
316316
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -326,7 +326,7 @@ func TestPlugin_ShouldNotSkipProcessingWhenUvLockFile(t *testing.T) {
326326

327327
mockClient := &MockClient{}
328328
snykClient := setupMockSnykClient(t, `{}`)
329-
plugin := NewUvPlugin(mockClient, snykClient, "")
329+
plugin := NewPlugin(mockClient, snykClient, "")
330330

331331
options := ecosystems.NewPluginOptions().WithTargetFile("uv.lock")
332332
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -342,7 +342,7 @@ func TestPlugin_SkipsProcessingWhenTargetFileIsNotUVFile(t *testing.T) {
342342

343343
mockClient := &MockClient{}
344344
snykClient := setupMockSnykClient(t, `{}`)
345-
plugin := NewUvPlugin(mockClient, snykClient, "")
345+
plugin := NewPlugin(mockClient, snykClient, "")
346346

347347
options := ecosystems.NewPluginOptions().WithTargetFile("package.json")
348348
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -358,7 +358,7 @@ func TestPlugin_SkipsProcessingWhenTargetFileIsAPyProjectTomlFile(t *testing.T)
358358

359359
mockClient := &MockClient{}
360360
snykClient := setupMockSnykClient(t, `{}`)
361-
plugin := NewUvPlugin(mockClient, snykClient, "")
361+
plugin := NewPlugin(mockClient, snykClient, "")
362362

363363
options := ecosystems.NewPluginOptions().WithTargetFile("pyproject.toml")
364364
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -379,7 +379,7 @@ func TestPlugin_ShouldNotSkipProcessingWhenTargetFileIsRelativeFolderPath(t *tes
379379

380380
mockClient := &MockClient{}
381381
snykClient := setupMockSnykClient(t, `{}`)
382-
plugin := NewUvPlugin(mockClient, snykClient, "")
382+
plugin := NewPlugin(mockClient, snykClient, "")
383383

384384
options := ecosystems.NewPluginOptions().WithTargetFile("my-project/uv.lock")
385385
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -401,7 +401,7 @@ func TestPlugin_ShouldSkipProcessingWhenTargetFileIsNotUvLockInRelativeFolderPat
401401

402402
mockClient := &MockClient{}
403403
snykClient := setupMockSnykClient(t, `{}`)
404-
plugin := NewUvPlugin(mockClient, snykClient, "")
404+
plugin := NewPlugin(mockClient, snykClient, "")
405405

406406
options := ecosystems.NewPluginOptions().WithTargetFile("my-project/package.json")
407407
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -422,7 +422,7 @@ func TestPlugin_ShouldRaiseErrorWhenTargetFileIsUvLockInRelativeFolderButDoesNot
422422

423423
mockClient := &MockClient{}
424424
snykClient := setupMockSnykClient(t, `{}`)
425-
plugin := NewUvPlugin(mockClient, snykClient, "")
425+
plugin := NewPlugin(mockClient, snykClient, "")
426426

427427
options := ecosystems.NewPluginOptions().WithTargetFile("my-project/uv.lock")
428428
pluginResult, err := plugin.BuildDepGraphsFromDir(t.Context(), testLogger, tmpDir, options)
@@ -439,7 +439,7 @@ func TestPlugin_BuildDepGraphsFromDir_ErrorHandling(t *testing.T) {
439439

440440
mockClient := &MockClient{ReturnErr: errors.New("export failed")}
441441
snykClient := setupMockSnykClient(t, `{}`)
442-
plugin := NewUvPlugin(mockClient, snykClient, "")
442+
plugin := NewPlugin(mockClient, snykClient, "")
443443

444444
ctx := context.Background()
445445
options := ecosystems.NewPluginOptions()
@@ -479,7 +479,7 @@ func TestPlugin_BuildDepGraphsFromDir_MixedSuccessAndFailure(t *testing.T) {
479479
mocks.NewMockResponse("application/json", []byte(mockResponseBody), http.StatusOK),
480480
}
481481
snykClient := setupMockSnykClientMultiResponse(t, mockResponses)
482-
plugin := NewUvPlugin(mockClient, snykClient, "")
482+
plugin := NewPlugin(mockClient, snykClient, "")
483483
pluginResult, err := plugin.BuildDepGraphsFromDir(ctx, testLogger, tmpDir, options)
484484
findings := pluginResult.Results
485485
require.NoError(t, err)
@@ -511,7 +511,7 @@ func TestBuildFindings_Success(t *testing.T) {
511511
sbom := Sbom(validSBOMJSON)
512512
mockResponseBody := singleDepGraphResponse("test-package", "1.0.0")
513513
snykClient := setupMockSnykClient(t, mockResponseBody)
514-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
514+
plugin := NewPlugin(&MockClient{}, snykClient, "")
515515

516516
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
517517

@@ -562,7 +562,7 @@ func TestBuildFindings_NoProjectRoot_ReturnsErrorFinding(t *testing.T) {
562562
}`
563563
sbom := Sbom(sbomJSON)
564564
snykClient := setupMockSnykClient(t, `{}`)
565-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
565+
plugin := NewPlugin(&MockClient{}, snykClient, "")
566566

567567
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
568568
findings := buildResult.Results
@@ -612,7 +612,7 @@ func TestBuildFindings_NoProjectRoot_AllProjects_Succeeds(t *testing.T) {
612612
sbom := Sbom(sbomJSON)
613613
mockResponseBody := singleDepGraphResponse("albatross", "0.1.0")
614614
snykClient := setupMockSnykClient(t, mockResponseBody)
615-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
615+
plugin := NewPlugin(&MockClient{}, snykClient, "")
616616

617617
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions().WithAllProjects(true), testLogger)
618618

@@ -654,7 +654,7 @@ func TestBuildFindings_NoProjectRoot_UvWorkspacePackages_Succeeds(t *testing.T)
654654
sbom := Sbom(sbomJSON)
655655
mockResponseBody := singleDepGraphResponse("albatross", "0.1.0")
656656
snykClient := setupMockSnykClient(t, mockResponseBody)
657-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
657+
plugin := NewPlugin(&MockClient{}, snykClient, "")
658658

659659
buildResult, err := plugin.buildResults(
660660
context.Background(),
@@ -676,7 +676,7 @@ func TestBuildFindings_NoProjectRoot_UvWorkspacePackages_Succeeds(t *testing.T)
676676
func TestBuildFindings_InvalidSBOM(t *testing.T) {
677677
sbom := Sbom(`{"invalid": "json"}`)
678678
snykClient := setupMockSnykClient(t, `{}`)
679-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
679+
plugin := NewPlugin(&MockClient{}, snykClient, "")
680680

681681
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
682682

@@ -692,7 +692,7 @@ func TestBuildFindings_MissingRootComponent(t *testing.T) {
692692
}`
693693
sbom := Sbom(sbomJSON)
694694
snykClient := setupMockSnykClient(t, `{}`)
695-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
695+
plugin := NewPlugin(&MockClient{}, snykClient, "")
696696

697697
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
698698

@@ -705,7 +705,7 @@ func TestBuildFindings_ConversionError(t *testing.T) {
705705
sbom := Sbom(validSBOMJSON)
706706
mockResponse := mocks.NewMockResponse("application/json", []byte(`{"error": "invalid"}`), http.StatusBadRequest)
707707
snykClient := setupMockSnykClientMultiResponse(t, []mocks.MockResponse{mockResponse})
708-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
708+
plugin := NewPlugin(&MockClient{}, snykClient, "")
709709

710710
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
711711

@@ -718,7 +718,7 @@ func TestBuildFindings_MultipleDepGraphs(t *testing.T) {
718718
sbom := Sbom(validSBOMJSON)
719719
mockResponseBody := multipleDepGraphsResponse()
720720
snykClient := setupMockSnykClient(t, mockResponseBody)
721-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
721+
plugin := NewPlugin(&MockClient{}, snykClient, "")
722722

723723
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
724724

@@ -764,7 +764,7 @@ func TestBuildFindings_WorkspacePackage(t *testing.T) {
764764
sbom := Sbom(sbomJSON)
765765
mockResponseBody := singleDepGraphResponse("workspace-package", "3.1.0")
766766
snykClient := setupMockSnykClient(t, mockResponseBody)
767-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
767+
plugin := NewPlugin(&MockClient{}, snykClient, "")
768768

769769
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
770770

@@ -778,7 +778,7 @@ func TestBuildFindings_PathConstruction_RootDir(t *testing.T) {
778778
sbom := Sbom(validSBOMJSON)
779779
mockResponseBody := singleDepGraphResponse("test-package", "1.0.0")
780780
snykClient := setupMockSnykClient(t, mockResponseBody)
781-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
781+
plugin := NewPlugin(&MockClient{}, snykClient, "")
782782

783783
buildResult, err := plugin.buildResults(context.Background(), sbom, "uv.lock", ".", ecosystems.NewPluginOptions(), testLogger)
784784

@@ -792,7 +792,7 @@ func TestBuildFindings_PathConstruction_NestedDir(t *testing.T) {
792792
sbom := Sbom(validSBOMJSON)
793793
mockResponseBody := singleDepGraphResponse("test-package", "1.0.0")
794794
snykClient := setupMockSnykClient(t, mockResponseBody)
795-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
795+
plugin := NewPlugin(&MockClient{}, snykClient, "")
796796

797797
buildResult, err := plugin.buildResults(context.Background(), sbom, "project1/uv.lock", "project1", ecosystems.NewPluginOptions(), testLogger)
798798

@@ -837,7 +837,7 @@ func TestBuildFindings_PathConstruction_NestedWorkspacePackage(t *testing.T) {
837837
sbom := Sbom(sbomJSON)
838838
mockResponseBody := singleDepGraphResponse("workspace-package", "3.1.0")
839839
snykClient := setupMockSnykClient(t, mockResponseBody)
840-
plugin := NewUvPlugin(&MockClient{}, snykClient, "")
840+
plugin := NewPlugin(&MockClient{}, snykClient, "")
841841

842842
buildResult, err := plugin.buildResults(context.Background(), sbom, "workspace/uv.lock", "workspace", ecosystems.NewPluginOptions(), testLogger)
843843

@@ -976,7 +976,7 @@ func TestPlugin_DiscoverLockFiles(t *testing.T) {
976976
for _, tt := range tests {
977977
t.Run(tt.name, func(t *testing.T) {
978978
tmpDir := createFiles(t, tt.files...)
979-
plugin := NewUvPlugin(&MockClient{}, nil, "")
979+
plugin := NewPlugin(&MockClient{}, nil, "")
980980

981981
ctx := context.Background()
982982
options := ecosystems.NewPluginOptions().
File renamed without changes.
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ import (
1515
)
1616

1717
const (
18-
UvLockFileName = "uv.lock"
18+
LockFileName = "uv.lock"
1919
RequirementsTxtFileName = "requirements.txt"
2020
PyprojectTomlFileName = "pyproject.toml"
21-
UvWorkspacePathProperty = "uv:workspace:path"
22-
UvIsProjectRootProperty = "uv:package:is_project_root"
21+
WorkspacePathProperty = "uv:workspace:path"
22+
IsProjectRootProperty = "uv:package:is_project_root"
2323
)
2424

2525
type Client interface {
@@ -33,16 +33,16 @@ type client struct {
3333

3434
var _ Client = (*client)(nil)
3535

36-
func NewUvClient() Client {
37-
return NewUvClientWithPath("uv")
36+
func NewClient() Client {
37+
return NewClientWithPath("uv")
3838
}
3939

40-
func NewUvClientWithPath(uvBinary string) Client {
41-
return NewUvClientWithExecutor(uvBinary, &uvCmdExecutor{})
40+
func NewClientWithPath(uvBinary string) Client {
41+
return NewClientWithExecutor(uvBinary, &uvCmdExecutor{})
4242
}
4343

44-
// NewUvClientWithExecutor creates a new uv client with a custom executor for testing.
45-
func NewUvClientWithExecutor(uvBinary string, executor cmdExecutor) Client {
44+
// NewClientWithExecutor creates a new uv client with a custom executor for testing.
45+
func NewClientWithExecutor(uvBinary string, executor cmdExecutor) Client {
4646
return &client{
4747
uvBinary: uvBinary,
4848
executor: executor,
@@ -143,7 +143,7 @@ func extractWorkspacePackages(sbom *cycloneDXSBOM) []WorkspacePackage {
143143
var workspacePackages []WorkspacePackage
144144
for _, component := range sbom.Components {
145145
for _, prop := range component.Properties {
146-
if prop.Name == UvWorkspacePathProperty {
146+
if prop.Name == WorkspacePathProperty {
147147
workspacePackages = append(workspacePackages, WorkspacePackage{
148148
Name: component.Name,
149149
Version: component.Version,
@@ -177,7 +177,7 @@ func componentIsProjectRoot(component *cycloneDXComponent) bool {
177177
return false
178178
}
179179
for _, prop := range component.Properties {
180-
if prop.Name == UvIsProjectRootProperty && prop.Value == "true" {
180+
if prop.Name == IsProjectRootProperty && prop.Value == "true" {
181181
return true
182182
}
183183
}

0 commit comments

Comments
 (0)