package filecatalog import ( "context" "os" "path/filepath" "sort" "strings" ) // FindYAMLFiles returns sorted full paths for .yaml and .yml files under root. func FindYAMLFiles(ctx context.Context, root string) ([]string, error) { var files []string err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { if err != nil { return err } select { case <-ctx.Done(): return ctx.Err() default: } if d.IsDir() { return nil } if !isYAMLFile(d.Name()) { return nil } files = append(files, path) return nil }) sort.Strings(files) return files, err } // RelativePath computes a clean relative path from root to path. func RelativePath(root string, path string) string { rel, err := filepath.Rel(root, path) if err != nil { return filepath.Clean(path) } return filepath.Clean(rel) } // Stem strips .yaml or .yml from a file name. func Stem(name string) string { name = strings.TrimSuffix(name, ".yaml") name = strings.TrimSuffix(name, ".yml") return name } func isYAMLFile(name string) bool { return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml") }