@@ -463,7 +463,7 @@ func isCustomTask(ctx context.Context, rprt ResolvedPipelineRunTask) bool {
463463
464464// ResolvePipelineRunTask retrieves a single Task's instance using the getTask to fetch
465465// the spec. If it is unable to retrieve an instance of a referenced Task, it will return
466- // an error, otherwise it returns a list of all of the Tasks retrieved. It will retrieve
466+ // an error, otherwise it returns a list of all the Tasks retrieved. It will retrieve
467467// the Resources needed for the TaskRun using the mapping of providedResources.
468468func ResolvePipelineRunTask (
469469 ctx context.Context ,
@@ -472,91 +472,124 @@ func ResolvePipelineRunTask(
472472 getTaskRun resources.GetTaskRun ,
473473 getRun GetRun ,
474474 getCondition GetCondition ,
475- task v1beta1.PipelineTask ,
475+ pipelineTask v1beta1.PipelineTask ,
476476 providedResources map [string ]* resourcev1alpha1.PipelineResource ,
477477) (* ResolvedPipelineRunTask , error ) {
478-
479478 rprt := ResolvedPipelineRunTask {
480- PipelineTask : & task ,
479+ PipelineTask : & pipelineTask ,
481480 }
482481 rprt .CustomTask = isCustomTask (ctx , rprt )
483482 if rprt .IsCustomTask () {
484- rprt .RunName = getRunName (pipelineRun .Status .Runs , pipelineRun .Status .ChildReferences , task .Name , pipelineRun .Name )
483+ rprt .RunName = getRunName (pipelineRun .Status .Runs , pipelineRun .Status .ChildReferences , pipelineTask .Name , pipelineRun .Name )
485484 run , err := getRun (rprt .RunName )
486485 if err != nil && ! kerrors .IsNotFound (err ) {
487486 return nil , fmt .Errorf ("error retrieving Run %s: %w" , rprt .RunName , err )
488487 }
489488 rprt .Run = run
490489 } else {
491- rprt .TaskRunName = GetTaskRunName (pipelineRun .Status .TaskRuns , pipelineRun .Status .ChildReferences , task .Name , pipelineRun .Name )
492-
493- taskRun , err := getTaskRun (rprt .TaskRunName )
494- if err != nil {
495- if ! kerrors .IsNotFound (err ) {
496- return nil , fmt .Errorf ("error retrieving TaskRun %s: %w" , rprt .TaskRunName , err )
497- }
498- }
499- if taskRun != nil {
500- rprt .TaskRun = taskRun
490+ rprt .TaskRunName = GetTaskRunName (pipelineRun .Status .TaskRuns , pipelineRun .Status .ChildReferences , pipelineTask .Name , pipelineRun .Name )
491+ if err := resolvePipelineRunTaskWithTaskRun (ctx , & rprt , rprt .TaskRunName , pipelineRun , getTask , getTaskRun , getCondition , pipelineTask , providedResources ); err != nil {
492+ return nil , err
501493 }
494+ }
495+ return & rprt , nil
496+ }
502497
503- // Find the Task that this PipelineTask is using
504- spec , taskName , kind , err := resolveTask (ctx , taskRun , getTask , task )
505- if err != nil {
506- return nil , err
498+ func resolvePipelineRunTaskWithTaskRun (
499+ ctx context.Context ,
500+ rprt * ResolvedPipelineRunTask ,
501+ taskRunName string ,
502+ pipelineRun v1beta1.PipelineRun ,
503+ getTask resources.GetTask ,
504+ getTaskRun resources.GetTaskRun ,
505+ getCondition GetCondition ,
506+ pipelineTask v1beta1.PipelineTask ,
507+ providedResources map [string ]* resourcev1alpha1.PipelineResource ,
508+ ) error {
509+ taskRun , err := getTaskRun (taskRunName )
510+ if err != nil {
511+ if ! kerrors .IsNotFound (err ) {
512+ return fmt .Errorf ("error retrieving TaskRun %s: %w" , taskRunName , err )
507513 }
514+ }
515+ rprt .TaskRun = taskRun
508516
509- spec .SetDefaults (ctx )
510- rtr , err := resolvePipelineTaskResources (task , & spec , taskName , kind , providedResources )
517+ rtr , err := resolveTaskResources (ctx , getTask , pipelineTask , providedResources , taskRun )
518+ if err != nil {
519+ return err
520+ }
521+ rprt .ResolvedTaskResources = rtr
522+
523+ // Get all conditions that this pipelineTask will be using, if any
524+ if len (pipelineTask .Conditions ) > 0 {
525+ rcc , err := resolveConditionChecks (& pipelineTask , pipelineRun .Status .TaskRuns , pipelineRun .Status .ChildReferences , rprt .TaskRunName , getTaskRun , getCondition , providedResources )
511526 if err != nil {
512- return nil , fmt . Errorf ( "couldn't match referenced resources with declared resources: %w" , err )
527+ return err
513528 }
529+ rprt .ResolvedConditionChecks = rcc
530+ }
531+ return nil
532+ }
514533
515- rprt .ResolvedTaskResources = rtr
534+ func resolveTaskResources (
535+ ctx context.Context ,
536+ getTask resources.GetTask ,
537+ pipelineTask v1beta1.PipelineTask ,
538+ providedResources map [string ]* resourcev1alpha1.PipelineResource ,
539+ taskRun * v1beta1.TaskRun ,
540+ ) (* resources.ResolvedTaskResources , error ) {
516541
517- // Get all conditions that this pipelineTask will be using, if any
518- if len (task .Conditions ) > 0 {
519- rcc , err := resolveConditionChecks (& task , pipelineRun .Status .TaskRuns , pipelineRun .Status .ChildReferences , rprt .TaskRunName , getTaskRun , getCondition , providedResources )
520- if err != nil {
521- return nil , err
522- }
523- rprt .ResolvedConditionChecks = rcc
524- }
542+ spec , taskName , kind , err := resolveTask (ctx , taskRun , getTask , pipelineTask )
543+ if err != nil {
544+ return nil , err
525545 }
526- return & rprt , nil
546+
547+ spec .SetDefaults (ctx )
548+ rtr , err := resolvePipelineTaskResources (pipelineTask , & spec , taskName , kind , providedResources )
549+ if err != nil {
550+ return nil , fmt .Errorf ("couldn't match referenced resources with declared resources: %w" , err )
551+ }
552+
553+ return rtr , nil
527554}
528555
529- func resolveTask (ctx context.Context , taskRun * v1beta1.TaskRun , getTask resources.GetTask , task v1beta1.PipelineTask ) (v1beta1.TaskSpec , string , v1beta1.TaskKind , error ) {
556+ func resolveTask (
557+ ctx context.Context ,
558+ taskRun * v1beta1.TaskRun ,
559+ getTask resources.GetTask ,
560+ pipelineTask v1beta1.PipelineTask ,
561+ ) (v1beta1.TaskSpec , string , v1beta1.TaskKind , error ) {
530562 var (
531563 t v1beta1.TaskObject
532564 err error
533565 spec v1beta1.TaskSpec
534566 taskName string
535567 kind v1beta1.TaskKind
536568 )
537- if task .TaskRef != nil {
569+
570+ if pipelineTask .TaskRef != nil {
538571 // If the TaskRun has already a stored TaskSpec in its status, use it as source of truth
539572 if taskRun != nil && taskRun .Status .TaskSpec != nil {
540573 spec = * taskRun .Status .TaskSpec
541- taskName = task .TaskRef .Name
574+ taskName = pipelineTask .TaskRef .Name
542575 } else {
543- t , err = getTask (ctx , task .TaskRef .Name )
576+ t , err = getTask (ctx , pipelineTask .TaskRef .Name )
544577 switch {
545578 case errors .Is (err , remote .ErrorRequestInProgress ):
546579 return v1beta1.TaskSpec {}, "" , "" , err
547580 case err != nil :
548581 return v1beta1.TaskSpec {}, "" , "" , & TaskNotFoundError {
549- Name : task .TaskRef .Name ,
582+ Name : pipelineTask .TaskRef .Name ,
550583 Msg : err .Error (),
551584 }
552585 default :
553586 spec = t .TaskSpec ()
554587 taskName = t .TaskMetadata ().Name
555588 }
556589 }
557- kind = task .TaskRef .Kind
558- } else {
559- spec = task .TaskSpec .TaskSpec
590+ kind = pipelineTask .TaskRef .Kind
591+ } else if pipelineTask . TaskSpec != nil {
592+ spec = pipelineTask .TaskSpec .TaskSpec
560593 }
561594 return spec , taskName , kind , err
562595}
0 commit comments