Skip to content

Commit 9ed9e12

Browse files
lbernicktekton-robot
authored andcommitted
Fix embedded-status conversion for PipelineRuns
This commit updates conversion for PipelineRun child objects stored in the status to depend on the value of the feature flag `embedded-status`.
1 parent be1ce9d commit 9ed9e12

File tree

3 files changed

+182
-102
lines changed

3 files changed

+182
-102
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package testing
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/tektoncd/pipeline/pkg/apis/config"
8+
)
9+
10+
// SetEmbeddedStatus sets the "embedded-status" feature flag in an existing context (for use in testing)
11+
func SetEmbeddedStatus(ctx context.Context, t *testing.T, embeddedStatus string) context.Context {
12+
t.Helper()
13+
flags, err := config.NewFeatureFlagsFromMap(map[string]string{
14+
"embedded-status": embeddedStatus,
15+
})
16+
if err != nil {
17+
t.Fatalf("error creating feature flags from map: %v", err)
18+
}
19+
cfg := &config.Config{
20+
FeatureFlags: flags,
21+
}
22+
ctx = config.ToContext(ctx, cfg)
23+
return ctx
24+
}

pkg/apis/pipeline/v1beta1/pipelinerun_conversion.go

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"fmt"
2222

23+
"github.com/tektoncd/pipeline/pkg/apis/config"
2324
v1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
2425
"github.com/tektoncd/pipeline/pkg/apis/version"
2526
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -54,7 +55,7 @@ func (pr *PipelineRun) ConvertTo(ctx context.Context, to apis.Convertible) error
5455
if err := serializePipelineRunStatusRuns(&sink.ObjectMeta, &pr.Status); err != nil {
5556
return err
5657
}
57-
if err := pr.Status.ConvertTo(ctx, &sink.Status); err != nil {
58+
if err := pr.Status.convertTo(ctx, &sink.Status); err != nil {
5859
return err
5960
}
6061
return pr.Spec.ConvertTo(ctx, &sink.Spec)
@@ -117,13 +118,15 @@ func (pr *PipelineRun) ConvertFrom(ctx context.Context, from apis.Convertible) e
117118
if err := deserializePipelineRunResources(&pr.ObjectMeta, &pr.Spec); err != nil {
118119
return err
119120
}
120-
if err := deserializePipelineRunStatusTaskRuns(&pr.ObjectMeta, &pr.Status); err != nil {
121+
taskRuns, err := deserializePipelineRunStatusTaskRuns(&pr.ObjectMeta)
122+
if err != nil {
121123
return err
122124
}
123-
if err := deserializePipelineRunStatusRuns(&pr.ObjectMeta, &pr.Status); err != nil {
125+
runs, err := deserializePipelineRunStatusRuns(&pr.ObjectMeta)
126+
if err != nil {
124127
return err
125128
}
126-
if err := pr.Status.ConvertFrom(ctx, &source.Status); err != nil {
129+
if err := pr.Status.convertFrom(ctx, &source.Status, taskRuns, runs); err != nil {
127130
return err
128131
}
129132
return pr.Spec.ConvertFrom(ctx, &source.Spec)
@@ -235,8 +238,7 @@ func (ptrs *PipelineTaskRunSpec) convertFrom(ctx context.Context, source v1.Pipe
235238
ptrs.ComputeResources = source.ComputeResources
236239
}
237240

238-
// ConvertTo implements apis.Convertible
239-
func (prs *PipelineRunStatus) ConvertTo(ctx context.Context, sink *v1.PipelineRunStatus) error {
241+
func (prs *PipelineRunStatus) convertTo(ctx context.Context, sink *v1.PipelineRunStatus) error {
240242
sink.Status = prs.Status
241243
sink.StartTime = prs.StartTime
242244
sink.CompletionTime = prs.CompletionTime
@@ -271,6 +273,7 @@ func (prs *PipelineRunStatus) ConvertTo(ctx context.Context, sink *v1.PipelineRu
271273
prs.Provenance.convertTo(ctx, &new)
272274
sink.Provenance = &new
273275
}
276+
274277
// If embedded-status is set to "both", both ChildReferences and TaskRuns/Runs
275278
// will be populated. In this case, use the value from ChildReferences.
276279
if sink.ChildReferences == nil {
@@ -284,8 +287,7 @@ func (prs *PipelineRunStatus) ConvertTo(ctx context.Context, sink *v1.PipelineRu
284287
return nil
285288
}
286289

287-
// ConvertFrom implements apis.Convertible
288-
func (prs *PipelineRunStatus) ConvertFrom(ctx context.Context, source *v1.PipelineRunStatus) error {
290+
func (prs *PipelineRunStatus) convertFrom(ctx context.Context, source *v1.PipelineRunStatus, taskRuns map[string]*PipelineRunTaskRunStatus, runs map[string]*PipelineRunRunStatus) error {
289291
prs.Status = source.Status
290292
prs.StartTime = source.StartTime
291293
prs.CompletionTime = source.CompletionTime
@@ -309,12 +311,20 @@ func (prs *PipelineRunStatus) ConvertFrom(ctx context.Context, source *v1.Pipeli
309311
new.convertFrom(ctx, st)
310312
prs.SkippedTasks = append(prs.SkippedTasks, new)
311313
}
312-
prs.ChildReferences = nil
313-
for _, cr := range source.ChildReferences {
314-
new := ChildStatusReference{}
315-
new.convertFrom(ctx, cr)
316-
prs.ChildReferences = append(prs.ChildReferences, new)
314+
embeddedStatus := config.FromContextOrDefaults(ctx).FeatureFlags.EmbeddedStatus
315+
if embeddedStatus == config.BothEmbeddedStatus || embeddedStatus == config.MinimalEmbeddedStatus {
316+
prs.ChildReferences = nil
317+
for _, cr := range source.ChildReferences {
318+
new := ChildStatusReference{}
319+
new.convertFrom(ctx, cr)
320+
prs.ChildReferences = append(prs.ChildReferences, new)
321+
}
322+
}
323+
if embeddedStatus == config.BothEmbeddedStatus || embeddedStatus == config.FullEmbeddedStatus {
324+
prs.TaskRuns = taskRuns
325+
prs.Runs = runs
317326
}
327+
318328
prs.FinallyStartTime = source.FinallyStartTime
319329
if source.Provenance != nil {
320330
new := Provenance{}
@@ -453,16 +463,13 @@ func serializePipelineRunStatusTaskRuns(meta *metav1.ObjectMeta, status *Pipelin
453463
return version.SerializeToMetadata(meta, status.TaskRuns, taskRunsAnnotationKey)
454464
}
455465

456-
func deserializePipelineRunStatusTaskRuns(meta *metav1.ObjectMeta, status *PipelineRunStatus) error {
466+
func deserializePipelineRunStatusTaskRuns(meta *metav1.ObjectMeta) (map[string]*PipelineRunTaskRunStatus, error) {
457467
taskRuns := make(map[string]*PipelineRunTaskRunStatus)
458468
err := version.DeserializeFromMetadata(meta, &taskRuns, taskRunsAnnotationKey)
459469
if err != nil {
460-
return err
470+
return nil, err
461471
}
462-
if len(taskRuns) != 0 {
463-
status.TaskRuns = taskRuns
464-
}
465-
return nil
472+
return taskRuns, nil
466473
}
467474

468475
func serializePipelineRunStatusRuns(meta *metav1.ObjectMeta, status *PipelineRunStatus) error {
@@ -472,14 +479,11 @@ func serializePipelineRunStatusRuns(meta *metav1.ObjectMeta, status *PipelineRun
472479
return version.SerializeToMetadata(meta, status.Runs, runsAnnotationKey)
473480
}
474481

475-
func deserializePipelineRunStatusRuns(meta *metav1.ObjectMeta, status *PipelineRunStatus) error {
482+
func deserializePipelineRunStatusRuns(meta *metav1.ObjectMeta) (map[string]*PipelineRunRunStatus, error) {
476483
runs := make(map[string]*PipelineRunRunStatus)
477484
err := version.DeserializeFromMetadata(meta, &runs, runsAnnotationKey)
478485
if err != nil {
479-
return err
480-
}
481-
if len(runs) != 0 {
482-
status.Runs = runs
486+
return nil, err
483487
}
484-
return nil
488+
return runs, nil
485489
}

0 commit comments

Comments
 (0)