github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/fix/docker.go (about) 1 package fix 2 3 import ( 4 "bytes" 5 "fmt" 6 "html/template" 7 8 "github.com/JarrahG/buffalocli/internal/genny/docker" 9 "github.com/gobuffalo/genny/v2" 10 ) 11 12 func FixDocker(opts *Options) genny.RunFn { 13 return func(r *genny.Runner) error { 14 if !opts.App.WithDocker { 15 return nil 16 } 17 18 fmt.Println("~~~ Checking Dockerfile ~~~") 19 20 templates, err := docker.Templates() 21 if err != nil { 22 return err 23 } 24 25 tmpl, err := template.New("Dockerfile").ParseFS(templates, "Dockerfile.tmpl") 26 if err != nil { 27 return err 28 } 29 30 dockerOpts := &docker.Options{ 31 App: opts.App, 32 } 33 if err := dockerOpts.Validate(); err != nil { 34 return err 35 } 36 37 bb := &bytes.Buffer{} 38 if err := tmpl.ExecuteTemplate(bb, "Dockerfile.tmpl", map[string]interface{}{ 39 "opts": dockerOpts, 40 }); err != nil { 41 return err 42 } 43 44 f, err := r.FindFile("Dockerfile") 45 if err != nil { 46 return nil 47 } 48 49 if string(f.String()) == bb.String() { 50 return nil 51 } 52 53 if !opts.YesToAll && !ask("Your Dockerfile is different from the latest Buffalo template.\nWould you like to replace yours with the latest template?") { 54 fmt.Println("\tSkipping Dockerfile") 55 return nil 56 } 57 58 if _, err := f.Write(bb.Bytes()); err != nil { 59 return err 60 } 61 return r.File(f) 62 } 63 }