Skip to content

Commit

Permalink
merged master
Browse files Browse the repository at this point in the history
  • Loading branch information
zthomas committed Nov 8, 2019
2 parents 9c40d2f + f2e07ef commit 1ee6391
Show file tree
Hide file tree
Showing 50 changed files with 442 additions and 671 deletions.
10 changes: 6 additions & 4 deletions cmd/create.go
Expand Up @@ -9,6 +9,8 @@ import (
"github.com/commitdev/commit0/internal/templator"
"github.com/commitdev/commit0/internal/util"
"github.com/gobuffalo/packr/v2"
"github.com/kyokomi/emoji"
"github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)

Expand All @@ -18,13 +20,13 @@ func init() {

func Create(projectName string, outDir string, t *templator.Templator) string {
rootDir := path.Join(outDir, projectName)
log.Printf("Creating project %s.", projectName)
log.Println(aurora.Cyan(emoji.Sprintf(":tada: Creating project %s.", projectName)))
err := os.MkdirAll(rootDir, os.ModePerm)

if os.IsExist(err) {
log.Fatalf("Directory %v already exists! Error: %v", projectName, err)
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: Directory %v already exists! Error: %v", projectName, err)))
} else if err != nil {
log.Fatalf("Error creating root: %v ", err)
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: Error creating root: %v ", err)))
}
var wg sync.WaitGroup

Expand All @@ -40,7 +42,7 @@ var createCmd = &cobra.Command{
Short: "Create new project with provided name.",
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 1 {
log.Fatalf("Project name cannot be empty!")
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: Project name cannot be empty!")))
}

templates := packr.New("templates", "../templates")
Expand Down
59 changes: 31 additions & 28 deletions cmd/generate.go
Expand Up @@ -5,21 +5,19 @@ import (
"sync"

"github.com/commitdev/commit0/internal/config"
"github.com/commitdev/commit0/internal/generate/ci"
"github.com/commitdev/commit0/internal/generate/docker"
"github.com/commitdev/commit0/internal/generate/golang"
"github.com/commitdev/commit0/internal/generate/http"
"github.com/commitdev/commit0/internal/generate/kubernetes"
"github.com/commitdev/commit0/internal/generate/proto"
"github.com/commitdev/commit0/internal/generate/react"
"github.com/commitdev/commit0/internal/templator"
"github.com/commitdev/commit0/internal/util"
"github.com/gobuffalo/packr/v2"
"github.com/kyokomi/emoji"
"github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)

var configPath string
var language string

const (
Go = "go"
Expand All @@ -32,7 +30,6 @@ var supportedLanguages = [...]string{Go, React, Kubernetes}
func init() {

generateCmd.PersistentFlags().StringVarP(&configPath, "config", "c", "commit0.yml", "config path")
generateCmd.PersistentFlags().StringVarP(&language, "language", "l", "", "language to generate project in")

rootCmd.AddCommand(generateCmd)
}
Expand All @@ -41,54 +38,60 @@ var generateCmd = &cobra.Command{
Use: "generate",
Short: "Generate idl & application folders",
Run: func(cmd *cobra.Command, args []string) {
if !ValidLanguage() {
log.Fatalf("'%s' is not a supported language.", language)
}

templates := packr.New("templates", "../templates")
t := templator.NewTemplator(templates)

cfg := config.LoadConfig(configPath)
cfg.Language = language
cfg.Print()

var wg sync.WaitGroup
switch language {
case Go:
proto.Generate(t, cfg, &wg)
golang.Generate(t, cfg, &wg)
if !ValidLanguage(cfg.Frontend.Framework) {
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: '%s' is not a supported framework.", cfg.Frontend.Framework)))
}

docker.GenerateGoAppDockerFile(t, cfg, &wg)
docker.GenerateGoDockerCompose(t, cfg, &wg)
case React:
react.Generate(t, cfg, &wg)
case Kubernetes:
kubernetes.Generate(t, cfg, &wg)
for _, s := range cfg.Services {
if !ValidLanguage(cfg.Frontend.Framework) {
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: '%s' in service '%s' is not a supported language.", s.Name, s.Language)))
}
}

util.TemplateFileIfDoesNotExist("", "README.md", t.Readme, &wg, cfg)
for _, s := range cfg.Services {
switch s.Language {
case Go:
log.Println(aurora.Cyan(emoji.Sprintf("Creating Go service")))
proto.Generate(t, cfg, s, &wg)
golang.Generate(t, cfg, s, &wg)
}
}

if cfg.CI.System != "" {
ci.Generate(t.CI, cfg, ".", &wg)
if cfg.Infrastructure.AWS.EKS.ClusterName != "" {
log.Println(aurora.Cyan(emoji.Sprintf("Generating Terraform")))
kubernetes.Generate(t, cfg, &wg)
}

if cfg.Network.Http.Enabled {
http.GenerateHTTPGW(t, cfg, &wg)
docker.GenerateGoHTTPGWDockerFile(t, cfg, &wg)
// @TODO : This strucuture probably needs to be adjusted. Probably too generic.
switch cfg.Frontend.Framework {
case React:
log.Println(aurora.Cyan(emoji.Sprintf("Creating React frontend")))
react.Generate(t, cfg, &wg)
}

util.TemplateFileIfDoesNotExist("", "README.md", t.Readme, &wg, templator.GenericTemplateData{*cfg})

// Wait for all the templates to be generated
wg.Wait()

switch language {
case Kubernetes:
log.Println("Executing commands")
// @TODO : Move this stuff to another command? Or genericize it a bit.
if cfg.Infrastructure.AWS.EKS.Deploy {
kubernetes.Execute(cfg)
}

},
}

func ValidLanguage() bool {
func ValidLanguage(language string) bool {
for _, l := range supportedLanguages {
if l == language {
return true
Expand Down
39 changes: 5 additions & 34 deletions go.mod
Expand Up @@ -3,48 +3,19 @@ module github.com/commitdev/commit0
go 1.12

require (
cloud.google.com/go v0.47.0 // indirect
cloud.google.com/go/bigquery v1.2.0 // indirect
cloud.google.com/go/storage v1.1.2 // indirect
github.com/antihax/optional v1.0.0 // indirect
github.com/creack/pty v1.1.9 // indirect
github.com/gobuffalo/logger v1.0.1 // indirect
github.com/gobuffalo/packr/v2 v2.5.2
github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 // indirect
github.com/google/go-cmp v0.3.1 // indirect
github.com/google/pprof v0.0.0-20191105001904-73b556cfc1cf // indirect
github.com/grpc-ecosystem/grpc-gateway v1.12.0 // indirect
github.com/hashicorp/golang-lru v0.5.3 // indirect
github.com/jstemmer/go-junit-report v0.9.1 // indirect
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect
github.com/k0kubun/pp v3.0.1+incompatible
github.com/kr/pty v1.1.8 // indirect
github.com/kyokomi/emoji v2.1.0+incompatible
github.com/logrusorgru/aurora v0.0.0-20191017060258-dc85c304c434
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/pelletier/go-toml v1.4.0 // indirect
github.com/pkg/errors v0.8.1 // indirect
github.com/prometheus/client_golang v1.1.0 // indirect
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
github.com/rogpeppe/go-internal v1.5.0 // indirect
github.com/russross/blackfriday v2.0.0+incompatible // indirect
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/cobra v0.0.5
github.com/stretchr/testify v1.4.0 // indirect
go.opencensus.io v0.22.1 // indirect
golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf // indirect
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136 // indirect
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 // indirect
golang.org/x/mobile v0.0.0-20191031020345-0945064e013a // indirect
golang.org/x/net v0.0.0-20191101175033-0deb6923b6d9 // indirect
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect
golang.org/x/sys v0.0.0-20191104094858-e8c54fb511f6 // indirect
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
golang.org/x/tools v0.0.0-20191104232314-dc038396d1f0 // indirect
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 // indirect
google.golang.org/appengine v1.6.5 // indirect
golang.org/x/sys v0.0.0-20191010194322-b09406accb47 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.2.5
)
)

0 comments on commit 1ee6391

Please sign in to comment.