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  }