diff --git a/pkg/cmd/attestation/download/download.go b/pkg/cmd/attestation/download/download.go index 2a297bc9a..86cf08d72 100644 --- a/pkg/cmd/attestation/download/download.go +++ b/pkg/cmd/attestation/download/download.go @@ -144,10 +144,9 @@ func runDownload(opts *Options) error { // Apply predicate type filter to returned attestations if opts.PredicateType != "" { - filteredAttestations := verification.FilterAttestations(opts.PredicateType, attestations) - - if len(filteredAttestations) == 0 { - return fmt.Errorf("no attestations found with predicate type: %s", opts.PredicateType) + filteredAttestations, err := verification.FilterAttestations(opts.PredicateType, attestations) + if err != nil { + return fmt.Errorf("failed to filter attestations: %v", err) } attestations = filteredAttestations diff --git a/pkg/cmd/attestation/verification/attestation.go b/pkg/cmd/attestation/verification/attestation.go index 9757b72c5..ba357a5cc 100644 --- a/pkg/cmd/attestation/verification/attestation.go +++ b/pkg/cmd/attestation/verification/attestation.go @@ -97,7 +97,7 @@ type IntotoStatement struct { PredicateType string `json:"predicateType"` } -func FilterAttestations(predicateType string, attestations []*api.Attestation) []*api.Attestation { +func FilterAttestations(predicateType string, attestations []*api.Attestation) ([]*api.Attestation, error) { filteredAttestations := []*api.Attestation{} for _, each := range attestations { @@ -118,5 +118,9 @@ func FilterAttestations(predicateType string, attestations []*api.Attestation) [ } } - return filteredAttestations + if len(filteredAttestations) == 0 { + return nil, fmt.Errorf("no attestations found with predicate type: %s", predicateType) + } + + return filteredAttestations, nil } diff --git a/pkg/cmd/attestation/verification/attestation_test.go b/pkg/cmd/attestation/verification/attestation_test.go index 8acff0c37..55a447cf4 100644 --- a/pkg/cmd/attestation/verification/attestation_test.go +++ b/pkg/cmd/attestation/verification/attestation_test.go @@ -157,10 +157,11 @@ func TestFilterAttestations(t *testing.T) { }, } - filtered := FilterAttestations("https://slsa.dev/provenance/v1", attestations) - + filtered, err := FilterAttestations("https://slsa.dev/provenance/v1", attestations) require.Len(t, filtered, 1) + require.NoError(t, err) - filtered = FilterAttestations("NonExistentPredicate", attestations) + filtered, err = FilterAttestations("NonExistentPredicate", attestations) require.Len(t, filtered, 0) + require.NoError(t, err) } diff --git a/pkg/cmd/attestation/verify/attestation.go b/pkg/cmd/attestation/verify/attestation.go index f91526bbd..c09b433b0 100644 --- a/pkg/cmd/attestation/verify/attestation.go +++ b/pkg/cmd/attestation/verify/attestation.go @@ -9,16 +9,6 @@ import ( "github.com/cli/cli/v2/pkg/cmd/attestation/verification" ) -func filterByPredicateType(predicateType string, attestations []*api.Attestation) ([]*api.Attestation, string, error) { - // Apply predicate type filter to returned attestations - filteredAttestations := verification.FilterAttestations(predicateType, attestations) - if len(filteredAttestations) == 0 { - msg := fmt.Sprintf("✗ No attestations found with predicate type: %s\n", predicateType) - return nil, msg, fmt.Errorf("no matching predicate found") - } - return filteredAttestations, "", nil -} - func getAttestations(o *Options, a artifact.DigestedArtifact) ([]*api.Attestation, string, error) { if o.FetchAttestationsFromGitHubAPI() { params := api.FetchParams{ @@ -58,9 +48,9 @@ func getAttestations(o *Options, a artifact.DigestedArtifact) ([]*api.Attestatio return nil, errMsg, err } - filtered, errMsg, err := filterByPredicateType(o.PredicateType, attestations) + filtered, err := verification.FilterAttestations(o.PredicateType, attestations) if err != nil { - return nil, errMsg, err + return nil, err.Error(), err } pluralAttestation := text.Pluralize(len(filtered), "attestation")