in code/go/internal/specschema/folder_spec.go [46:86]
func (l *FolderSpecLoader) loadFolderSpec(s *folderItemSpec, specPath string) error {
specFile, err := l.fs.Open(specPath)
if err != nil {
return fmt.Errorf("could not open folder specification file: %w", err)
}
defer specFile.Close()
data, err := io.ReadAll(specFile)
if err != nil {
return fmt.Errorf("could not read folder specification file: %w", err)
}
var folderSpec folderSchemaSpec
folderSpec.Spec = s
if err := yaml.Unmarshal(data, &folderSpec); err != nil {
return fmt.Errorf("could not parse folder specification file: %w", err)
}
newSpec, err := folderSpec.resolve(l.specVersion)
if err != nil {
return err
}
err = l.loadContents(newSpec, l.fs, specPath)
if err != nil {
return err
}
err = newSpec.setDefaultValues()
if err != nil {
return fmt.Errorf("could not set default values: %w", err)
}
newSpec.propagateContentLimits()
// it is required to assign the real values to be able to
// use all the calculated contents in following iterations
*s = *newSpec
return nil
}