Skip to content

Commit 1e2e2e7

Browse files
authored
log error but return nil to ensure deps.dev continues if package is not found (#2416)
* log error but return nil to ensure deps.dev continues if package is not found Signed-off-by: pxp928 <[email protected]> * add unit test for invalid package and esure it does not error but just log the error Signed-off-by: pxp928 <[email protected]> * move error logging from private function and add comments on why we are logging the error Signed-off-by: pxp928 <[email protected]> --------- Signed-off-by: pxp928 <[email protected]>
1 parent 6dad00a commit 1e2e2e7

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

internal/client/depsdevclient/deps_dev_client.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,19 @@ func (d *DepsClient) RetrieveDependencies(ctx context.Context, purls []string) e
315315
// GetDependencies gets the information about dependencies for a PURL. This should be called after a
316316
// call to RetrieveDependencies.
317317
func (d *DepsClient) GetDependencies(ctx context.Context, purls []string) ([]*PackageComponent, error) {
318+
logger := logging.FromContext(ctx)
318319
var pcs []*PackageComponent
319320
for _, purl := range purls {
320321
pc, err := d.getDependenciesForPurl(ctx, purl)
322+
// log the error message if getDependenciesForPurl are not found but continue forward
323+
// this is to because there will be packages that deps.dev does not know about thus,
324+
// we will skip those and move forward.
321325
if err != nil {
322-
return nil, fmt.Errorf("failed to getDependencies for purl %v, with err: %w", purl, err)
326+
logger.Debugf("failed to getDependenciesForPurl with error: %v", err)
327+
}
328+
if pc != nil {
329+
pcs = append(pcs, pc)
323330
}
324-
pcs = append(pcs, pc)
325331
}
326332
return pcs, nil
327333
}
@@ -334,51 +340,46 @@ func (d *DepsClient) getDependenciesForPurl(ctx context.Context, purl string) (*
334340

335341
packageInput, err := helpers.PurlToPkg(purl)
336342
if err != nil {
337-
logger.Infof("failed to parse purl to pkg: %s", purl)
338-
return nil, fmt.Errorf("failed to parse purl to pkg: %w", err)
343+
return nil, fmt.Errorf("failed to parse purl to pkg: %s", purl)
339344
}
340345

341346
// skip all type guac as they are generated by guac and will not be found in deps.dev
342347
if packageInput.Type == "guac" {
343-
logger.Debugf("guac purl, skipping deps.dev query: %s", purl)
344-
return nil, nil
348+
return nil, fmt.Errorf("guac purl, skipping deps.dev query: %s", purl)
345349
}
346350

347351
// if version is not specified, cannot obtain accurate information from deps.dev. Log as info and skip the purl.
348352
if *packageInput.Version == "" {
349-
logger.Infof("purl does not contain version, skipping deps.dev query: %s", purl)
350-
return nil, nil
353+
return nil, fmt.Errorf("purl does not contain version, skipping deps.dev query: %s", purl)
351354
}
352355

353356
component.CurrentPackage = packageInput
354357

355-
err = d.collectAdditionalMetadata(ctx, packageInput.Type, packageInput.Namespace, packageInput.Name, packageInput.Version, component)
356-
if err != nil {
357-
logger.Debugf("failed to get additional metadata for package: %s, err: %v", purl, err)
358+
if err := d.collectAdditionalMetadata(ctx, packageInput.Type, packageInput.Namespace, packageInput.Name, packageInput.Version, component); err != nil {
359+
return nil, fmt.Errorf("failed to get additional metadata for package: %s, err: %w", purl, err)
358360
}
359361

360362
// Make an RPC Request. The returned result is a stream of
361363
// DependenciesResponse structs.
362364
versionKey, err := getVersionKey(packageInput.Type, packageInput.Namespace, packageInput.Name, packageInput.Version)
363365
if err != nil {
364-
logger.Infof("failed to getVersionKey with the following error: %v", err)
365-
return nil, err
366+
return nil, fmt.Errorf("failed to getVersionKey with the following error: %w", err)
366367
}
367368

368369
dependenciesReq := &pb.GetDependenciesRequest{
369370
VersionKey: versionKey,
370371
}
371372
var deps *pb.Dependencies
373+
var clientDepsErr error
372374
if _, ok := d.dependencies[versionKey.String()]; ok {
373375
deps = d.dependencies[versionKey.String()]
374376
} else {
375377
logger.Debugf("The version key was not found in the map: %v", versionKey)
376-
deps, err = d.client.GetDependencies(ctx, dependenciesReq)
377-
if err != nil {
378-
logger.Debugf("failed to get dependencies: %v", err)
379-
return nil, err
378+
deps, clientDepsErr = d.client.GetDependencies(ctx, dependenciesReq)
379+
if clientDepsErr != nil {
380+
return nil, fmt.Errorf("failed to get dependencies: %w", clientDepsErr)
380381
}
381-
logger.Infof("Retrieved dependencies for %s", purl)
382+
logger.Debugf("Retrieved dependencies for %s", purl)
382383
d.dependencies[versionKey.String()] = deps
383384
}
384385

@@ -405,7 +406,7 @@ func (d *DepsClient) getDependenciesForPurl(ctx context.Context, purl string) (*
405406
depPurl := "pkg:" + pkgtype + "/" + node.VersionKey.Name + "@" + node.VersionKey.Version
406407
depPackageInput, err := helpers.PurlToPkg(depPurl)
407408
if err != nil {
408-
logger.Infof("unable to parse purl: %v, error: %v", depPurl, err)
409+
logger.Debugf("unable to parse purl: %v, error: %v", depPurl, err)
409410
continue
410411
}
411412
// check if dependent package purl has already been queried. If found, append to the list of dependent packages for top level package
@@ -418,8 +419,8 @@ func (d *DepsClient) getDependenciesForPurl(ctx context.Context, purl string) (*
418419
continue
419420
}
420421
depComponent.CurrentPackage = depPackageInput
421-
err = d.collectAdditionalMetadata(ctx, depPackageInput.Type, depPackageInput.Namespace, depPackageInput.Name, depPackageInput.Version, depComponent)
422-
if err != nil {
422+
if err := d.collectAdditionalMetadata(ctx, depPackageInput.Type, depPackageInput.Namespace, depPackageInput.Name, depPackageInput.Version, depComponent); err != nil {
423+
// if additional metadata is not found (not found in deps.dev) log the error and move forward
423424
logger.Debugf("failed to get additional metadata for package: %s, err: %v", depPurl, err)
424425
}
425426
dependencyNodes = append(dependencyNodes, depComponent)

internal/client/depsdevclient/deps_dev_client_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func Test_depsCollector_GetX(t *testing.T) {
6868
{
6969
name: "invalid packages",
7070
packages: []string{"not-a-package"},
71-
wantErr: true,
71+
wantErr: false,
7272
},
7373
{
7474
name: "org.webjars.npm:a maven package",
@@ -380,6 +380,10 @@ func Test_depsCollector_GetDependenciesEq(t *testing.T) {
380380
name: "multiple different packages",
381381
packages: []string{"pkg:cargo/[email protected]", "pkg:npm/[email protected]"},
382382
},
383+
{
384+
name: "deb package - invalid",
385+
packages: []string{"pkg:deb/org.webjars.npm/[email protected]"},
386+
},
383387
}
384388
for _, tt := range tests {
385389
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)