func filter()

in pkg/trait/builder.go [653:691]


func filter(tasks []v1.Task, filterTasks []string) ([]v1.Task, error) {
	var filteredTasks []v1.Task
	for _, f := range filterTasks {
		found := false

		for _, t := range tasks {
			switch {
			case t.Builder != nil && t.Builder.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			case t.Custom != nil && t.Custom.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			case t.Package != nil && t.Package.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			case t.Spectrum != nil && t.Spectrum.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			case t.S2i != nil && t.S2i.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			case t.Jib != nil && t.Jib.Name == f:
				filteredTasks = append(filteredTasks, t)
				found = true
			}
		}

		if !found {
			// If we reach this point it means no tasks exists for the name
			return nil, fmt.Errorf("no task exist for %s name", f)
		}
	}
	// make sure the last task is either a publishing task or a custom task
	if len(filteredTasks) == 0 || !publishingOrUserTask(filteredTasks[len(filteredTasks)-1]) {
		return nil, fmt.Errorf("last pipeline task is not a publishing or a user task")
	}
	return filteredTasks, nil
}