github.com/goreleaser/goreleaser@v1.25.1/internal/extrafiles/extra_files.go (about) 1 package extrafiles 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 "github.com/caarlos0/log" 9 "github.com/goreleaser/fileglob" 10 "github.com/goreleaser/goreleaser/internal/tmpl" 11 "github.com/goreleaser/goreleaser/pkg/config" 12 "github.com/goreleaser/goreleaser/pkg/context" 13 ) 14 15 // Find resolves extra files globs et al into a map of names/paths or an error. 16 func Find(ctx *context.Context, files []config.ExtraFile) (map[string]string, error) { 17 t := tmpl.New(ctx) 18 result := map[string]string{} 19 for _, extra := range files { 20 glob, err := t.Apply(extra.Glob) 21 if err != nil { 22 return result, fmt.Errorf("failed to apply template to glob %q: %w", extra.Glob, err) 23 } 24 if glob == "" { 25 log.Warn("ignoring empty glob") 26 continue 27 } 28 files, err := fileglob.Glob(glob) 29 if err != nil { 30 return result, fmt.Errorf("globbing failed for pattern %s: %w", extra.Glob, err) 31 } 32 if len(files) > 1 && extra.NameTemplate != "" { 33 return result, fmt.Errorf("failed to add extra_file: %q -> %q: glob matches multiple files", extra.Glob, extra.NameTemplate) 34 } 35 for _, file := range files { 36 info, err := os.Stat(file) 37 if err == nil && info.IsDir() { 38 log.Debugf("ignoring directory %s", file) 39 continue 40 } 41 n, err := t.Apply(extra.NameTemplate) 42 if err != nil { 43 return result, fmt.Errorf("failed to apply template to name %q: %w", extra.NameTemplate, err) 44 } 45 name := filepath.Base(file) 46 if n != "" { 47 name = n 48 } 49 if old, ok := result[name]; ok { 50 log.Warnf("overriding %s with %s for name %s", old, file, name) 51 } 52 result[name] = file 53 } 54 } 55 return result, nil 56 }