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 }