github.com/corylanou/buffalo@v0.8.0/generators/newapp/new.go (about) 1 package newapp 2 3 import ( 4 "os/exec" 5 6 "github.com/gobuffalo/buffalo/generators" 7 "github.com/gobuffalo/buffalo/generators/assets/standard" 8 "github.com/gobuffalo/buffalo/generators/assets/webpack" 9 "github.com/gobuffalo/buffalo/generators/refresh" 10 "github.com/gobuffalo/makr" 11 ) 12 13 // App is the representation of a new Buffalo application 14 type App struct { 15 RootPath string 16 Name string 17 Force bool 18 Verbose bool 19 SkipPop bool 20 SkipWebpack bool 21 WithYarn bool 22 DBType string 23 CIProvider string 24 } 25 26 // Generator returns a generator to create a new application 27 func (a *App) Generator(data makr.Data) (*makr.Generator, error) { 28 g := makr.New() 29 files, err := generators.Find("newapp") 30 if err != nil { 31 return nil, err 32 } 33 34 for _, f := range files { 35 g.Add(makr.NewFile(f.WritePath, f.Body)) 36 } 37 rr, err := refresh.New() 38 if err != nil { 39 return nil, err 40 } 41 g.Add(rr) 42 43 if data["ciProvider"] == "travis" { 44 g.Add(makr.NewFile(".travis.yml", nTravis)) 45 } else if data["ciProvider"] == "gitlab-ci" { 46 if _, ok := data["withPop"]; ok { 47 if data["dbType"] == "postgres" { 48 data["testDbUrl"] = "postgres://postgres:postgres@postgres:5432/" + data["name"].(string) + "_test" 49 } else if data["dbType"] == "mysql" { 50 data["testDbUrl"] = "mysql://root:root@mysql:3306/" + data["name"].(string) + "_test" 51 } else { 52 data["testDbUrl"] = "" 53 } 54 g.Add(makr.NewFile(".gitlab-ci.yml", nGitlabCi)) 55 } else { 56 g.Add(makr.NewFile(".gitlab-ci.yml", nGitlabCiNoPop)) 57 } 58 } 59 60 g.Add(makr.NewCommand(makr.GoGet("github.com/markbates/refresh/..."))) 61 g.Add(makr.NewCommand(makr.GoInstall("github.com/markbates/refresh"))) 62 g.Add(makr.NewCommand(makr.GoGet("github.com/markbates/grift/..."))) 63 g.Add(makr.NewCommand(makr.GoInstall("github.com/markbates/grift"))) 64 g.Add(makr.NewCommand(makr.GoGet("github.com/motemen/gore"))) 65 g.Add(makr.NewCommand(makr.GoInstall("github.com/motemen/gore"))) 66 if a.SkipWebpack { 67 wg, err := standard.New(data) 68 if err != nil { 69 return g, err 70 } 71 g.Add(wg) 72 } else { 73 wg, err := webpack.New(data) 74 if err != nil { 75 return g, err 76 } 77 g.Add(wg) 78 } 79 g.Add(newSodaGenerator()) 80 g.Add(makr.NewCommand(a.goGet())) 81 g.Add(makr.NewCommand(makr.GoFmt())) 82 83 return g, nil 84 } 85 86 func (a App) goGet() *exec.Cmd { 87 appArgs := []string{"get", "-t"} 88 if a.Verbose { 89 appArgs = append(appArgs, "-v") 90 } 91 appArgs = append(appArgs, "./...") 92 return exec.Command("go", appArgs...) 93 } 94 95 const nTravis = `language: go 96 env: 97 - GO_ENV=test 98 99 before_script: 100 - psql -c 'create database {{.name}}_test;' -U postgres 101 - mysql -e 'CREATE DATABASE {{.name}}_test;' 102 - mkdir -p $TRAVIS_BUILD_DIR/public/assets 103 104 go: 105 - 1.7.x 106 - master 107 108 go_import_path: {{ .packagePath }} 109 ` 110 111 const nGitlabCi = `before_script: 112 - ln -s /builds /go/src/$(echo "{{.packagePath}}" | cut -d "/" -f1) 113 - cd /go/src/{{.packagePath}} 114 - mkdir -p public/assets 115 - go get -u github.com/gobuffalo/buffalo/buffalo 116 - go get -t -v ./... 117 - export PATH="$PATH:$GOPATH/bin" 118 119 stages: 120 - test 121 122 .test-vars: &test-vars 123 variables: 124 GO_ENV: "test" 125 POSTGRES_DB: "{{.name}}_test" 126 MYSQL_DATABASE: "{{.name}}_test" 127 MYSQL_ROOT_PASSWORD: "root" 128 TEST_DATABASE_URL: "{{.testDbUrl}}" 129 130 # Golang version choice helper 131 .use-golang-latest: &use-golang-latest 132 image: golang:latest 133 134 .use-golang-latest: &use-golang-1-7 135 image: golang:1.7 136 137 test:latest: 138 <<: *use-golang-latest 139 <<: *test-vars 140 stage: test 141 services: 142 - mysql:latest 143 - postgres:latest 144 script: 145 - buffalo test 146 147 test:1.7: 148 <<: *use-golang-1-7 149 <<: *test-vars 150 stage: test 151 services: 152 - mysql:latest 153 - postgres:latest 154 script: 155 - buffalo test 156 ` 157 158 const nGitlabCiNoPop = `before_script: 159 - ln -s /builds /go/src/$(echo "{{.packagePath}}" | cut -d "/" -f1) 160 - cd /go/src/{{.packagePath}} 161 - mkdir -p public/assets 162 - go get -u github.com/gobuffalo/buffalo/buffalo 163 - go get -t -v ./... 164 - export PATH="$PATH:$GOPATH/bin" 165 166 stages: 167 - test 168 169 .test-vars: &test-vars 170 variables: 171 GO_ENV: "test" 172 173 # Golang version choice helper 174 .use-golang-latest: &use-golang-latest 175 image: golang:latest 176 177 .use-golang-latest: &use-golang-1-7 178 image: golang:1.7 179 180 test:latest: 181 <<: *use-golang-latest 182 <<: *test-vars 183 stage: test 184 script: 185 - buffalo test 186 187 test:1.7: 188 <<: *use-golang-1-7 189 <<: *test-vars 190 stage: test 191 script: 192 - buffalo test 193 `