Skip to content

Commit 6c80021

Browse files
committed
TEP-0090: Split up ResolvePipelineRunTask
Prior to this commit, the logic for resolving `TaskRun` and its and `Resources` needed for a given `PipelineTask` was included within the `ResolvePipelineRunTask` function. In this change, we split the logic into their own functions for reuse and readability. We also fix the names of `PipelineTask` variables to distinguish them from `Tasks`. No functional changes made in this commit.
1 parent 9d60d0a commit 6c80021

File tree

1 file changed

+76
-33
lines changed

1 file changed

+76
-33
lines changed

pkg/reconciler/pipelinerun/resources/pipelinerunresolution.go

Lines changed: 76 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -438,90 +438,133 @@ func isCustomTask(ctx context.Context, rprt ResolvedPipelineRunTask) bool {
438438

439439
// ResolvePipelineRunTask retrieves a single Task's instance using the getTask to fetch
440440
// the spec. If it is unable to retrieve an instance of a referenced Task, it will return
441-
// an error, otherwise it returns a list of all of the Tasks retrieved. It will retrieve
441+
// an error, otherwise it returns a list of all the Tasks retrieved. It will retrieve
442442
// the Resources needed for the TaskRun using the mapping of providedResources.
443443
func ResolvePipelineRunTask(
444444
ctx context.Context,
445445
pipelineRun v1beta1.PipelineRun,
446446
getTask resources.GetTask,
447447
getTaskRun resources.GetTaskRun,
448448
getRun GetRun,
449-
task v1beta1.PipelineTask,
449+
pipelineTask v1beta1.PipelineTask,
450450
providedResources map[string]*resourcev1alpha1.PipelineResource,
451451
) (*ResolvedPipelineRunTask, error) {
452-
453452
rprt := ResolvedPipelineRunTask{
454-
PipelineTask: &task,
453+
PipelineTask: &pipelineTask,
455454
}
456455
rprt.CustomTask = isCustomTask(ctx, rprt)
457456
if rprt.IsCustomTask() {
458-
rprt.RunName = getRunName(pipelineRun.Status.Runs, pipelineRun.Status.ChildReferences, task.Name, pipelineRun.Name)
457+
rprt.RunName = getRunName(pipelineRun.Status.Runs, pipelineRun.Status.ChildReferences, pipelineTask.Name, pipelineRun.Name)
459458
run, err := getRun(rprt.RunName)
460459
if err != nil && !kerrors.IsNotFound(err) {
461460
return nil, fmt.Errorf("error retrieving Run %s: %w", rprt.RunName, err)
462461
}
463462
rprt.Run = run
464463
} else {
465-
rprt.TaskRunName = GetTaskRunName(pipelineRun.Status.TaskRuns, pipelineRun.Status.ChildReferences, task.Name, pipelineRun.Name)
466-
467-
taskRun, err := getTaskRun(rprt.TaskRunName)
468-
if err != nil {
469-
if !kerrors.IsNotFound(err) {
470-
return nil, fmt.Errorf("error retrieving TaskRun %s: %w", rprt.TaskRunName, err)
471-
}
472-
}
473-
if taskRun != nil {
474-
rprt.TaskRun = taskRun
475-
}
476-
477-
// Find the Task that this PipelineTask is using
478-
spec, taskName, kind, err := resolveTask(ctx, taskRun, getTask, task)
479-
if err != nil {
464+
rprt.TaskRunName = GetTaskRunName(pipelineRun.Status.TaskRuns, pipelineRun.Status.ChildReferences, pipelineTask.Name, pipelineRun.Name)
465+
if err := rprt.resolvePipelineRunTaskWithTaskRun(ctx, rprt.TaskRunName, getTask, getTaskRun, pipelineTask, providedResources); err != nil {
480466
return nil, err
481467
}
468+
}
469+
return &rprt, nil
470+
}
482471

483-
spec.SetDefaults(ctx)
484-
rtr, err := resolvePipelineTaskResources(task, &spec, taskName, kind, providedResources)
485-
if err != nil {
486-
return nil, fmt.Errorf("couldn't match referenced resources with declared resources: %w", err)
472+
func (t *ResolvedPipelineRunTask) resolvePipelineRunTaskWithTaskRun(
473+
ctx context.Context,
474+
taskRunName string,
475+
getTask resources.GetTask,
476+
getTaskRun resources.GetTaskRun,
477+
pipelineTask v1beta1.PipelineTask,
478+
providedResources map[string]*resourcev1alpha1.PipelineResource,
479+
) error {
480+
taskRun, err := t.resolveTaskRun(taskRunName, getTaskRun)
481+
if err != nil {
482+
return err
483+
}
484+
485+
if err := t.resolveTaskResources(ctx, getTask, pipelineTask, providedResources, taskRun); err != nil {
486+
return err
487+
}
488+
489+
return nil
490+
}
491+
492+
func (t *ResolvedPipelineRunTask) resolveTaskRun(
493+
taskRunName string,
494+
getTaskRun resources.GetTaskRun,
495+
) (*v1beta1.TaskRun, error) {
496+
taskRun, err := getTaskRun(taskRunName)
497+
if err != nil {
498+
if !kerrors.IsNotFound(err) {
499+
return nil, fmt.Errorf("error retrieving TaskRun %s: %w", taskRunName, err)
487500
}
501+
}
502+
if taskRun != nil {
503+
t.TaskRun = taskRun
504+
}
505+
return taskRun, nil
506+
}
488507

489-
rprt.ResolvedTaskResources = rtr
508+
func (t *ResolvedPipelineRunTask) resolveTaskResources(
509+
ctx context.Context,
510+
getTask resources.GetTask,
511+
pipelineTask v1beta1.PipelineTask,
512+
providedResources map[string]*resourcev1alpha1.PipelineResource,
513+
taskRun *v1beta1.TaskRun,
514+
) error {
515+
516+
spec, taskName, kind, err := resolveTask(ctx, taskRun, getTask, pipelineTask)
517+
if err != nil {
518+
return err
490519
}
491-
return &rprt, nil
520+
521+
spec.SetDefaults(ctx)
522+
rtr, err := resolvePipelineTaskResources(pipelineTask, &spec, taskName, kind, providedResources)
523+
if err != nil {
524+
return fmt.Errorf("couldn't match referenced resources with declared resources: %w", err)
525+
}
526+
t.ResolvedTaskResources = rtr
527+
528+
return nil
492529
}
493530

494-
func resolveTask(ctx context.Context, taskRun *v1beta1.TaskRun, getTask resources.GetTask, task v1beta1.PipelineTask) (v1beta1.TaskSpec, string, v1beta1.TaskKind, error) {
531+
func resolveTask(
532+
ctx context.Context,
533+
taskRun *v1beta1.TaskRun,
534+
getTask resources.GetTask,
535+
pipelineTask v1beta1.PipelineTask,
536+
) (v1beta1.TaskSpec, string, v1beta1.TaskKind, error) {
495537
var (
496538
t v1beta1.TaskObject
497539
err error
498540
spec v1beta1.TaskSpec
499541
taskName string
500542
kind v1beta1.TaskKind
501543
)
502-
if task.TaskRef != nil {
544+
545+
if pipelineTask.TaskRef != nil {
503546
// If the TaskRun has already a stored TaskSpec in its status, use it as source of truth
504547
if taskRun != nil && taskRun.Status.TaskSpec != nil {
505548
spec = *taskRun.Status.TaskSpec
506-
taskName = task.TaskRef.Name
549+
taskName = pipelineTask.TaskRef.Name
507550
} else {
508-
t, err = getTask(ctx, task.TaskRef.Name)
551+
t, err = getTask(ctx, pipelineTask.TaskRef.Name)
509552
switch {
510553
case errors.Is(err, remote.ErrorRequestInProgress):
511554
return v1beta1.TaskSpec{}, "", "", err
512555
case err != nil:
513556
return v1beta1.TaskSpec{}, "", "", &TaskNotFoundError{
514-
Name: task.TaskRef.Name,
557+
Name: pipelineTask.TaskRef.Name,
515558
Msg: err.Error(),
516559
}
517560
default:
518561
spec = t.TaskSpec()
519562
taskName = t.TaskMetadata().Name
520563
}
521564
}
522-
kind = task.TaskRef.Kind
565+
kind = pipelineTask.TaskRef.Kind
523566
} else {
524-
spec = task.TaskSpec.TaskSpec
567+
spec = pipelineTask.TaskSpec.TaskSpec
525568
}
526569
return spec, taskName, kind, err
527570
}

0 commit comments

Comments
 (0)