github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/genny/newapp/core/core.go (about)

     1  package core
     2  
     3  import (
     4  	pop "github.com/gobuffalo/buffalo-pop/v2/genny/newapp"
     5  	"github.com/gobuffalo/buffalo/genny/ci"
     6  	"github.com/gobuffalo/buffalo/genny/docker"
     7  	"github.com/gobuffalo/buffalo/genny/plugins/install"
     8  	"github.com/gobuffalo/buffalo/genny/refresh"
     9  	"github.com/gobuffalo/buffalo/plugins/plugdeps"
    10  	"github.com/gobuffalo/genny/v2"
    11  	"github.com/gobuffalo/meta"
    12  	"github.com/segakazzz/buffalo/internal/takeon/github.com/markbates/errx"
    13  )
    14  
    15  // New generator for creating a Buffalo application
    16  func New(opts *Options) (*genny.Group, error) {
    17  	gg := &genny.Group{}
    18  
    19  	// add the root generator
    20  	g, err := rootGenerator(opts)
    21  	if err != nil {
    22  		return gg, err
    23  	}
    24  	gg.Add(g)
    25  
    26  	app := opts.App
    27  
    28  	plugs, err := plugdeps.List(app)
    29  	if err != nil && (errx.Unwrap(err) != plugdeps.ErrMissingConfig) {
    30  		return nil, err
    31  	}
    32  
    33  	if opts.Docker != nil {
    34  		// add the docker generator
    35  		g, err = docker.New(opts.Docker)
    36  		if err != nil {
    37  			return gg, err
    38  		}
    39  		gg.Add(g)
    40  	}
    41  
    42  	if opts.Pop != nil {
    43  		// add the pop generator
    44  		gg2, err := pop.New(opts.Pop)
    45  		if err != nil {
    46  			return gg, err
    47  		}
    48  		gg.Merge(gg2)
    49  
    50  		// add the plugin
    51  		plugs.Add(plugdeps.Plugin{
    52  			Binary: "buffalo-pop",
    53  			GoGet:  "github.com/gobuffalo/buffalo-pop/v2",
    54  		})
    55  	}
    56  
    57  	if opts.CI != nil {
    58  		// add the CI generator
    59  		g, err = ci.New(opts.CI)
    60  		if err != nil {
    61  			return gg, err
    62  		}
    63  		gg.Add(g)
    64  	}
    65  
    66  	if opts.Refresh != nil {
    67  		g, err = refresh.New(opts.Refresh)
    68  		if err != nil {
    69  			return gg, err
    70  		}
    71  		gg.Add(g)
    72  	}
    73  
    74  	// ---
    75  
    76  	// install all of the plugins
    77  	iopts := &install.Options{
    78  		App:     app,
    79  		Plugins: plugs.List(),
    80  	}
    81  	if app.WithSQLite {
    82  		iopts.Tags = meta.BuildTags{"sqlite"}
    83  	}
    84  
    85  	ig, err := install.New(iopts)
    86  	if err != nil {
    87  		return gg, err
    88  	}
    89  	gg.Merge(ig)
    90  
    91  	return gg, nil
    92  }