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  `