Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions cmd/create.go
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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, 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
14 changes: 3 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,15 @@ require (
github.com/gobuffalo/packr/v2 v2.5.2
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect
github.com/k0kubun/pp v3.0.1+incompatible
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/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/fastuuid v1.2.0 // 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
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-20191010194322-b09406accb47 // indirect
google.golang.org/grpc v1.24.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.2.4
gopkg.in/yaml.v2 v2.2.5
)
Loading