From d96cc27a3177be32fe656497bbb6e3aabb1ecf22 Mon Sep 17 00:00:00 2001 From: Jerome Ju Date: Mon, 12 Sep 2022 18:05:09 +0000 Subject: [PATCH] V1: Add conversion for PipelineRunSpec.PipelineRef.Bundle This commit adds support for PipelineRef.Bundle when converting between v1beta1 and v1 versions of PipelineRef. This allows us to release v1 PipelineRuns in a backwards compatible way by ensuring that v1beta1 PipelineRuns with Bundle converted to v1 pipelineRuns. --- .../v1beta1/pipeline_conversion_test.go | 5 +-- .../v1beta1/pipelineref_conversion.go | 24 +++++++++++- .../v1beta1/pipelinerun_conversion_test.go | 39 +++++++++++++++++-- .../pipeline/v1beta1/task_conversion_test.go | 5 +-- .../v1beta1/taskrun_conversion_test.go | 5 +-- 5 files changed, 63 insertions(+), 15 deletions(-) diff --git a/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go b/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go index aee4a8f9f32..01ed0592c30 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go @@ -43,8 +43,6 @@ func TestPipelineConversionBadType(t *testing.T) { } func TestPipelineConversion(t *testing.T) { - versions := []apis.Convertible{&v1.Pipeline{}} - tests := []struct { name string in *v1beta1.Pipeline @@ -150,6 +148,7 @@ func TestPipelineConversion(t *testing.T) { }} for _, test := range tests { + versions := []apis.Convertible{&v1.Pipeline{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version @@ -172,7 +171,6 @@ func TestPipelineConversion(t *testing.T) { } func TestPipelineConversionFromDeprecated(t *testing.T) { - versions := []apis.Convertible{&v1.Pipeline{}} tests := []struct { name string in *v1beta1.Pipeline @@ -219,6 +217,7 @@ func TestPipelineConversionFromDeprecated(t *testing.T) { }} for _, test := range tests { + versions := []apis.Convertible{&v1.Pipeline{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version diff --git a/pkg/apis/pipeline/v1beta1/pipelineref_conversion.go b/pkg/apis/pipeline/v1beta1/pipelineref_conversion.go index 59fcad389ff..f748f56c3d0 100644 --- a/pkg/apis/pipeline/v1beta1/pipelineref_conversion.go +++ b/pkg/apis/pipeline/v1beta1/pipelineref_conversion.go @@ -9,17 +9,37 @@ import ( func (pr PipelineRef) convertTo(ctx context.Context, sink *v1.PipelineRef) { sink.Name = pr.Name sink.APIVersion = pr.APIVersion - // TODO: handle bundle in #4546 new := v1.ResolverRef{} pr.ResolverRef.convertTo(ctx, &new) sink.ResolverRef = new + pr.convertBundleToResolver(sink) } func (pr *PipelineRef) convertFrom(ctx context.Context, source v1.PipelineRef) { pr.Name = source.Name pr.APIVersion = source.APIVersion - // TODO: handle bundle in #4546 new := ResolverRef{} new.convertFrom(ctx, source.ResolverRef) pr.ResolverRef = new } + +// convertBundleToResolver converts v1beta1 bundle string to a remote reference with the bundle resolver in v1. +// The conversion from Resolver to Bundle is not being supported since remote resolution would be turned on by +// default and it will be in beta before the stored version of CRD getting swapped to v1. +func (pr PipelineRef) convertBundleToResolver(sink *v1.PipelineRef) { + if pr.Bundle != "" { + sink.ResolverRef = v1.ResolverRef{ + Resolver: "bundles", + Params: []v1.Param{{ + Name: "bundle", + Value: v1.ParamValue{StringVal: pr.Bundle}, + }, { + Name: "name", + Value: v1.ParamValue{StringVal: pr.Name}, + }, { + Name: "kind", + Value: v1.ParamValue{StringVal: "Task"}, + }}, + } + } +} diff --git a/pkg/apis/pipeline/v1beta1/pipelinerun_conversion_test.go b/pkg/apis/pipeline/v1beta1/pipelinerun_conversion_test.go index 181058df6e0..f84c3bbbfb8 100644 --- a/pkg/apis/pipeline/v1beta1/pipelinerun_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/pipelinerun_conversion_test.go @@ -46,8 +46,6 @@ func TestPipelineRunConversionBadType(t *testing.T) { } func TestPipelineRunConversion(t *testing.T) { - versions := []apis.Convertible{&v1.PipelineRun{}} - tests := []struct { name string in *v1beta1.PipelineRun @@ -148,6 +146,7 @@ func TestPipelineRunConversion(t *testing.T) { }, }} for _, test := range tests { + versions := []apis.Convertible{&v1.PipelineRun{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version @@ -170,7 +169,6 @@ func TestPipelineRunConversion(t *testing.T) { } func TestPipelineRunConversionFromDeprecated(t *testing.T) { - versions := []apis.Convertible{&v1.PipelineRun{}} tests := []struct { name string in *v1beta1.PipelineRun @@ -233,9 +231,42 @@ func TestPipelineRunConversionFromDeprecated(t *testing.T) { }, }, }, + }, { + name: "bundle", + in: &v1beta1.PipelineRun{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "bar", + }, + Spec: v1beta1.PipelineRunSpec{ + PipelineRef: &v1beta1.PipelineRef{ + Name: "test-bundle-name", + Bundle: "test-bundle", + }, + }, + }, + want: &v1beta1.PipelineRun{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "bar", + }, + Spec: v1beta1.PipelineRunSpec{ + PipelineRef: &v1beta1.PipelineRef{ + Name: "test-bundle-name", + ResolverRef: v1beta1.ResolverRef{ + Resolver: "bundles", + Params: []v1beta1.Param{ + {Name: "bundle", Value: v1beta1.ParamValue{StringVal: "test-bundle"}}, + {Name: "name", Value: v1beta1.ParamValue{StringVal: "test-bundle-name"}}, + {Name: "kind", Value: v1beta1.ParamValue{StringVal: "Task"}}, + }, + }, + }, + }, + }, }} - // TODO add the cases for bundles #4546 for _, test := range tests { + versions := []apis.Convertible{&v1.PipelineRun{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version diff --git a/pkg/apis/pipeline/v1beta1/task_conversion_test.go b/pkg/apis/pipeline/v1beta1/task_conversion_test.go index 0da5ddd1b74..01617c9bbf1 100644 --- a/pkg/apis/pipeline/v1beta1/task_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/task_conversion_test.go @@ -43,8 +43,6 @@ func TestTaskConversionBadType(t *testing.T) { } func TestTaskConversion(t *testing.T) { - versions := []apis.Convertible{&v1.Task{}} - tests := []struct { name string in *v1beta1.Task @@ -165,6 +163,7 @@ func TestTaskConversion(t *testing.T) { }} for _, test := range tests { + versions := []apis.Convertible{&v1.Task{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version @@ -187,7 +186,6 @@ func TestTaskConversion(t *testing.T) { } func TestTaskConversionFromDeprecated(t *testing.T) { - versions := []apis.Convertible{&v1.Task{}} tests := []struct { name string in *v1beta1.Task @@ -244,6 +242,7 @@ func TestTaskConversionFromDeprecated(t *testing.T) { }, }} for _, test := range tests { + versions := []apis.Convertible{&v1.Task{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version diff --git a/pkg/apis/pipeline/v1beta1/taskrun_conversion_test.go b/pkg/apis/pipeline/v1beta1/taskrun_conversion_test.go index cebadc2250c..5fafae30250 100644 --- a/pkg/apis/pipeline/v1beta1/taskrun_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/taskrun_conversion_test.go @@ -49,8 +49,6 @@ func TestTaskRunConversionBadType(t *testing.T) { } func TestTaskrunConversion(t *testing.T) { - versions := []apis.Convertible{&v1.TaskRun{}} - tests := []struct { name string in *v1beta1.TaskRun @@ -173,6 +171,7 @@ func TestTaskrunConversion(t *testing.T) { }} for _, test := range tests { + versions := []apis.Convertible{&v1.TaskRun{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version @@ -195,7 +194,6 @@ func TestTaskrunConversion(t *testing.T) { } func TestTaskRunConversionFromDeprecated(t *testing.T) { - versions := []apis.Convertible{&v1.TaskRun{}} tests := []struct { name string in *v1beta1.TaskRun @@ -282,6 +280,7 @@ func TestTaskRunConversionFromDeprecated(t *testing.T) { }, }} for _, test := range tests { + versions := []apis.Convertible{&v1.TaskRun{}} for _, version := range versions { t.Run(test.name, func(t *testing.T) { ver := version