diff --git a/pkg/reconciler/pipelinerun/resources/apply.go b/pkg/reconciler/pipelinerun/resources/apply.go index 3c34275a0b8..d216b09e364 100644 --- a/pkg/reconciler/pipelinerun/resources/apply.go +++ b/pkg/reconciler/pipelinerun/resources/apply.go @@ -88,16 +88,17 @@ func ApplyTaskResults(targets PipelineRunState, resolvedResultRefs ResolvedResul func ApplyReplacements(p *v1beta1.PipelineSpec, replacements map[string]string, arrayReplacements map[string][]string) *v1beta1.PipelineSpec { p = p.DeepCopy() - // replace param values for both DAG and final tasks - tasks := append(p.Tasks, p.Finally...) - - for i := range tasks { - tasks[i].Params = replaceParamValues(tasks[i].Params, replacements, arrayReplacements) - for j := range tasks[i].Conditions { - c := tasks[i].Conditions[j] + for i := range p.Tasks { + p.Tasks[i].Params = replaceParamValues(p.Tasks[i].Params, replacements, arrayReplacements) + for j := range p.Tasks[i].Conditions { + c := p.Tasks[i].Conditions[j] c.Params = replaceParamValues(c.Params, replacements, arrayReplacements) } - tasks[i].WhenExpressions = tasks[i].WhenExpressions.ReplaceWhenExpressionsVariables(replacements) + p.Tasks[i].WhenExpressions = p.Tasks[i].WhenExpressions.ReplaceWhenExpressionsVariables(replacements) + } + + for i := range p.Finally { + p.Finally[i].Params = replaceParamValues(p.Finally[i].Params, replacements, arrayReplacements) } return p diff --git a/pkg/reconciler/pipelinerun/resources/apply_test.go b/pkg/reconciler/pipelinerun/resources/apply_test.go index 15fbd5f5581..7f0ac734209 100644 --- a/pkg/reconciler/pipelinerun/resources/apply_test.go +++ b/pkg/reconciler/pipelinerun/resources/apply_test.go @@ -174,6 +174,35 @@ func TestApplyParameters(t *testing.T) { tb.PipelineTaskParam("final-task-first-param", "default-value"), tb.PipelineTaskParam("final-task-second-param", "second-value"), ))), + }, { + name: "parameter evaluation with both tasks and final tasks", + original: tb.Pipeline("test-pipeline", + tb.PipelineSpec( + tb.PipelineParamSpec("first-param", v1beta1.ParamTypeString, tb.ParamSpecDefault("default-value")), + tb.PipelineParamSpec("second-param", v1beta1.ParamTypeString), + tb.PipelineTask("first-task-1", "first-task", + tb.PipelineTaskParam("first-task-first-param", "$(params.first-param)"), + ), + tb.PipelineTask("first-task-2", "first-task", + tb.PipelineTaskWhenExpression("$(params.first-param)", selection.In, []string{"$(params.second-param)"})), + tb.FinalPipelineTask("final-task-1", "final-task", + tb.PipelineTaskParam("final-task-second-param", "$(params.second-param)"), + ))), + run: tb.PipelineRun("test-pipeline-run", + tb.PipelineRunSpec("test-pipeline", + tb.PipelineRunParam("second-param", "second-value"))), + expected: tb.Pipeline("test-pipeline", + tb.PipelineSpec( + tb.PipelineParamSpec("first-param", v1beta1.ParamTypeString, tb.ParamSpecDefault("default-value")), + tb.PipelineParamSpec("second-param", v1beta1.ParamTypeString), + tb.PipelineTask("first-task-1", "first-task", + tb.PipelineTaskParam("first-task-first-param", "default-value"), + ), + tb.PipelineTask("first-task-2", "first-task", + tb.PipelineTaskWhenExpression("default-value", selection.In, []string{"second-value"})), + tb.FinalPipelineTask("final-task-1", "final-task", + tb.PipelineTaskParam("final-task-second-param", "second-value"), + ))), }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {