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

     1  package ci
     2  
     3  import (
     4  	"fmt"
     5  	"html/template"
     6  
     7  	"github.com/gobuffalo/genny/v2"
     8  	"github.com/gobuffalo/genny/v2/gogen"
     9  	"github.com/gobuffalo/packr/v2"
    10  )
    11  
    12  // New generator for adding travis, gitlab, or circleci
    13  func New(opts *Options) (*genny.Generator, error) {
    14  	g := genny.New()
    15  
    16  	if err := opts.Validate(); err != nil {
    17  		return g, err
    18  	}
    19  
    20  	g.Transformer(genny.Replace("-no-pop", ""))
    21  	g.Transformer(genny.Dot())
    22  
    23  	box := packr.New("buffalo:genny:ci", "../ci/templates")
    24  
    25  	var fname string
    26  	switch opts.Provider {
    27  	case "travis", "travis-ci":
    28  		fname = "-dot-travis.yml.tmpl"
    29  	case "gitlab", "gitlab-ci":
    30  		if opts.App.WithPop {
    31  			fname = "-dot-gitlab-ci.yml.tmpl"
    32  		} else {
    33  			fname = "-dot-gitlab-ci-no-pop.yml.tmpl"
    34  		}
    35  	case "circleci":
    36  		fname = "-dot-circleci/config.yml.tmpl"
    37  	default:
    38  		return g, fmt.Errorf("could not find a template for %s", opts.Provider)
    39  	}
    40  
    41  	f, err := box.FindString(fname)
    42  	if err != nil {
    43  		return g, err
    44  	}
    45  
    46  	g.File(genny.NewFileS(fname, f))
    47  
    48  	data := map[string]interface{}{
    49  		"opts": opts,
    50  	}
    51  
    52  	if opts.DBType == "postgres" {
    53  		data["testDbUrl"] = "postgres://postgres:postgres@postgres:5432/" + opts.App.Name.File().String() + "_test?sslmode=disable"
    54  	} else if opts.DBType == "mysql" {
    55  		data["testDbUrl"] = "mysql://root:root@(mysql:3306)/" + opts.App.Name.File().String() + "_test?parseTime=true&multiStatements=true&readTimeout=1s"
    56  	} else {
    57  		data["testDbUrl"] = ""
    58  	}
    59  
    60  	helpers := template.FuncMap{}
    61  
    62  	t := gogen.TemplateTransformer(data, helpers)
    63  	g.Transformer(t)
    64  
    65  	return g, nil
    66  }