/* Copyright © 2022 Matthieu Derasse */ package cmd import ( "os" "strings" "git.home.m-and-m.ovh/mderasse/boot/helpers" "git.home.m-and-m.ovh/mderasse/boot/helpers/api_type" "github.com/spf13/cobra" log "github.com/sirupsen/logrus" ) // initCmd represents the init command var initCmd = &cobra.Command{ Use: "init", Short: "Initialize a new project", Long: `Initialize a new project by creating a new directory and: - Initialize a Git Repository - Create a Go-Swagger Struct - Add default routes - Generate the API. That command is Interactive or can be control through args`, Run: runInitAction, } func init() { rootCmd.AddCommand(initCmd) } // runInitAction // Steps: // 1 - Check that we have the dependencies // 2 - Check that we are not in project directory // 3 - Ask info to the user func runInitAction(cmd *cobra.Command, args []string) { log.Debugf("Starting command Init") log.Debugf("Checking dependencies") if !checkDependencies() { return } // Get current path currentPath, err := os.Getwd() if err != nil { log.Errorf("Fail to get current path. The following error happen: %s", err.Error()) return } log.Debugf("Working in directory: %s", currentPath) // Check if we are in gouik directory log.Debug("Checking if we are in the same directory as Gouik") isGouikDir, err := helpers.IsGouikDirectory(currentPath) if err != nil { log.Errorf("Fail to check if we are in gouik directory. The following error happen: %s", err.Error()) return } if isGouikDir { log.Error("You cannot initialize a new project in the same dir than gouik\nGouik should be added to your path") return } // Check if we are in a gouik project log.Debug("Checking if we are in a gouik project") isGouikProject, err := helpers.IsGouikProject(currentPath) if err != nil { log.Errorf("Fail to check if we are in a gouik project. The following error happen: %s", err.Error()) return } if isGouikProject { log.Error("You cannot initialize a new project in an already gouik project") return } // ask which API type we want to use var possibleApiTypes []string for _, apiType := range api_type.GetListOfApiTypeName() { possibleApiTypes = append(possibleApiTypes, string(apiType)) } log.Infof("Which kind of API do you want to init (possible values: %s)", strings.Join(possibleApiTypes, ", ")) apiType := helpers.ApiTypeInput() log.Debugf("Using api type : %s", apiType) // XXX: // Check we are in gopath or ask for the gomod name // Create directory // Move to dir // git init // create .gouik // move templated file // if isGoProject, err := helpers.IsGoProject(); err != nil { // log.Error("An error occured when checking your directory.") // return // } else if isGoProject { // log.Error("Cannot initialize a new project because you are already in a Golang Project Directory.") // return // } // if isStrapProject, err := helpers.IsStrapProject(); err != nil { // log.Error("An error occured when checking your directory.") // return // } else if isStrapProject { // log.Error("Cannot initialize a new project because you are already in a Strap Project Directory.") // return // } }