github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/docker/docker.go (about) 1 package docker 2 3 import ( 4 "embed" 5 "io/fs" 6 "strings" 7 "text/template" 8 9 "github.com/gobuffalo/genny/v2" 10 "github.com/gobuffalo/genny/v2/gogen" 11 ) 12 13 //go:embed templates/* 14 var templates embed.FS 15 16 // Templates used for generating Dockerfile 17 // (exported mostly for the "fix" command) 18 func Templates() (fs.FS, error) { 19 return fs.Sub(templates, "templates") 20 } 21 22 func New(opts *Options) (*genny.Generator, error) { 23 g := genny.New() 24 25 if err := opts.Validate(); err != nil { 26 return g, err 27 } 28 29 data := map[string]interface{}{ 30 "opts": opts, 31 } 32 33 sub, err := Templates() 34 if err != nil { 35 return g, err 36 } 37 38 if err := g.FS(sub); err != nil { 39 return g, err 40 } 41 42 helpers := template.FuncMap{} 43 t := gogen.TemplateTransformer(data, helpers) 44 45 g.Transformer(t) 46 g.Transformer(genny.Dot()) 47 48 // TODO: workaround for 1.16, remove when we upgrade to 1.17 and rename "dot-*" files back to "-dot-*" 49 g.Transformer(genny.NewTransformer("*", func(f genny.File) (genny.File, error) { 50 name := f.Name() 51 if strings.HasPrefix(name, "dot-") { 52 name = strings.TrimPrefix(name, "dot-") 53 name = "." + name 54 } 55 return genny.NewFile(name, f), nil 56 })) 57 58 g.Transformer(genny.Replace("/dot-", "/.")) 59 60 return g, nil 61 }