syft/internal/task/factory.go
Alex Goodman a05608a4c8 wire up cli config
Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
2025-12-10 12:53:41 -05:00

46 lines
904 B
Go

package task
import (
"errors"
"fmt"
"sort"
"strings"
"github.com/scylladb/go-set/strset"
)
type factory func(cfg CatalogingFactoryConfig) (Task, error)
type Factories []factory
func (f Factories) Tasks(cfg CatalogingFactoryConfig) ([]Task, error) {
var allTasks []Task
taskNames := strset.New()
duplicateTaskNames := strset.New()
var errs []error
for _, fact := range f {
tsk, err := fact(cfg)
if err != nil {
errs = append(errs, err)
continue
}
if tsk == nil {
continue
}
tskName := tsk.Name()
if taskNames.Has(tskName) {
duplicateTaskNames.Add(tskName)
}
allTasks = append(allTasks, tsk)
taskNames.Add(tskName)
}
if duplicateTaskNames.Size() > 0 {
names := duplicateTaskNames.List()
sort.Strings(names)
errs = append(errs, fmt.Errorf("duplicate cataloger task names: %v", strings.Join(names, ", ")))
}
return allTasks, errors.Join(errs...)
}