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

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