call file config validate in cli post load

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
Alex Goodman 2025-12-10 13:22:45 -05:00
parent a05608a4c8
commit 703edff876
6 changed files with 25 additions and 30 deletions

View File

@ -303,6 +303,11 @@ func (cfg *Catalog) PostLoad() error {
return fmt.Errorf("cannot enable exclude-binary-overlap-by-ownership without enabling package-file-ownership-overlap")
}
// validate file executable options
if err := cfg.ToFilesConfig().Executable.Validate(); err != nil {
return fmt.Errorf("invalid file executable configuration: %w", err)
}
return nil
}

View File

@ -31,8 +31,7 @@ func TestAllPackageCatalogersReachableInTasks(t *testing.T) {
taskFactories := task.DefaultPackageTaskFactories()
taskTagsByName := make(map[string][]string)
for _, factory := range taskFactories {
tsk, err := factory(task.DefaultCatalogingFactoryConfig())
require.NoError(t, err)
tsk := factory(task.DefaultCatalogingFactoryConfig())
if taskTagsByName[tsk.Name()] != nil {
t.Fatalf("duplicate task name: %q", tsk.Name())
}

View File

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

View File

@ -26,8 +26,8 @@ func DefaultFileTaskFactories() Factories {
}
func newFileDigestCatalogerTaskFactory(tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return newFileDigestCatalogerTask(cfg.FilesConfig.Selection, cfg.FilesConfig.Hashers, tags...), nil
return func(cfg CatalogingFactoryConfig) Task {
return newFileDigestCatalogerTask(cfg.FilesConfig.Selection, cfg.FilesConfig.Hashers, tags...)
}
}
@ -57,8 +57,8 @@ func newFileDigestCatalogerTask(selection file.Selection, hashers []crypto.Hash,
}
func newFileMetadataCatalogerTaskFactory(tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return newFileMetadataCatalogerTask(cfg.FilesConfig.Selection, tags...), nil
return func(cfg CatalogingFactoryConfig) Task {
return newFileMetadataCatalogerTask(cfg.FilesConfig.Selection, tags...)
}
}
@ -88,8 +88,8 @@ func newFileMetadataCatalogerTask(selection file.Selection, tags ...string) Task
}
func newFileContentCatalogerTaskFactory(tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return newFileContentCatalogerTask(cfg.FilesConfig.Content, tags...), nil
return func(cfg CatalogingFactoryConfig) Task {
return newFileContentCatalogerTask(cfg.FilesConfig.Content, tags...)
}
}
@ -114,16 +114,12 @@ func newFileContentCatalogerTask(cfg filecontent.Config, tags ...string) Task {
}
func newExecutableCatalogerTaskFactory(tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return func(cfg CatalogingFactoryConfig) Task {
return newExecutableCatalogerTask(cfg.FilesConfig.Selection, cfg.FilesConfig.Executable, tags...)
}
}
func newExecutableCatalogerTask(selection file.Selection, cfg executable.Config, tags ...string) (Task, error) {
if err := cfg.Validate(); err != nil {
return nil, err
}
func newExecutableCatalogerTask(selection file.Selection, cfg executable.Config, tags ...string) Task {
fn := func(ctx context.Context, resolver file.Resolver, builder sbomsync.Builder) error {
if selection == file.NoFilesSelection {
return nil
@ -140,7 +136,7 @@ func newExecutableCatalogerTask(selection file.Selection, cfg executable.Config,
return err
}
return NewTask("file-executable-cataloger", fn, commonFileTags(tags)...), nil
return NewTask("file-executable-cataloger", fn, commonFileTags(tags)...)
}
// TODO: this should be replaced with a fix that allows passing a coordinate or location iterator to the cataloger

View File

@ -21,14 +21,14 @@ import (
)
func newPackageTaskFactory(catalogerFactory func(CatalogingFactoryConfig) pkg.Cataloger, tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return NewPackageTask(cfg, catalogerFactory(cfg), tags...), nil
return func(cfg CatalogingFactoryConfig) Task {
return NewPackageTask(cfg, catalogerFactory(cfg), tags...)
}
}
func newSimplePackageTaskFactory(catalogerFactory func() pkg.Cataloger, tags ...string) factory {
return func(cfg CatalogingFactoryConfig) (Task, error) {
return NewPackageTask(cfg, catalogerFactory(), tags...), nil
return func(cfg CatalogingFactoryConfig) Task {
return NewPackageTask(cfg, catalogerFactory(), tags...)
}
}

View File

@ -48,7 +48,7 @@ type SymbolConfig struct {
// Types are the types of Go symbols to capture, relative to `go tool nm` output (e.g. T, t, R, r, D, d, B, b, C, U, etc).
// If empty, all symbol types are captured.
Types []string
Types []string `json:"types" yaml:"types" mapstructure:"types"`
// Go configures Go-specific symbol capturing settings.
Go GoSymbolConfig `json:"go" yaml:"go" mapstructure:"go"`