package util import ( "fmt" "os" "strings" ) func DoesFileExist(filepath string) bool { _, err := os.Stat(filepath) return !os.IsNotExist(err) } func CreateDirIfNotExists(dirpath string) error { if _, err := os.Stat(dirpath); os.IsNotExist(err) { createErr := os.MkdirAll(dirpath, 0o777) if createErr != nil { return createErr } } return nil } func FindFile(explicitPath string, locations, endings []string) (string, error) { if explicitPath != "" { if !DoesFileExist(explicitPath) { return "", fmt.Errorf("file %s not found", explicitPath) } return explicitPath, nil } notFound := []string{} for _, f := range locations { if endings != nil { for _, t := range endings { fpath := f + "." + t if DoesFileExist(fpath) { return fpath, nil } else { notFound = append(notFound, fpath) } } } else { if DoesFileExist(f) { return f, nil } else { notFound = append(notFound, f) } } } return "", fmt.Errorf("none of the following files found: %s", strings.Join(notFound, "; ")) }