From 81b4fbfb744787f2399e018d85b6a7cb1e9d2905 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Tue, 17 Sep 2024 14:21:44 +0200 Subject: [PATCH] Fix isolated workspaces ignored when using StepTemplate Prior to this fix, when one would use isolated workspaces (per step workspace) in a `Task` *and* a `stepTemplate`, the isolated workspace would be ignored and thus mounted in all steps instead. This is now fixed by ensuring we do not loose the `Workspaces` definition from a `Step` when we merge it with a `StepTemplate`. Signed-off-by: Vincent Demeester --- pkg/apis/pipeline/v1/merge.go | 13 ++++++++- pkg/apis/pipeline/v1/merge_test.go | 42 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/pkg/apis/pipeline/v1/merge.go b/pkg/apis/pipeline/v1/merge.go index df413a5456a..b916d8caeb5 100644 --- a/pkg/apis/pipeline/v1/merge.go +++ b/pkg/apis/pipeline/v1/merge.go @@ -65,7 +65,18 @@ func MergeStepsWithStepTemplate(template *StepTemplate, steps []Step) ([]Step, e amendConflictingContainerFields(&merged, s) // Pass through original step Script, for later conversion. - newStep := Step{Script: s.Script, OnError: s.OnError, Timeout: s.Timeout, StdoutConfig: s.StdoutConfig, StderrConfig: s.StderrConfig, Results: s.Results, Params: s.Params, Ref: s.Ref, When: s.When} + newStep := Step{ + Script: s.Script, + OnError: s.OnError, + Timeout: s.Timeout, + StdoutConfig: s.StdoutConfig, + StderrConfig: s.StderrConfig, + Results: s.Results, + Params: s.Params, + Ref: s.Ref, + When: s.When, + Workspaces: s.Workspaces, + } newStep.SetContainerFields(merged) steps[i] = newStep } diff --git a/pkg/apis/pipeline/v1/merge_test.go b/pkg/apis/pipeline/v1/merge_test.go index ab3d598742a..07c24e0ab5a 100644 --- a/pkg/apis/pipeline/v1/merge_test.go +++ b/pkg/apis/pipeline/v1/merge_test.go @@ -269,6 +269,48 @@ func TestMergeStepsWithStepTemplate(t *testing.T) { Image: "some-image", When: v1.StepWhenExpressions{{Input: "foo", Operator: selection.In, Values: []string{"foo", "bar"}}}, }}, + }, { + name: "isolated workspaces", + template: &v1.StepTemplate{ + Env: []corev1.EnvVar{{ + Name: "KEEP_THIS", + Value: "A_VALUE", + }}, + }, + steps: []v1.Step{{ + Image: "some-image", + Workspaces: []v1.WorkspaceUsage{{ + Name: "foo", + MountPath: "/foo/bar", + }}, + }, { + Image: "some-image", + Workspaces: []v1.WorkspaceUsage{{ + Name: "bar", + MountPath: "/bar/baz", + }}, + }}, + expected: []v1.Step{{ + Image: "some-image", + Env: []corev1.EnvVar{{ + Name: "KEEP_THIS", + Value: "A_VALUE", + }}, + Workspaces: []v1.WorkspaceUsage{{ + Name: "foo", + MountPath: "/foo/bar", + }}, + }, { + Image: "some-image", + Env: []corev1.EnvVar{{ + Name: "KEEP_THIS", + Value: "A_VALUE", + }}, + Workspaces: []v1.WorkspaceUsage{{ + Name: "bar", + MountPath: "/bar/baz", + }}, + }}, }} { t.Run(tc.name, func(t *testing.T) { result, err := v1.MergeStepsWithStepTemplate(tc.template, tc.steps)