diff --git a/pkg/reconciler/pipelinerun/resources/apply.go b/pkg/reconciler/pipelinerun/resources/apply.go index db6388e254e..33cb61e83c2 100644 --- a/pkg/reconciler/pipelinerun/resources/apply.go +++ b/pkg/reconciler/pipelinerun/resources/apply.go @@ -93,7 +93,8 @@ func ApplyTaskResults(targets PipelineRunState, resolvedResultRefs ResolvedResul func ApplyReplacements(p *v1beta1.PipelineSpec, replacements map[string]string, arrayReplacements map[string][]string) *v1beta1.PipelineSpec { p = p.DeepCopy() - tasks := p.Tasks + // 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) diff --git a/pkg/reconciler/pipelinerun/resources/apply_test.go b/pkg/reconciler/pipelinerun/resources/apply_test.go index 4cf0ac5ef9b..bac752218ab 100644 --- a/pkg/reconciler/pipelinerun/resources/apply_test.go +++ b/pkg/reconciler/pipelinerun/resources/apply_test.go @@ -134,6 +134,27 @@ func TestApplyParameters(t *testing.T) { tb.PipelineTaskParam("first-task-third-param", "static value"), tb.PipelineTaskParam("first-task-fourth-param", "first", "fourth-value", "array"), ))), + }, { + name: "parameter evaluation with 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.FinalPipelineTask("final-task-1", "final-task", + tb.PipelineTaskParam("final-task-first-param", "$(params.first-param)"), + 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.FinalPipelineTask("final-task-1", "final-task", + tb.PipelineTaskParam("final-task-first-param", "default-value"), + tb.PipelineTaskParam("final-task-second-param", "second-value"), + ))), }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {