diff --git a/pkg/artifacts/signable.go b/pkg/artifacts/signable.go index 713b43f015..4f4389e8ec 100644 --- a/pkg/artifacts/signable.go +++ b/pkg/artifacts/signable.go @@ -266,6 +266,10 @@ func extractTargetFromResults(obj objects.TektonObject, identifierSuffix string, for _, res := range obj.GetResults() { if strings.HasSuffix(res.Name, identifierSuffix) { + if res.Value.StringVal == "" { + logger.Debugf("error getting string value for %s", res.Name) + continue + } marker := strings.TrimSuffix(res.Name, identifierSuffix) if v, ok := ss[marker]; ok { v.URI = strings.TrimSpace(res.Value.StringVal) @@ -276,6 +280,10 @@ func extractTargetFromResults(obj objects.TektonObject, identifierSuffix string, // TODO: add logic for Intoto signable target as input. } if strings.HasSuffix(res.Name, digestSuffix) { + if res.Value.StringVal == "" { + logger.Debugf("error getting string value for %s", res.Name) + continue + } marker := strings.TrimSuffix(res.Name, digestSuffix) if v, ok := ss[marker]; ok { v.Digest = strings.TrimSpace(res.Value.StringVal) @@ -319,23 +327,11 @@ func ExtractStructuredTargetFromResults(obj objects.TektonObject, categoryMarker // TODO(#592): support structured results using Run results := []objects.Result{} - tr, isTaskRun := obj.GetObject().(*v1beta1.TaskRun) - if isTaskRun { - for _, res := range tr.Status.TaskRunResults { - results = append(results, objects.Result{ - Name: res.Name, - Value: res.Value, - }) - } - - } else { - pr := obj.GetObject().(*v1beta1.PipelineRun) - for _, res := range pr.Status.PipelineResults { - results = append(results, objects.Result{ - Name: res.Name, - Value: res.Value, - }) - } + for _, res := range obj.GetResults() { + results = append(results, objects.Result{ + Name: res.Name, + Value: res.Value, + }) } for _, res := range results { if strings.HasSuffix(res.Name, categoryMarker) { diff --git a/pkg/artifacts/signable_test.go b/pkg/artifacts/signable_test.go index f44105f55c..291197b18f 100644 --- a/pkg/artifacts/signable_test.go +++ b/pkg/artifacts/signable_test.go @@ -320,6 +320,8 @@ func TestExtractOCIImagesFromResults(t *testing.T) { {Name: "IMAGE_DIGEST", Value: *v1beta1.NewArrayOrString(digest1)}, {Name: "img4_IMAGE_URL", Value: *v1beta1.NewArrayOrString("img4")}, {Name: "img5_IMAGE_DIGEST", Value: *v1beta1.NewArrayOrString("sha123:abc")}, + {Name: "empty_str_IMAGE_DIGEST", Value: *v1beta1.NewArrayOrString("")}, + {Name: "empty_str_IMAGE_URL", Value: *v1beta1.NewArrayOrString("")}, }, }, }, diff --git a/pkg/chains/objects/objects.go b/pkg/chains/objects/objects.go index 9e9828d434..dc96b620d4 100644 --- a/pkg/chains/objects/objects.go +++ b/pkg/chains/objects/objects.go @@ -176,11 +176,8 @@ func (pro *PipelineRunObject) GetResults() []Result { res := []Result{} for _, key := range pro.Status.PipelineResults { res = append(res, Result{ - Name: key.Name, - Value: v1beta1.ArrayOrString{ - Type: v1beta1.ParamTypeString, - StringVal: key.Value.StringVal, - }, + Name: key.Name, + Value: key.Value, }) } return res diff --git a/pkg/chains/objects/objects_test.go b/pkg/chains/objects/objects_test.go index b65b29de21..e71f7cb92a 100644 --- a/pkg/chains/objects/objects_test.go +++ b/pkg/chains/objects/objects_test.go @@ -43,7 +43,21 @@ func getTaskRun() *v1beta1.TaskRun { Name: "foo", Namespace: "objects-test", }, - Spec: v1beta1.TaskRunSpec{}, + Status: v1beta1.TaskRunStatus{ + TaskRunStatusFields: v1beta1.TaskRunStatusFields{ + TaskRunResults: []v1beta1.TaskRunResult{ + { + Name: "img1_input_ARTIFACT_INPUTS", + Value: *v1beta1.NewObject(map[string]string{ + "uri": "gcr.io/foo/bar", + "digest": "sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b7", + }), + }, + {Name: "mvn1_ARTIFACT_URI", Value: *v1beta1.NewArrayOrString("projects/test-project/locations/us-west4/repositories/test-repo/mavenArtifacts/com.google.guava:guava:31.0-jre")}, + {Name: "mvn1_ARTIFACT_DIGEST", Value: *v1beta1.NewArrayOrString("sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5")}, + }, + }, + }, } } @@ -54,6 +68,21 @@ func getPipelineRun() *v1beta1.PipelineRun { Namespace: "objects-test", }, Spec: v1beta1.PipelineRunSpec{}, + Status: v1beta1.PipelineRunStatus{ + PipelineRunStatusFields: v1beta1.PipelineRunStatusFields{ + PipelineResults: []v1beta1.PipelineRunResult{ + { + Name: "img1_input_ARTIFACT_INPUTS", + Value: *v1beta1.NewObject(map[string]string{ + "uri": "gcr.io/foo/bar", + "digest": "sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b7", + }), + }, + {Name: "mvn1_ARTIFACT_URI", Value: *v1beta1.NewArrayOrString("projects/test-project/locations/us-west4/repositories/test-repo/mavenArtifacts/com.google.guava:guava:31.0-jre")}, + {Name: "mvn1_ARTIFACT_DIGEST", Value: *v1beta1.NewArrayOrString("sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5")}, + }, + }, + }, } } @@ -127,3 +156,43 @@ func TestPipelineRun_ImagePullSecrets(t *testing.T) { }) } } + +func TestPipelineRun_GetResults(t *testing.T) { + + t.Run("TestPipelineRun_GetResults", func(t *testing.T) { + pr := NewPipelineRunObject(getPipelineRun()) + got := pr.GetResults() + assert.ElementsMatch(t, got, []Result{ + { + Name: "img1_input_ARTIFACT_INPUTS", + Value: *v1beta1.NewObject(map[string]string{ + "uri": "gcr.io/foo/bar", + "digest": "sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b7", + }), + }, + {Name: "mvn1_ARTIFACT_URI", Value: *v1beta1.NewArrayOrString("projects/test-project/locations/us-west4/repositories/test-repo/mavenArtifacts/com.google.guava:guava:31.0-jre")}, + {Name: "mvn1_ARTIFACT_DIGEST", Value: *v1beta1.NewArrayOrString("sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5")}, + }) + }) + +} + +func TestTaskRun_GetResults(t *testing.T) { + + t.Run("TestTaskRun_GetResults", func(t *testing.T) { + pr := NewTaskRunObject(getTaskRun()) + got := pr.GetResults() + assert.ElementsMatch(t, got, []Result{ + { + Name: "img1_input_ARTIFACT_INPUTS", + Value: *v1beta1.NewObject(map[string]string{ + "uri": "gcr.io/foo/bar", + "digest": "sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b7", + }), + }, + {Name: "mvn1_ARTIFACT_URI", Value: *v1beta1.NewArrayOrString("projects/test-project/locations/us-west4/repositories/test-repo/mavenArtifacts/com.google.guava:guava:31.0-jre")}, + {Name: "mvn1_ARTIFACT_DIGEST", Value: *v1beta1.NewArrayOrString("sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5")}, + }) + }) + +}