Separate config normalization from validation
This commit is contained in:
42
internal/config/pipeline_normalize.go
Normal file
42
internal/config/pipeline_normalize.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// NormalizePipelineConfig applies reusable domain canonicalization before
|
||||
// validation. It is deterministic and commits no partial Notarius changes when
|
||||
// canonicalization fails.
|
||||
func NormalizePipelineConfig(cfg *PipelineConfig) error {
|
||||
if cfg == nil || cfg.Notarius == nil || !cfg.Notarius.Enabled {
|
||||
return nil
|
||||
}
|
||||
notarius := *cfg.Notarius
|
||||
notarius.Binary = strings.TrimSpace(notarius.Binary)
|
||||
notarius.ConfigPath = cleanNotariusPath(notarius.ConfigPath)
|
||||
notarius.PipelineID = strings.TrimSpace(notarius.PipelineID)
|
||||
notarius.Timeout = strings.TrimSpace(notarius.Timeout)
|
||||
notarius.WorkingDirectory = cleanNotariusPath(notarius.WorkingDirectory)
|
||||
|
||||
references, err := normalizeNotariusReferences(notarius.References)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
outputs, err := normalizeNotariusOutputs(notarius.Outputs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
notarius.References = references
|
||||
notarius.Outputs = outputs
|
||||
*cfg.Notarius = notarius
|
||||
return nil
|
||||
}
|
||||
|
||||
func cleanNotariusPath(value string) string {
|
||||
value = strings.TrimSpace(value)
|
||||
if value == "" {
|
||||
return ""
|
||||
}
|
||||
return filepath.Clean(value)
|
||||
}
|
||||
Reference in New Issue
Block a user