github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/newapp/core/root.go (about)

     1  package core
     2  
     3  import (
     4  	"embed"
     5  	"html/template"
     6  	"io/fs"
     7  	"os/exec"
     8  	"strings"
     9  
    10  	"github.com/BurntSushi/toml"
    11  	"github.com/gobuffalo/genny/v2"
    12  	"github.com/gobuffalo/genny/v2/gogen"
    13  )
    14  
    15  //go:embed templates/*
    16  var templates embed.FS
    17  
    18  func rootGenerator(opts *Options) (*genny.Generator, error) {
    19  	g := genny.New()
    20  
    21  	// validate opts
    22  	if err := opts.Validate(); err != nil {
    23  		return g, err
    24  	}
    25  
    26  	g.Command(exec.Command("go", "mod", "init", opts.App.PackagePkg))
    27  	g.Transformer(genny.Dot())
    28  
    29  	// TODO: workaround for 1.16, remove when we upgrade to 1.17 and rename "dot-*" files back to "-dot-*"
    30  	g.Transformer(genny.NewTransformer("*", func(f genny.File) (genny.File, error) {
    31  		name := f.Name()
    32  		if strings.HasPrefix(name, "dot-") {
    33  			name = strings.TrimPrefix(name, "dot-")
    34  			name = "." + name
    35  		}
    36  		return genny.NewFile(name, f), nil
    37  	}))
    38  	g.Transformer(genny.Replace("/dot-", "/."))
    39  
    40  	// add common templates
    41  	sub, err := fs.Sub(templates, "templates")
    42  	if err != nil {
    43  		return g, err
    44  	}
    45  
    46  	if err := g.FS(sub); err != nil {
    47  		return g, err
    48  	}
    49  
    50  	data := map[string]interface{}{
    51  		"opts": opts,
    52  	}
    53  
    54  	helpers := template.FuncMap{}
    55  
    56  	t := gogen.TemplateTransformer(data, helpers)
    57  	g.Transformer(t)
    58  
    59  	g.RunFn(func(r *genny.Runner) error {
    60  		f := genny.NewFile("config/buffalo-app.toml", nil)
    61  		if err := toml.NewEncoder(f).Encode(opts.App); err != nil {
    62  			return err
    63  		}
    64  		return r.File(f)
    65  	})
    66  
    67  	return g, nil
    68  }