From 97466a8f71a11fa2dbd30febefd706491e98b9dd Mon Sep 17 00:00:00 2001 From: bruno Date: Fri, 30 Jun 2023 10:09:01 -0400 Subject: [PATCH] build 0.0.0.25 --- Taskfile.yml | 6 +- cmdCreate/create.go | 35 +- cmdEnv/envVars.go | 327 +++++++++-- cmdLists/gitHub.go | 42 ++ cmdLists/gitTea.go | 72 +++ cmdLists/lists.go | 147 +++-- config/config.go | 819 +++++++++++++++++++--------- configFile/config-actionyml.go | 13 +- configFile/config-fileyml.go | 51 +- go.mod | 12 +- go.sum | 28 + kode-starter.go | 72 +-- readme.md | 3 +- release/linux/0.0.0.25/kode-starter | Bin 0 -> 10530273 bytes version/version-number.go | 2 +- 15 files changed, 1186 insertions(+), 443 deletions(-) create mode 100644 cmdLists/gitHub.go create mode 100644 cmdLists/gitTea.go create mode 100755 release/linux/0.0.0.25/kode-starter diff --git a/Taskfile.yml b/Taskfile.yml index 7281702..bed5903 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -10,9 +10,11 @@ vars: GORUN: "{{.GOCMD}} run" GOTEST: "{{.GOCMD}} test -v" GOCOVER: "{{.GOCMD}} test -v --cover" + VERSION: + sh: cd version/ && versionManager go version - WINDOWS_BINARY_NAME: ./release/windows/kode-starter.exe - LINUX_BINARY_NAME: ./release/linux/kode-starter + WINDOWS_BINARY_NAME: ./release/windows/{{.VERSION}}/kode-starter.exe + LINUX_BINARY_NAME: ./release/linux/{{.VERSION}}/kode-starter # env: GOOS: Linux diff --git a/cmdCreate/create.go b/cmdCreate/create.go index 4f6d1cc..4d6f38a 100644 --- a/cmdCreate/create.go +++ b/cmdCreate/create.go @@ -18,15 +18,20 @@ import ( var token, org, name, private, description string +// initailize global config +var CfgGlobal *config.Config // Declare a global variable for config + +func InitConfig(config *config.Config) { + CfgGlobal = config // Assign the passed config to the global variable +} + var CreateCmd = &cobra.Command{ Use: "create", Short: "Create Github project", Long: `A simple CLI app to create a startup project on Github`, Run: func(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) - - err := CreateProject() + err := CreateProject(cmd, args) if err != nil { fmt.Println("Error:", err) return @@ -34,15 +39,19 @@ var CreateCmd = &cobra.Command{ }, } -func CreateProject() error { +func CreateProject(cmd *cobra.Command, args []string) error { godotenv.Load() - fmt.Printf("Token: %s\n", config.GetToken()) - fmt.Printf("Name: %s\n", config.GetCreateName()) - fmt.Printf("Description: %s\n", config.GetCreateDescription()) - fmt.Printf("Private: %s\n", config.GetCreatePrivate()) - fmt.Printf("Org: %s\n", config.GetCreateOrganisation()) + CfgGlobal.DebugPrintConfig("Function CreateProject") + + // initialize global config for command list + CfgGlobal.InitCmdCreate(cmd, args) + + // print header if json flag is not set + if !CfgGlobal.GetJsonFlag() { + utils.PrintHeader() + } // Construct POST data data := structures.Project{ @@ -51,8 +60,8 @@ func CreateProject() error { Private: private == "true", } - data.Name = config.GetCreateName() - data.Description = config.GetCreateDescription() + data.Name = CfgGlobal.GetCreateName() + data.Description = CfgGlobal.GetCreateDescription() fmt.Println("Structure Name:" + data.Name) @@ -60,9 +69,9 @@ func CreateProject() error { jsonData, _ := json.Marshal(data) req, err := http.NewRequest("POST", - fmt.Sprintf("%s/%s/repos", config.GetUrlApiOrgs(), config.GetCreateOrganisation()), + fmt.Sprintf("%s/%s/repos", CfgGlobal.GetUrlApiOrgs(), CfgGlobal.GetCreateCmd().Organisation), bytes.NewBuffer(jsonData)) - req.Header.Set("Authorization", "token "+config.GetToken()) + req.Header.Set("Authorization", "token "+CfgGlobal.GetTokenEnv()) req.Header.Set("Content-Type", "application/json") client := &http.Client{} res, err := client.Do(req) diff --git a/cmdEnv/envVars.go b/cmdEnv/envVars.go index e1f11c4..94f19de 100644 --- a/cmdEnv/envVars.go +++ b/cmdEnv/envVars.go @@ -3,6 +3,8 @@ package cmdEnv import ( "fmt" "kode-starter/config" + "kode-starter/configFile" + "kode-starter/utils" "os" "strconv" @@ -12,56 +14,282 @@ import ( "github.com/spf13/cobra" ) +// initailize global config +var CfgGlobal *config.Config // Declare a global variable for config + +// init configuration for this package +func InitConfig(config *config.Config) { + CfgGlobal = config // Assign the passed config to the global variable +} + var EnvCmd = &cobra.Command{ Use: "env", Short: "manage environment variables", Long: `A simple CLI option to manage environment variables`, Run: func(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) + // Start Env command startEnvVar(cmd, args) - // listFlag := config.GetEnvVariablesListFlag() - - // fmt.Println("listFlag: " + strconv.FormatBool(listFlag)) - - // fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(config.GetEnvVariablesListFlag())) - - // if listFlag { - // printEnvVariables() - // } - - // err := listEnvVariables() - // if err != nil { - // fmt.Println("Error:", err) - // return - // } - - // if config.GetEnvVariablesFilterFlag() { - // printEnvVariablesFilter(config.GetEnvVariablesFilter()) - // } else if config.GetEnvVariablesListFlag() { - // printEnvVariables() - // } }, } func startEnvVar(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) - flag := config.EnvVariablesFlag + CfgGlobal.DebugPrintConfig("Function StartEnvVar") - // if list flag is set to true list all environment variables - fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(config.GetEnvVariablesListFlag())) - if flag { - printEnvVariables() + // declare map listPaths + var ListPaths map[string]string + + // initialize command environment + CfgGlobal.InitCmdEnv(cmd, args) + + CfgGlobal.DebugPrintConfig("Function StartEnvVar") + + if CfgGlobal.GetEnvListFlag() { + + if !CfgGlobal.GetJsonFlag() { + if CfgGlobal.GetEnvFilterFlag() { + fmt.Println("with filter") + printEnvVariablesFilter(CfgGlobal.GetEnvFilter(), CfgGlobal.GetEnvShowAllFlag()) + } else { + printEnvVariables() + } + } else { + + json, err := createJsonAllEnvVar(CfgGlobal.GetEnvFilter(), CfgGlobal.GetEnvShowAllFlag()) + if err != nil { + fmt.Println("Error:", err) + return + } + fmt.Println(json) + } + + } else if CfgGlobal.GetEnvYmlFileFlag() { + cfgYmlFile := configFile.LoadConfigFile(CfgGlobal) + + ListCategories, err := cfgYmlFile.GetListCategory() + if err != nil { + fmt.Println("Error:", err) + return + } + if !CfgGlobal.GetJsonFlag() { + utils.PrintHeader() + fmt.Println("\n L I S T E N V V A R S F R O M Y M L F I L E ") + fmt.Println(utils.CreateLine(11)) + + for _, category := range ListCategories { + // fmt.Println("Category: " + category) + + ListPaths, err = cfgYmlFile.GetAllEnvironmentVariables(category) + if err != nil { + fmt.Println("Error:", err) + return + } + + // if category flag is set + if CfgGlobal.GetEnvCategoryFlag() { + + if CfgGlobal.GetEnvCategoryInfo() == category { + // if ListPaths is no empty + if len(ListPaths) > 0 { + fmt.Println(color.FgLightGreen.Render("\nCategory: " + category)) + fmt.Println(utils.CreateLine(3)) + + // print path and value + nb := 1 + + for path, value := range ListPaths { + utils.PrintTreeElement(nb, path, value) + nb++ + } + } + } + } else { + + // if ListPaths is no empty + if len(ListPaths) > 0 { + fmt.Println(color.FgLightGreen.Render("\nCategory: " + category)) + fmt.Println(utils.CreateLine(3)) + + // print path and value + nb := 1 + + for path, value := range ListPaths { + utils.PrintTreeElement(nb, path, value) + nb++ + } + } + + } + + } + fmt.Println(utils.CreateLine(3)) + + } else { + // Execute function createJsonAllEnvVarYml : create json output for all environment variables with category + jsonOutput, err := createJsonAllEnvVarYml(cfgYmlFile, CfgGlobal.GetEnvCategoryInfo()) + if err != nil { + fmt.Println("Error:", err) + return + } + fmt.Println(jsonOutput) + } + + } else { + cmd.Help() + fmt.Println(utils.CreateLine(8)) } } +func createJsonAllEnvVar(filter string, showAll bool) (string, error) { + + //var jsonOutput string + jsonOutput := "" + + // var map listPaths + ListPaths := make(map[string]string) + + // var pair []string + + for _, e := range os.Environ() { + // split key and value + pair := strings.Split(e, "=") + + // fmt.Println(pair[1]) + if showAll { + ListPaths[string(pair[0])] = string(pair[1]) + } else { + if (strings.Contains(pair[0], filter)) || (strings.Contains(pair[1], filter)) { + ListPaths[string(pair[0])] = string(pair[1]) + } + } + + } + + // loop over all environment variables to create json output + jsonOutput += "{\n" + for path, value := range ListPaths { + jsonOutput += " \"" + path + "\": \"" + value + "\",\n" + } + jsonOutput = strings.TrimSuffix(jsonOutput, ",\n") + jsonOutput += "\n}\n" + + return utils.DoubleBackSlash(jsonOutput), nil + +} + +// The function `createJsonAllEnvVar` creates a JSON string containing all environment variables from a +// given configuration YAML file. +func createJsonAllEnvVarYml(cfgYmlFile *configFile.ConfigYml, categoryInfo string) (string, error) { + + //var jsonOutput string + jsonOutput := "" + + ListCategories, err := cfgYmlFile.GetListCategory() + if err != nil { + fmt.Println("Error:", err) + return "", err + } + + var isCategoryInfoPresent bool = false + + // check if categoryInfo includes in ListCategories + for _, category := range ListCategories { + if category == categoryInfo { + isCategoryInfoPresent = true + break + } + } + + if categoryInfo == "" { + + // loop over all categories + jsonOutput += "{\n" + for _, category := range ListCategories { + + ListPaths, err := cfgYmlFile.GetAllEnvironmentVariables(category) + if err != nil { + fmt.Println("Error:", err) + return "", err + } + + // if ListPaths is no empty + if len(ListPaths) > 0 { + + // add category as array and list of environment variables to jsonOutput + + jsonOutput += " \"" + category + "\": [\n" + + // loop over all environment variables + for path, value := range ListPaths { + jsonOutput += " {\n" + jsonOutput += " \"" + path + "\": \"" + value + "\"\n" + jsonOutput += " },\n" + } + + // remove last comma + jsonOutput = strings.TrimSuffix(jsonOutput, ",\n") + + jsonOutput += "\n ],\n" + + } + + } + jsonOutput = strings.TrimSuffix(jsonOutput, ",\n") + jsonOutput += "\n}\n" + + } else { + + // loop over all categories + if isCategoryInfoPresent { + jsonOutput += "{\n" + for _, category := range ListCategories { + + ListPaths, err := cfgYmlFile.GetAllEnvironmentVariables(category) + if err != nil { + fmt.Println("Error:", err) + return "", err + } + + if category == categoryInfo { + // if ListPaths is no empty + if len(ListPaths) > 0 { + + // add category as array and list of environment variables to jsonOutput + + jsonOutput += " \"" + category + "\": [\n" + + // loop over all environment variables + for path, value := range ListPaths { + jsonOutput += " {\n" + jsonOutput += " \"" + path + "\": \"" + value + "\"\n" + jsonOutput += " },\n" + } + + // remove last comma + jsonOutput = strings.TrimSuffix(jsonOutput, ",\n") + + jsonOutput += "\n ],\n" + + } + } + } + + jsonOutput = strings.TrimSuffix(jsonOutput, ",\n") + jsonOutput += "\n}\n" + } + + } + return utils.DoubleBackSlash(jsonOutput), nil + +} + func listEnvVariables() error { - if config.GetEnvVariablesListFlag() { - fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(config.GetEnvVariablesListFlag())) + if CfgGlobal.GetEnvCmd().EnvVariablesFilterFlag { + fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(CfgGlobal.GetEnvCmd().EnvVariablesListFlag)) printEnvVariables() } @@ -70,33 +298,56 @@ func listEnvVariables() error { } func printEnvVariables() { - fmt.Println("Environment variables") - fmt.Println("---------------------") + fmt.Println("E n v i r o n m e n t v a r i a b l e s") + fmt.Println("-----------------------------------------") + + nb := 1 // loop over all environment variables for _, e := range os.Environ() { // split key and value pair := strings.Split(e, "=") - fmt.Printf("%s=%s\n", pair[0], pair[1]) + utils.PrintTreeElement(nb, pair[0], pair[1]) + nb++ } + + fmt.Println("-----------------------------------------") } -func printEnvVariablesFilter(filter string) { - fmt.Println("Environment variables") +func printEnvVariablesFilter(filter string, showAll bool) { + fmt.Println("Filter Environment variables") // fmt.Println("---------------------") utils.CreateLine(5) + nb := 1 + var str2, str3 string + var addToPrint bool = false + // loop over all environment variables for _, e := range os.Environ() { // split key and value pair := strings.Split(e, "=") if strings.Contains(pair[0], filter) { - fmt.Printf("%s=%s\n", utils.ColorizeSubStrRed(pair[0], filter), color.Green.Sprint(pair[1])) + str2 = utils.ColorizeSubStrRed(pair[0], filter) + str3 = color.Green.Sprint(pair[1]) + addToPrint = true } else if strings.Contains(pair[1], filter) { - fmt.Printf("%s=%s\n", color.Green.Sprint(pair[0]), utils.ColorizeSubStrRed(pair[1], filter)) + str2 = color.Green.Sprint(pair[0]) + str3 = utils.ColorizeSubStrRed(pair[1], filter) + addToPrint = true } else { - fmt.Printf("%s=%s\n", pair[0], pair[1]) + if showAll { + str2 = utils.ColorizeString(pair[0], color.Green) + str3 = utils.ColorizeString(pair[1], color.LightWhite) + addToPrint = true + } } + if addToPrint { + utils.PrintTreeElement(nb, str2, str3) + } + + addToPrint = false + nb++ } } diff --git a/cmdLists/gitHub.go b/cmdLists/gitHub.go new file mode 100644 index 0000000..e135d72 --- /dev/null +++ b/cmdLists/gitHub.go @@ -0,0 +1,42 @@ +package cmdLists + +import ( + "context" + "fmt" + + "github.com/google/go-github/github" + "golang.org/x/oauth2" +) + +func ListGitHubOrganization() ([]string, error) { + + var orgs []string + + return orgs, nil +} + +func ListGitHubProjectsfromUser(username string) ([]*github.Repository, error) { + + // Replace with your access token + token := "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" + + // Create an oauth2 token source with the access token + tokenSource := oauth2.StaticTokenSource( + &oauth2.Token{AccessToken: token}, + ) + + // Create an oauth2 http client with the token source + oauth2Client := oauth2.NewClient(context.Background(), tokenSource) + + // Create a new github client with the oauth2 http client + client := github.NewClient(oauth2Client) + + // List the repositories of the user + repos, _, err := client.Repositories.List(context.Background(), username, nil) + if err != nil { + fmt.Println(err) + return nil, err + } + + return repos, nil +} diff --git a/cmdLists/gitTea.go b/cmdLists/gitTea.go new file mode 100644 index 0000000..3978b51 --- /dev/null +++ b/cmdLists/gitTea.go @@ -0,0 +1,72 @@ +package cmdLists + +import ( + "encoding/json" + "fmt" + "kode-starter/utils" + + "github.com/joho/godotenv" +) + +// The ListOrganization function retrieves a list of organizations from a specified URL and returns +// their names and URLs. +func ListGitTeaOrganization() ([]string, error) { + godotenv.Load() + + body := UrlGetBody(CfgGlobal.GetUrlApiOrgs()) + if CfgGlobal.GetJsonFlag() { + return utils.BytesToStrings(body), nil + } else { + + var orgs []map[string]interface{} + err := json.Unmarshal(body, &orgs) + if err != nil { + return nil, err + } else { + var orgNames []string + for i, org := range orgs { + // nb := "[ " + strconv.FormatInt(int64(i+1), 10) + " ] " + nb := fmt.Sprintf("[ %02d ] ", int64(i+1)) + orgName := fmt.Sprintf("%s", org["username"]) + orgUrl := fmt.Sprintf("[ %s/%s ]\n", CfgGlobal.GetUrlBase(), org["username"]) + orgNames = append( + orgNames, + utils.PadString(nb, 4), + utils.PadDotString(orgName, 30), + orgUrl) + } + return orgNames, nil + } + } +} + +// This function lists the projects of a given organization and returns their names and clone URLs. +func ListGitTeaProjects(org string) ([]string, error) { + godotenv.Load() + + body := UrlGetBody(CfgGlobal.GetUrlApiOrgs() + "/" + org + "/repos") + if CfgGlobal.GetJsonFlag() { + return utils.BytesToStrings(body), nil + } else { + var prjs []map[string]interface{} + err := json.Unmarshal(body, &prjs) + if err != nil { + return nil, err + } else { + var orgNames []string + + for i, prj := range prjs { + nb := fmt.Sprintf("[ %02d ] ", int64(i+1)) + projectName := fmt.Sprintf("%s", prj["name"]) + cloneUrl := fmt.Sprintf("[ %s ]\n", prj["clone_url"]) + orgNames = append( + orgNames, + utils.PadString(nb, 4), + utils.PadString(projectName, 40), + cloneUrl, + ) + } + return orgNames, nil + } + } +} diff --git a/cmdLists/lists.go b/cmdLists/lists.go index abfb860..c33e7ea 100644 --- a/cmdLists/lists.go +++ b/cmdLists/lists.go @@ -1,18 +1,23 @@ package cmdLists import ( - "encoding/json" "fmt" "io" "kode-starter/config" "kode-starter/utils" "net/http" - "strconv" - "github.com/joho/godotenv" "github.com/spf13/cobra" ) +// initailize global config +var CfgGlobal *config.Config // Declare a global variable for config + +// init configuration for this package +func InitConfig(config *config.Config) { + CfgGlobal = config // Assign the passed config to the global variable +} + // This is a variable declaration that creates a new Cobra command called `ListCmd`. The command has a // `Use` field that specifies the name of the command, a `Short` field that provides a brief // description of the command, and a `Long` field that provides a more detailed description of the @@ -25,112 +30,84 @@ var ListCmd = &cobra.Command{ Long: `A simple CLI app to list Github, Gitea orgs, project`, Run: func(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) + // Start list command + startList(cmd, args) + + }, +} + +// The startList function sets some configuration information based on the command line arguments. +func startList(cmd *cobra.Command, args []string) { + + CfgGlobal.DebugPrintConfig("Function startList") + + // initialize global config for command list + CfgGlobal.InitCmdList(cmd, args) + + // print header if json flag is not set + if !CfgGlobal.GetJsonFlag() { + utils.PrintHeader() + } + + if CfgGlobal.GetTeaFlag() { // if -o flag is set, list projects for that org - if config.GetListOrganisationFlag() { - if !config.GetJsonFlag() { - // utils.PrintHeader() - fmt.Println("\nList projects for org: " + config.GetListOrganisation() + "\n") - fmt.Println(utils.CreateLine(6)) + if CfgGlobal.GetListOrganizationFlag() { + if !CfgGlobal.GetJsonFlag() { + fmt.Println("\n L I S T P R O J E C T S F O R O R G. ") + fmt.Println(utils.CreateLine(8)) + fmt.Println(" ==> " + CfgGlobal.GetListOrganization() + " <== ") + fmt.Println(utils.CreateLine(8)) } - projects, err := ListProjects(config.GetListOrganisation()) + projects, err := ListGitTeaProjects(CfgGlobal.GetListOrganization()) if err != nil { fmt.Println("Error:", err) return } for _, project := range projects { - fmt.Print(project) + fmt.Println(project) + // fmt.Print(project) } + fmt.Println(utils.CreateLine(8)) + } else { - orgs, err := ListOrganization() + orgs, err := ListGitTeaOrganization() if err != nil { fmt.Println("Error:", err) return } - if !config.GetJsonFlag() { - fmt.Println("\nList of Organizations :") - fmt.Println(utils.CreateLine(4)) + if !CfgGlobal.GetJsonFlag() { + fmt.Println("\n L I S T O R G A N I Z A T I O N S") + fmt.Println(utils.CreateLine(8)) } for _, org := range orgs { + fmt.Print(org) } + fmt.Println(utils.CreateLine(8)) } + } else if CfgGlobal.GetGitFlag() { + fmt.Println("\n L I S T G I T H U B P R O J E C T S F O R : " + CfgGlobal.GetListUser()) + fmt.Println(utils.CreateLine(11)) + repos, err := ListGitHubProjectsfromUser(CfgGlobal.GetListUser()) + if err != nil { + fmt.Println("Error:", err) + return + } + nb := 1 + for _, repo := range repos { + utils.PrintTreeElement(nb, *repo.Name, *repo.HTMLURL) + nb++ + } + fmt.Println(utils.CreateLine(11)) - }, -} - -// The ListOrganization function retrieves a list of organizations from a specified URL and returns -// their names and URLs. -func ListOrganization() ([]string, error) { - godotenv.Load() - - if config.GetVerboseFlag() { - fmt.Println("execute ListOrganization ...") - fmt.Println("URL: " + config.GetUrlApiOrgs()) - fmt.Println("Token: " + config.GetToken()) - } - body := UrlGetBody(config.GetUrlApiOrgs()) - if config.GetJsonFlag() { - return utils.BytesToStrings(body), nil } else { - var orgs []map[string]interface{} - err := json.Unmarshal(body, &orgs) - if err != nil { - return nil, err - } else { - var orgNames []string - for i, org := range orgs { - nb := strconv.FormatInt(int64(i+1), 10) - orgName := fmt.Sprintf("%s", org["username"]) - orgUrl := fmt.Sprintf("[ %s/%s ]\n", config.GetUrlBase(), org["username"]) - orgNames = append( - orgNames, - utils.PadString(nb, 4), - utils.PadString(orgName, 30), - orgUrl) - } - return orgNames, nil - } - } -} + // print help if no flag is set + cmd.Help() -// This function lists the projects of a given organization and returns their names and clone URLs. -func ListProjects(org string) ([]string, error) { - godotenv.Load() - - if config.GetVerboseFlag() { - fmt.Println("execute ListProjects ...") - fmt.Println("URL: " + config.GetUrlApiOrgs()) - fmt.Println("Token: " + config.GetToken()) } - body := UrlGetBody(config.GetUrlApiOrgs() + "/" + org + "/repos") - if config.GetJsonFlag() { - return utils.BytesToStrings(body), nil - } else { - var prjs []map[string]interface{} - err := json.Unmarshal(body, &prjs) - if err != nil { - return nil, err - } else { - var orgNames []string - - for i, prj := range prjs { - nb := strconv.FormatInt(int64(i+1), 10) - projectName := fmt.Sprintf("%s", prj["name"]) - cloneUrl := fmt.Sprintf("[ %s ]\n", prj["clone_url"]) - orgNames = append( - orgNames, - utils.PadString(nb, 4), - utils.PadString(projectName, 40), - cloneUrl, - ) - } - return orgNames, nil - } - } } // This function sends a GET request to a specified URL with authorization and content-type headers, @@ -142,7 +119,7 @@ func UrlGetBody(url string) []byte { fmt.Println("Error creating request:", err) } - req.Header.Set("Authorization", "token "+config.GetToken()) + req.Header.Set("Authorization", "token "+CfgGlobal.GetTokenEnv()) req.Header.Set("Content-Type", "application/json") // fmt.Println(req.Header.Get("Authorization")) resp, err := http.DefaultClient.Do(req) diff --git a/config/config.go b/config/config.go index 7c32108..ac384d6 100644 --- a/config/config.go +++ b/config/config.go @@ -3,376 +3,701 @@ package config import ( "fmt" "kode-starter/utils" + "time" "github.com/spf13/cobra" ) type Config struct { - DebugMode bool - LogLevel string + DebugMode bool + LogLevel string + author string + ModifDate string + ConfigFileYmlName string + TokenEnv string + VerboseFlag bool + JsonFlag bool + VersionFlag bool + HelpFlag bool + Url URLConfig + ListCmd ListCmdConfig + CreateCmd CreateCmdConfig + EnvCmd EnvCmdConfig + applicationName string } -var author string = "Bruno Charest" - -var modifDate string = "2023-06-12" - -var ConfigFileYmlName string = "config.yml" - -var tokenEnv string = utils.GetGitToken() - -var verboseFlag bool = false - -var jsonFlag bool = false - -var versionFlag bool = false - -var helpFlag bool = false - -// variables for URL -// ----------------- -var urlBase string = "https://git.bcmaison.cf" - -var urlApiBase string = urlBase + "/api/v1" - -var urlApiOrgs string = urlApiBase + "/orgs" - -// variables for list command -// -------------------------- -var listOrganization string - -var listOrganizationFlag bool = false - -// variables for create command -// ---------------------------- -var createName string - -var createOrganisation string - -var createDescription string - -var createPrivatge string - -// variables for env command -// ------------------------- -var EnvVariablesFlag bool = false - -var envVariablesFilterFlag bool = false - -var ennVariablesListFlag bool = false - -var envVariablesFilter string - -var envVariablesYmlFlag bool = false - -var envVariablesCategoryFlag bool = false - -var envVariablesCategory string - -var envVariablesSetFlag bool = false - -// general functions -// ----------------- -func GetAuthor() string { - return author +type URLConfig struct { + Base string + ApiBase string + ApiOrgs string } -func GetBuildDate() string { - return modifDate +type ListCmdConfig struct { + Organization string + GitFlag bool + TeaFlag bool + User string + listOrganizationFlag bool } -func GetConfigFileName() string { - return ConfigFileYmlName +type CreateCmdConfig struct { + Name string + Organisation string + Description string + Private bool } -func GetToken() string { - return tokenEnv +type EnvCmdConfig struct { + EnvVariablesFlag bool + EnvVariablesListFlag bool + EnvVariablesFilterFlag bool + EnvVariablesFilter string + EnvVariablesYmlFlag bool + EnvVariablesCategoryFlag bool + EnvVariablesCategory string + EnvVariablesSetFlag bool + EnvVariablesShowAllFlag bool } -func SetToken(token string) { - tokenEnv = token +// * * * * * * * * * * * * * * * * * * * * * * * * // +// **** G E N E R A L GETTER - SETTER **** +// * * * * * * * * * * * * * * * * * * * * * * * * // + +// Getter for DebugMode field +func (c *Config) GetDebugMode() bool { + return c.DebugMode } -func GetJsonFlag() bool { - return jsonFlag +// Setter for DebugMode field +func (c *Config) SetDebugMode(value bool) { + c.DebugMode = value } -func SetJsonFlag(flag bool) { - jsonFlag = flag +// Getter for LogLevel field +func (c *Config) GetLogLevel() string { + return c.LogLevel } -func GetUrlBase() string { - return urlBase +// Setter for LogLevel field +func (c *Config) SetLogLevel(value string) { + c.LogLevel = value } -func GetUrlApiBase() string { - return urlApiBase +// Getter for author field +func (c *Config) GetAuthor() string { + return c.author } -func GetUrlApiOrgs() string { - return urlApiOrgs +// Setter for author field +func (c *Config) SetAuthor(value string) { + c.author = value } -func GetVerboseFlag() bool { - return verboseFlag +// Getter for modifDate field +func (c *Config) GetModifDate() string { + return c.ModifDate } -func SetVerboseFlag(flag bool) { - verboseFlag = flag +// Setter for modifDate field +func (c *Config) SetModifDate(value string) { + c.ModifDate = value } -func SetVersionFlag(flag bool) { - versionFlag = flag +// Getter for ConfigFileYmlName field +func (c *Config) GetConfigFileYmlName() string { + return c.ConfigFileYmlName } -func GetVersionFlag() bool { - return versionFlag +// Setter for ConfigFileYmlName field +func (c *Config) SetConfigFileYmlName(value string) { + c.ConfigFileYmlName = value } -func SetHelpFlag(flag bool) { - helpFlag = flag +// Getter for tokenEnv field +func (c *Config) GetTokenEnv() string { + return c.TokenEnv } -func GetHelpFlag() bool { - return helpFlag +// Setter for tokenEnv field +func (c *Config) SetTokenEnv(value string) { + c.TokenEnv = value } -// functions for list command -// -------------------------- -func SetListOrganisation(name string) { - listOrganization = name +// Getter for verboseFlag field +func (c *Config) GetVerboseFlag() bool { + return c.VerboseFlag } -func GetListOrganisation() string { - return listOrganization +// Setter for verboseFlag field +func (c *Config) SetVerboseFlag(value bool) { + c.VerboseFlag = value } -func SetListOrganisationFlag(flag bool) { - listOrganizationFlag = flag +// Getter for jsonFlag field +func (c *Config) GetJsonFlag() bool { + return c.JsonFlag } -func GetListOrganisationFlag() bool { - return listOrganizationFlag +// Setter for jsonFlag field +func (c *Config) SetJsonFlag(value bool) { + c.JsonFlag = value } -// functions for create command -// ---------------------------- -func GetCreateName() string { - return createName +// Getter for versionFlag field +func (c *Config) GetVersionFlag() bool { + return c.VersionFlag } -func SetCreateName(name string) { - createName = name +// Setter for versionFlag field +func (c *Config) SetVersionFlag(value bool) { + c.VersionFlag = value } -func GetCreateOrganisation() string { - return createOrganisation +// Getter for helpFlag field +func (c *Config) GetHelpFlag() bool { + return c.HelpFlag } -func SetCeateOrganisation(organisation string) { - createOrganisation = organisation +// Setter for helpFlag field +func (c *Config) SetHelpFlag(value bool) { + c.HelpFlag = value } -func GetCreateDescription() string { - return createDescription +// Getter for url field +func (c *Config) GetUrl() URLConfig { + return c.Url } -func SetCeateDescription(description string) { - createDescription = description +// Setter for url field +func (c *Config) SetUrl(value URLConfig) { + c.Url = value } -func GetCreatePrivate() string { - return createPrivatge +// Getter urlBase field +func (c *Config) GetUrlBase() string { + return c.Url.Base } -func SetCreatePrivate(private string) { - createPrivatge = private +// Setter urlBase field +func (c *Config) SetUrlBase(value string) { + c.Url.Base = value } -// function for env command -// ------------------------ -func GetEnvVariablesFlag() bool { - return EnvVariablesFlag +// Getter urlApiBase field +func (c *Config) GetUrlApiBase() string { + return c.Url.ApiBase } -func SetEnvVariablesFlag(flag bool) { - EnvVariablesFlag = flag +// Setter urlApiBase field +func (c *Config) SetUrlApiBase(value string) { + c.Url.ApiBase = value } -func GetEnvVariablesFilterFlag() bool { - return envVariablesFilterFlag +// Getter urlApiOrgs field +func (c *Config) GetUrlApiOrgs() string { + return c.Url.ApiOrgs } -func SetEnvVariablesFilterFlag(flag bool) { - envVariablesFilterFlag = flag +// Setter urlApiOrgs field +func (c *Config) SetUrlApiOrgs(value string) { + c.Url.ApiOrgs = value } -func GetEnvVariablesFilter() string { - return envVariablesFilter +// Getter for applicationName field +func (c *Config) GetApplicationName() string { + return c.applicationName } -func SetEnvVariablesFilter(filter string) { - envVariablesFilter = filter +// Setter for applicationName field +func (c *Config) SetApplicationName(value string) { + c.applicationName = value } -func GetEnvVariablesListFlag() bool { - return ennVariablesListFlag +// * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * L I S T C M D GETTER - SETTER * * * * +// * * * * * * * * * * * * * * * * * * * * * * * * // + +// Getter for listCmd field +func (c *Config) GetListCmd() ListCmdConfig { + return c.ListCmd } -func SetEnvVariablesListFlag(flag bool) { - ennVariablesListFlag = flag +// Setter for listCmd field +func (c *Config) SetListCmd(value ListCmdConfig) { + c.ListCmd = value } -func GetEnvVariablesYmlFlag() bool { - return envVariablesYmlFlag +// Getter for listOrganizationFlag field +func (c *Config) GetListOrganizationFlag() bool { + return c.ListCmd.listOrganizationFlag } -func SetEnvVariablesYmlFlag(flag bool) { - envVariablesYmlFlag = flag +// Setter for listOrganizationFlag field +func (c *Config) SetListOrganizationFlag(value bool) { + c.ListCmd.listOrganizationFlag = value } -func GetEnvVariablesCategoryFlag() bool { - return envVariablesCategoryFlag +// Getter for listOrganization field +func (c *Config) GetListOrganization() string { + return c.ListCmd.Organization } -func SetEnvVariablesCategoryFlag(flag bool) { - envVariablesCategoryFlag = flag +// Setter for listOrganization field +func (c *Config) SetListOrganization(value string) { + c.ListCmd.Organization = value } -func GetEnvVariablesCategory() string { - return envVariablesCategory +// getter for Git flag +func (c *Config) GetGitFlag() bool { + return c.ListCmd.GitFlag } -func SetEnvVariablesCategory(category string) { - envVariablesCategory = category +// setter for Git flag +func (c *Config) SetGitFlag(value bool) { + c.ListCmd.GitFlag = value } -func GetEnvVariablesSetFlag() bool { - return envVariablesSetFlag +// getter for Tea flag +func (c *Config) GetTeaFlag() bool { + return c.ListCmd.TeaFlag } -func SetEnvVariablesSetFlag(flag bool) { - envVariablesSetFlag = flag +// setter for Tea flag +func (c *Config) SetTeaFlag(value bool) { + c.ListCmd.TeaFlag = value } -// SetInformations - set informations from command line -func SetInformations(cmd *cobra.Command, args []string) { +// getter for User +func (c *Config) GetListUser() string { + return c.ListCmd.User +} + +// setter for User +func (c *Config) SetListUser(value string) { + c.ListCmd.User = value +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * C R E A T E C M D GETTER - SETTER * * * * +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Getter for createCmd field +func (c *Config) GetCreateCmd() CreateCmdConfig { + return c.CreateCmd +} + +// Setter for createCmd field +func (c *Config) SetCreateCmd(value CreateCmdConfig) { + c.CreateCmd = value +} + +// Getter for createName field +func (c *Config) GetCreateName() string { + return c.CreateCmd.Name +} + +// Setter for createName field +func (c *Config) SetCreateName(value string) { + c.CreateCmd.Name = value +} + +// Getter for createDescription field +func (c *Config) GetCreateDescription() string { + return c.CreateCmd.Description +} + +// Setter for createDescription field +func (c *Config) SetCreateDescription(value string) { + c.CreateCmd.Description = value +} + +// Getter for createPrivate field +func (c *Config) GetCreatePrivate() bool { + return c.CreateCmd.Private +} + +// Setter for createPrivate field +func (c *Config) SetCreatePrivate(value bool) { + c.CreateCmd.Private = value +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * E N V C M D GETTER - SETTER * * * * +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Getter for envCmd field +func (c *Config) GetEnvCmd() EnvCmdConfig { + return c.EnvCmd +} + +// Setter for envCmd field +func (c *Config) SetEnvCmd(value EnvCmdConfig) { + c.EnvCmd = value +} + +// Getter for envVariblesFlag flag +func (c *Config) GetEnvVariblesFlag() bool { + return c.EnvCmd.EnvVariablesFlag +} + +// Setter for envVariblesFlag flag +func (c *Config) SetEnvVariblesFlag(value bool) { + c.EnvCmd.EnvVariablesFlag = value +} + +// Getter for env list flag +func (c *Config) GetEnvListFlag() bool { + return c.EnvCmd.EnvVariablesListFlag +} + +// Setter for env list flag +func (c *Config) SetEnvListFlag(value bool) { + c.EnvCmd.EnvVariablesListFlag = value +} + +// Getter for env filter flag +func (c *Config) GetEnvFilterFlag() bool { + return c.EnvCmd.EnvVariablesFilterFlag +} + +// Setter for env filter flag +func (c *Config) SetEnvFilterFlag(value bool) { + c.EnvCmd.EnvVariablesFilterFlag = value +} + +// Getter for env filter +func (c *Config) GetEnvFilter() string { + return c.EnvCmd.EnvVariablesFilter +} + +// Setter for env filter +func (c *Config) SetEnvFilterInfo(value string) { + c.EnvCmd.EnvVariablesFilter = value +} + +// Getter for env yml file flag +func (c *Config) GetEnvYmlFileFlag() bool { + return c.EnvCmd.EnvVariablesYmlFlag +} + +// Setter for env yml file flag +func (c *Config) SetEnvYmlFileFlag(value bool) { + c.EnvCmd.EnvVariablesYmlFlag = value +} + +// Getter for env category flag +func (c *Config) GetEnvCategoryFlag() bool { + return c.EnvCmd.EnvVariablesCategoryFlag +} + +// Setter for env category flag +func (c *Config) SetEnvCategoryFlag(value bool) { + c.EnvCmd.EnvVariablesCategoryFlag = value +} + +// Getter for env category Info +func (c *Config) GetEnvCategoryInfo() string { + return c.EnvCmd.EnvVariablesCategory +} + +// Setter for env category Info +func (c *Config) SetEnvCategoryInfo(value string) { + c.EnvCmd.EnvVariablesCategory = value +} + +// Getter for env Set flag +func (c *Config) GetEnvSetFlag() bool { + return c.EnvCmd.EnvVariablesSetFlag +} + +// Setter for env Set flag +func (c *Config) SetEnvSetFlag(value bool) { + c.EnvCmd.EnvVariablesSetFlag = value +} + +// Getter for env Show All flag +func (c *Config) GetEnvShowAllFlag() bool { + return c.EnvCmd.EnvVariablesShowAllFlag +} + +// Setter for env Show All flag +func (c *Config) SetEnvShowAllFlag(value bool) { + c.EnvCmd.EnvVariablesShowAllFlag = value +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// initialize basic configuration +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) Init() { + + // autor + var author string = "Bruno Charest" + // Cfg.SetAuthor(author) + c.SetAuthor(author) + + // set modification date to current date + var modifDate string = time.Now().Format("2006-01-02") + c.SetModifDate(modifDate) + + // set config file name + var configFileYmlName string = "config.yml" + c.SetConfigFileYmlName(configFileYmlName) + + // set token from environment variable + var tokenEnv string = utils.GetGitTokenFromOsEnv() + c.SetTokenEnv(tokenEnv) + + // set verbose flag + c.SetVerboseFlag(false) + + // set json flag + c.SetJsonFlag(false) + + // set version flag + c.SetVersionFlag(false) + + // set help flag + c.SetHelpFlag(false) + + // set url base + var urlBase string = "https://git.bcmaison.cf" + c.SetUrlBase(urlBase) + + // set url api base + var urlApiBase string = urlBase + "/api/v1" + c.SetUrlApiBase(urlApiBase) + + // set url api orgs + var urlApiOrgs string = urlApiBase + "/orgs" + c.SetUrlApiOrgs(urlApiOrgs) + + //set application name + var appName string = "Kode-Creator" + c.SetApplicationName(appName) + +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// initialize configuration for commands and flags +// for root command +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) InitCmdRoot(cmd *cobra.Command, args []string) { // Check if the version flag is set if cmd.Flags().Changed("version") || cmd.Flags().Changed("V") { - SetVersionFlag(true) + c.SetVersionFlag(true) } // Check if the verbose flag is set if cmd.Flags().Changed("verbose") || cmd.Flags().Changed("v") { - SetVerboseFlag(true) + c.SetVerboseFlag(true) } else { - SetVerboseFlag(false) + c.SetVerboseFlag(false) } // Check if the json flag is set if cmd.Flags().Changed("json") || cmd.Flags().Changed("j") { - SetJsonFlag(true) + c.SetJsonFlag(true) } else { - SetJsonFlag(false) + c.SetJsonFlag(false) } // check if the help flag is set if cmd.Flags().Changed("help") || cmd.Flags().Changed("h") { - SetHelpFlag(true) + c.SetHelpFlag(true) } - if cmd.Flags().Changed("name") || cmd.Flags().Changed("n") { - SetCreateName(cmd.Flag("name").Value.String()) - } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// initialize configuration command and flags +// for list command +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) InitCmdList(cmd *cobra.Command, args []string) { if cmd.Flags().Changed("org") || cmd.Flags().Changed("o") { if cmd.Name() == "list" { - SetListOrganisation(cmd.Flag("org").Value.String()) - SetListOrganisationFlag(true) + c.SetListOrganization(cmd.Flag("org").Value.String()) + c.SetListOrganizationFlag(true) } else { - SetCeateOrganisation(cmd.Flag("org").Value.String()) + c.SetListOrganization(cmd.Flag("org").Value.String()) + } + } + + if cmd.Flags().Changed("user") || cmd.Flags().Changed("u") { + c.SetListUser(cmd.Flag("user").Value.String()) + } + + if cmd.Flags().Changed("git") || cmd.Flags().Changed("g") { + c.SetGitFlag(true) + } + + if cmd.Flags().Changed("tea") || cmd.Flags().Changed("a") { + c.SetTeaFlag(true) + } + +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// initialize configuration for commands and flags +// for create command +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) InitCmdCreate(cmd *cobra.Command, args []string) { + + // initialize configuration for root command + // c.InitCmdRoot(cmd, args) + + // validate flag on create command + if cmd.Name() == "create" { + + // set organization flag if set + if cmd.Flags().Changed("org") || cmd.Flags().Changed("o") { + c.SetListOrganization(cmd.Flag("org").Value.String()) + c.SetListOrganizationFlag(true) } - } + // set name flag if set + if cmd.Flags().Changed("name") || cmd.Flags().Changed("n") { + c.SetCreateName(cmd.Flag("name").Value.String()) + } - if cmd.Flags().Changed("desc") || cmd.Flags().Changed("d") { - SetCeateDescription(cmd.Flag("desc").Value.String()) - } + // set description flag if set + if cmd.Flags().Changed("desc") || cmd.Flags().Changed("d") { + c.SetCreateDescription(cmd.Flag("desc").Value.String()) + } - if cmd.Flags().Changed("private") || cmd.Flags().Changed("p") { - SetCreatePrivate(cmd.Flag("private").Value.String()) - } - - // set env variables flag if set - if cmd.Flags().Changed("env") || cmd.Flags().Changed("e") { - SetEnvVariablesFlag(true) - - // if flag list is set, set filter flag - if cmd.Flags().Changed("list") || cmd.Flags().Changed("l") { - SetEnvVariablesListFlag(true) - - // set env variables filter flag if set - if cmd.Flags().Changed("filter") || cmd.Flags().Changed("f") { - SetEnvVariablesFilter(cmd.Flag("filter").Value.String()) + // set private flag if set + if cmd.Flags().Changed("private") || cmd.Flags().Changed("p") { + if cmd.Flag("private").Value.String() == "true" { + c.SetCreatePrivate(true) + } else if cmd.Flag("private").Value.String() == "false" { + c.SetCreatePrivate(false) + } else { + c.SetCreatePrivate(false) } - - } else if cmd.Flags().Changed("yml") || cmd.Flags().Changed("y") { - SetEnvVariablesYmlFlag(true) - - // set env variables category flag if set - if cmd.Flags().Changed("category") || cmd.Flags().Changed("c") { - SetEnvVariablesCategoryFlag(true) - SetEnvVariablesCategory(cmd.Flag("category").Value.String()) - } - - } else if cmd.Flags().Changed("set") || cmd.Flags().Changed("s") { - SetEnvVariablesSetFlag(true) - } - - } - - // If verbose flag is set, print informations - if GetVerboseFlag() { - if cmd.Name() == "list" { - fmt.Println("SetInformations - progress list option:") - fmt.Println("SetInformations - org:" + cmd.Flag("org").Value.String()) - fmt.Println("SetInformations - cmd Usertoken:" + cmd.Flag("token").Value.String()) - } - if cmd.Name() == "create" { - fmt.Println("SetInformations - progress create option:") - fmt.Println("SetInformations - name:" + cmd.Flag("name").Value.String()) - fmt.Println("SetInformations - description:" + cmd.Flag("desc").Value.String()) - fmt.Println("SetInformations - private:" + cmd.Flag("private").Value.String()) - fmt.Println("SetInformations - cmd Usertoken:" + cmd.Flag("token").Value.String()) - fmt.Println("SetInformations - org:" + cmd.Flag("org").Value.String()) - } - if cmd.Name() == "env" { - fmt.Println("SetInformations - progress env option:") - // fmt.Println("SetInformations - cmd Usertoken:" + cmd.Flag("token").Value.String()) - fmt.Println("SetInformations - env:" + cmd.Flag("env").Value.String()) - fmt.Println("SetInformations - filter:" + cmd.Flag("filter").Value.String()) - fmt.Println("SetInformations - list:" + cmd.Flag("list").Value.String()) - fmt.Println("SetInformations - yml:" + cmd.Flag("yml").Value.String()) - if GetEnvVariablesListFlag() { - fmt.Println("SetInformations - category:" + cmd.Flag("category").Value.String()) - } - fmt.Println("SetInformations - set:" + cmd.Flag("set").Value.String()) - } - } - - // Check if token come from flag or env - if cmd.Flags().Changed("token") || cmd.Flags().Changed("t") { - if utils.IsValidToken(cmd.Flag("token").Value.String()) { - SetToken(cmd.Flag("token").Value.String()) - } else { - utils.ExitWithError(10, "Invalid token, format must be 40 characters UUID.") - } - - } else { - if utils.IsValidToken(utils.GetGitToken()) { - SetToken(utils.GetGitToken()) - } else { - utils.ExitWithError(10, "Invalid token, format must be 40 characters UUID.") } } } + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// initialize configuration commands and flags +// for env command +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) InitCmdEnv(cmd *cobra.Command, args []string) { + + // initialize configuration for root command + c.InitCmdRoot(cmd, args) + + // validate flag on env command + if cmd.Name() == "env" { + + // if flag list is set, set filter flag + if cmd.Flags().Changed("list") || cmd.Flags().Changed("l") { + c.SetEnvListFlag(true) + + // // set env variables filter flag if set + // if cmd.Flags().Changed("filter") || cmd.Flags().Changed("f") { + // c.SetEnvFilterInfo(cmd.Flag("filter").Value.String()) + // c.SetEnvFilterFlag(true) + // } + + } + + // set env variables filter flag if set + if cmd.Flags().Changed("filter") || cmd.Flags().Changed("f") { + c.SetEnvFilterInfo(cmd.Flag("filter").Value.String()) + c.SetEnvFilterFlag(true) + } + + if cmd.Flags().Changed("yml") || cmd.Flags().Changed("y") { + c.SetEnvYmlFileFlag(true) + + } + + if cmd.Flags().Changed("set") || cmd.Flags().Changed("s") { + c.SetEnvSetFlag(true) + } + + // set env variables category flag if set + if cmd.Flags().Changed("cat") || cmd.Flags().Changed("c") { + fmt.Println("cat flag set") + c.SetEnvCategoryFlag(true) + c.SetEnvCategoryInfo(cmd.Flag("cat").Value.String()) + } + + // set env variables show all flag if set + if cmd.Flags().Changed("all") || cmd.Flags().Changed("a") { + c.SetEnvShowAllFlag(true) + } + + } +} + +// function that print all configuration if DebugMode is true +func (c *Config) DebugPrintConfig(section string) { + + if c.GetDebugMode() { + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + fmt.Println("| Section: " + section) + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + c.printAllConfiguration() + } +} + +// function that print string if DebugMode is true +func (c *Config) DebugPrintString(str string) { + + if c.GetDebugMode() { + fmt.Println(str) + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// function to print all configuration +// for information and flags +// * * * * * * * * * * * * * * * * * * * * * * * * * * * // +func (c *Config) printAllConfiguration() { + + fmt.Println("General Configuration:") + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + fmt.Println("Config: DebugMode: ", c.GetDebugMode()) + fmt.Println("Config: LogLevel: ", c.GetLogLevel()) + fmt.Println("config: Author: ", c.GetAuthor()) + fmt.Println("config: ModifDate: ", c.GetModifDate()) + fmt.Println("config: ConfigFileYmlName: ", c.GetConfigFileYmlName()) + fmt.Println("config: TokenEnv: ", c.GetTokenEnv()) + fmt.Println("config: VerboseFlag: ", c.GetVerboseFlag()) + fmt.Println("config: JsonFlag: ", c.GetJsonFlag()) + fmt.Println("config: VersionFlag: ", c.GetVersionFlag()) + fmt.Println("config: HelpFlag: ", c.GetHelpFlag()) + fmt.Println("config: UrlBase: ", c.GetUrlBase()) + fmt.Println("config: UrlApiBase: ", c.GetUrlApiBase()) + fmt.Println("config: UrlApiOrgs: ", c.GetUrlApiOrgs()) + + fmt.Println("List Commands Configuration:") + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + fmt.Println("config: ListOrganization: ", c.GetListOrganization()) + fmt.Println("config: ListOrganizationFlag: ", c.GetListOrganizationFlag()) + + fmt.Println("Create commands Configuration:") + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + fmt.Println("config: CreateName: ", c.GetCreateCmd().Name) + fmt.Println("config: Organization: ", c.GetCreateCmd().Organisation) + fmt.Println("config: CreateDescription: ", c.GetCreateCmd().Description) + fmt.Println("config: CreatePrivate: ", c.GetCreatePrivate()) + fmt.Println("config: CreateCmd: ", c.GetCreateCmd()) + + fmt.Println("Environment Variables Configuration:") + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + fmt.Println("config: EnvCmd: ", c.GetEnvCmd()) + fmt.Println("config: EnvVariablesFlag: ", c.GetEnvVariblesFlag()) + fmt.Println("config: EnvListFlag: ", c.GetEnvListFlag()) + fmt.Println("config: EnvFilterFlag: ", c.GetEnvFilterFlag()) + fmt.Println("config: EnvVariablesFilter: ", c.GetEnvFilter()) + fmt.Println("config: EnvVariablesYmlFlag: ", c.GetEnvYmlFileFlag()) + fmt.Println("config: EnvVariablesCategoryFlag: ", c.GetEnvCategoryFlag()) + fmt.Println("config: EnvVariablesCategory: ", c.GetEnvCategoryInfo()) + fmt.Println("config: EnvVariablesSetFlag: ", c.GetEnvSetFlag()) + fmt.Println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") + +} diff --git a/configFile/config-actionyml.go b/configFile/config-actionyml.go index 9e9b4b3..7fa7265 100644 --- a/configFile/config-actionyml.go +++ b/configFile/config-actionyml.go @@ -7,22 +7,21 @@ import ( "os" ) -func loadConfigFile() *Config { +func LoadConfigFile(c *config.Config) *ConfigYml { - filename := config.GetConfigFileName() - - cfg, err := LoadConfig(filename) + filename := c.GetConfigFileYmlName() + cfgfile, err := LoadConfig(filename) if err != nil { log.Fatalf("error loading config file: %v", err) os.Exit(1) } - return cfg + return cfgfile } -func Listcategory() { +func Listcategory(c *config.Config) { - cfg := loadConfigFile() + cfg := LoadConfigFile(c) // list all categories ListCategories, err := cfg.GetListCategory() diff --git a/configFile/config-fileyml.go b/configFile/config-fileyml.go index c1d8765..b1d64ad 100644 --- a/configFile/config-fileyml.go +++ b/configFile/config-fileyml.go @@ -7,11 +7,7 @@ import ( "gopkg.in/yaml.v2" ) -// The above code defines a configuration struct for software projects with sections for software, -// environment variables, directories, and pipeline configurations. -// @property Sections - A map of SectionConfig objects, where each key is a string representing the -// name of the section. -type Config struct { +type ConfigYml struct { Sections map[string]SectionConfig `yaml:"category"` } @@ -46,14 +42,27 @@ type PipelineConfig struct { Build string `yaml:"build"` Test string `yaml:"test"` Lint string `yaml:"lint"` - // Compile string `yaml:"compile"` - // Package string `yaml:"package"` +} + +// function GetPathsFromCategory +func (c *ConfigYml) GetPathsFromCategory(sectionName string) ([]string, error) { + section, ok := c.Sections[sectionName] + if !ok { + return nil, fmt.Errorf("section '%s' not found", sectionName) + } + + var paths []string + for _, EnvVar := range section.EnvironmentsVariables { + paths = append(paths, EnvVar) + } + + return paths, nil } // The function loads a configuration file in YAML format and returns a pointer to a Config struct or // an error. -func LoadConfig(filename string) (*Config, error) { - var config Config +func LoadConfig(filename string) (*ConfigYml, error) { + var config ConfigYml source, err := ioutil.ReadFile(filename) if err != nil { @@ -72,7 +81,7 @@ func LoadConfig(filename string) (*Config, error) { } // function GetListCategory return list category from config file -func (c *Config) GetListCategory() ([]string, error) { +func (c *ConfigYml) GetListCategory() ([]string, error) { var categories []string for categoryName := range c.Sections { categories = append(categories, categoryName) @@ -84,7 +93,7 @@ func (c *Config) GetListCategory() ([]string, error) { // This is a method defined on the `Config` struct that returns a list of software names for a given // section. It takes in a `sectionName` string as a parameter and returns a slice of strings and an // error. -func (c *Config) GetListSoftware(sectionName string) ([]string, error) { +func (c *ConfigYml) GetListSoftware(sectionName string) ([]string, error) { section, ok := c.Sections[sectionName] if !ok { return nil, fmt.Errorf("section '%s' not found", sectionName) @@ -100,7 +109,7 @@ func (c *Config) GetListSoftware(sectionName string) ([]string, error) { // This is a method defined on the `Config` struct that takes in two string parameters `sectionName` // and `SoftwareName`. It returns a pointer to a `SoftwareConfig` struct and an error. -func (c *Config) GetSoftware(sectionName, SoftwareName string) (*SoftwareConfig, error) { +func (c *ConfigYml) GetSoftware(sectionName, SoftwareName string) (*SoftwareConfig, error) { section, ok := c.Sections[sectionName] if !ok { return nil, fmt.Errorf("section '%s' not found", sectionName) @@ -115,7 +124,7 @@ func (c *Config) GetSoftware(sectionName, SoftwareName string) (*SoftwareConfig, } // get list environment variables -func (c *Config) GetListEnvironmentVariables(sectionName string) ([]string, error) { +func (c *ConfigYml) GetListEnvironmentVariables(sectionName string) ([]string, error) { section, ok := c.Sections[sectionName] if !ok { return nil, fmt.Errorf("section '%s' not found", sectionName) @@ -134,7 +143,7 @@ func (c *Config) GetListEnvironmentVariables(sectionName string) ([]string, erro // section in the configuration and then looks for the specified environment variable within that // section. If the section or variable is not found, an error is returned. If the variable is found, // its value is returned. -func (c *Config) GetEnvironmentVariables(sectionName, variableName string) (string, error) { +func (c *ConfigYml) GetEnvironmentVariables(sectionName, variableName string) (string, error) { section, ok := c.Sections[sectionName] if !ok { return "", fmt.Errorf("section '%s' not found", sectionName) @@ -148,12 +157,22 @@ func (c *Config) GetEnvironmentVariables(sectionName, variableName string) (stri return variable, nil } +// get all environment variables names and values +func (c *ConfigYml) GetAllEnvironmentVariables(sectionName string) (map[string]string, error) { + section, ok := c.Sections[sectionName] + if !ok { + return nil, fmt.Errorf("section '%s' not found", sectionName) + } + + return section.EnvironmentsVariables, nil +} + // This is a method defined on the `Config` struct that takes in two string parameters `sectionName` // and `directoryName`. It returns a pointer to a `DirectoryConfig` struct and an error. The method // looks for the specified section in the configuration and then looks for the specified directory // within that section. If the section or directory is not found, an error is returned. If the // directory is found, its configuration is returned. -func (c *Config) GetDirectory(sectionName, directoryName string) (*DirectoryConfig, error) { +func (c *ConfigYml) GetDirectory(sectionName, directoryName string) (*DirectoryConfig, error) { section, ok := c.Sections[sectionName] if !ok { return nil, fmt.Errorf("section '%s' not found", sectionName) @@ -173,7 +192,7 @@ func (c *Config) GetDirectory(sectionName, directoryName string) (*DirectoryConf // for the specified section in the configuration and then looks for the specified pipeline within that // section. If the section or pipeline is not found, an error is returned. If the pipeline is found, // its configuration is returned. -func (c *Config) GetPipeline(sectionName, pipelineName string) (*PipelineConfig, error) { +func (c *ConfigYml) GetPipeline(sectionName, pipelineName string) (*PipelineConfig, error) { section, ok := c.Sections[sectionName] if !ok { return nil, fmt.Errorf("section '%s' not found", sectionName) diff --git a/go.mod b/go.mod index c643ed0..6f8a6cb 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,19 @@ require ( ) require ( + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/go-querystring v1.1.0 // indirect + golang.org/x/net v0.11.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.0 // indirect +) + +require ( + github.com/google/go-github v17.0.0+incompatible github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect - golang.org/x/sys v0.6.0 // indirect + golang.org/x/oauth2 v0.9.0 + golang.org/x/sys v0.9.0 // indirect gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 44a8b54..b537d37 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,15 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/gookit/color v1.5.3 h1:twfIhZs4QLCtimkP7MOxlF3A0U/5cDPseRT9M/+2SCE= github.com/gookit/color v1.5.3/go.mod h1:NUzwzeehUfl7GIb36pqId+UGmRfQcU/WiiyTTeNjHtE= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -15,8 +25,26 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= +golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/kode-starter.go b/kode-starter.go index c7b8cfa..7346da6 100644 --- a/kode-starter.go +++ b/kode-starter.go @@ -11,50 +11,54 @@ import ( "github.com/spf13/cobra" ) +// initailize global config +var CfgGlobal = &config.Config{} + +// rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Use: "kode-creator.exe", Short: "Simple cli app create startup project", Long: `A simple CLI app to work with Github, Gitea`, Run: func(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) mainProgram(cmd, args) }, } -var token, org, name, private, description, envGroup, envCategory string -var verbose, createFlag, versionFlag bool -var listEnvFlag, listEnvCfgFlag, setEnvFlag, envVariablesFlag, envGroupFlag bool - +// init function that will be executed before the main function func init() { - // var config = &config.Config{} + CfgGlobal.Init() // root menu section - rootCmd.Flags().BoolP("help", "h", false, "Show help for create command") - rootCmd.Flags().BoolVarP(&versionFlag, "version", "V", false, "Show version") + rootCmd.Flags().BoolP("help", "h", false, "Show help for "+CfgGlobal.GetApplicationName()) + rootCmd.Flags().BoolVarP(&CfgGlobal.VersionFlag, "version", "V", false, "Show VERSION of "+CfgGlobal.GetApplicationName()) rootCmd.CompletionOptions.DisableDefaultCmd = true - rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "mode verbose") - rootCmd.PersistentFlags().BoolVarP(&createFlag, "json", "j", false, "Print output as json format") + rootCmd.PersistentFlags().BoolVarP(&CfgGlobal.VerboseFlag, "verbose", "v", false, "VERBOSE mode output") + rootCmd.PersistentFlags().BoolVarP(&CfgGlobal.JsonFlag, "json", "j", false, "JSON output format") // List menu section - cmdLists.ListCmd.Flags().StringVarP(&token, "token", "t", "", "Github token") - cmdLists.ListCmd.Flags().StringVarP(&org, "org", "o", "", "Github organization") + cmdLists.ListCmd.Flags().StringVarP(&CfgGlobal.TokenEnv, "token", "t", "", "TOKEN for Gitea or Github") + cmdLists.ListCmd.Flags().BoolVarP(&CfgGlobal.ListCmd.GitFlag, "git", "g", false, "List all repositories from GITHUB") + cmdLists.ListCmd.Flags().BoolVarP(&CfgGlobal.ListCmd.TeaFlag, "tea", "a", false, "List all repositories from GITEA") + cmdLists.ListCmd.Flags().StringVarP(&CfgGlobal.ListCmd.User, "user", "u", "", "user for request on GITHUB or GITEA") + cmdLists.ListCmd.Flags().StringVarP(&CfgGlobal.ListCmd.Organization, "org", "o", "", "List projects from an ORGANIZATION") // Create menu section - cmdCreate.CreateCmd.Flags().StringVarP(&token, "token", "t", "", "Github token") - cmdCreate.CreateCmd.Flags().StringVarP(&org, "org", "o", "", "Github organization") - cmdCreate.CreateCmd.Flags().StringVarP(&name, "name", "n", "", "Project name") - cmdCreate.CreateCmd.Flags().StringVarP(&description, "desc", "d", "", "Description") - cmdCreate.CreateCmd.Flags().StringVarP(&private, "private", "p", "", "true/false") + cmdCreate.CreateCmd.Flags().StringVarP(&CfgGlobal.TokenEnv, "token", "t", "", "TOKEN for Gitea or Github") + cmdCreate.CreateCmd.Flags().StringVarP(&CfgGlobal.CreateCmd.Organisation, "org", "o", "", "ORGANIZATION for this project") + cmdCreate.CreateCmd.Flags().StringVarP(&CfgGlobal.CreateCmd.Name, "name", "n", "", "NAME of the Project") + cmdCreate.CreateCmd.Flags().StringVarP(&CfgGlobal.CreateCmd.Description, "desc", "d", "", "DESCRIPTION of the project") + cmdCreate.CreateCmd.Flags().BoolVarP(&CfgGlobal.CreateCmd.Private, "private", "p", false, "PRIVATE with this switch") // Env menu section - cmdEnv.EnvCmd.Flags().BoolVarP(&envVariablesFlag, "env", "e", false, "environnement variables management") - cmdEnv.EnvCmd.Flags().BoolVarP(&listEnvFlag, "list", "l", false, "List environnement variables") - cmdEnv.EnvCmd.Flags().StringVarP(&envGroup, "filter", "f", "", "Highlight a specific word in environnement variables") - cmdEnv.EnvCmd.Flags().BoolVarP(&listEnvCfgFlag, "yml", "y", false, "List environnement variables from config.yml") - cmdEnv.EnvCmd.Flags().StringVarP(&envCategory, "cat", "c", "", "filter for a specific category") - cmdEnv.EnvCmd.Flags().BoolVarP(&setEnvFlag, "set", "s", false, "set environnement variable available from config.yml") + cmdEnv.EnvCmd.Flags().BoolVarP(&CfgGlobal.EnvCmd.EnvVariablesFlag, "group", "g", false, "GROUP environnement variables by categories") + cmdEnv.EnvCmd.Flags().BoolVarP(&CfgGlobal.EnvCmd.EnvVariablesListFlag, "list", "l", false, "LIST environnement variables") + cmdEnv.EnvCmd.Flags().StringVarP(&CfgGlobal.EnvCmd.EnvVariablesFilter, "filter", "f", "", "HIGHLIGHT a specific word in environnement variables") + cmdEnv.EnvCmd.Flags().BoolVarP(&CfgGlobal.EnvCmd.EnvVariablesYmlFlag, "yml", "y", false, "YAML List environnement variables from config.yml") + cmdEnv.EnvCmd.Flags().StringVarP(&CfgGlobal.EnvCmd.EnvVariablesCategory, "cat", "c", "", "FILTER for a specific category") + cmdEnv.EnvCmd.Flags().BoolVarP(&CfgGlobal.EnvCmd.EnvVariablesSetFlag, "set", "s", false, "Set environnement variable available from config.yml") + cmdEnv.EnvCmd.Flags().BoolVarP(&CfgGlobal.EnvCmd.EnvVariablesShowAllFlag, "all", "a", false, "Show all environnement variables") // Add subcommands rootCmd.AddCommand(cmdLists.ListCmd) @@ -63,31 +67,35 @@ func init() { } +// function to print help or version func mainProgram(cmd *cobra.Command, args []string) { - config.SetInformations(cmd, args) - // if version flag is set, print version and exit - if config.GetVersionFlag() { - utils.PrintVersion(version.GetFullVersion(), config.GetAuthor(), config.GetBuildDate()) + if CfgGlobal.GetVersionFlag() { + utils.PrintVersion(version.GetFullVersion(), CfgGlobal.GetAuthor(), CfgGlobal.GetModifDate()) return // if no flag is set, print help and exit } else { - //configFile.Listcategory() - utils.PrintHelpFormated(version.GetFullVersion(), config.GetAuthor(), config.GetBuildDate(), cmd) + utils.PrintHelpFormated(version.GetFullVersion(), CfgGlobal.GetAuthor(), CfgGlobal.GetModifDate(), cmd) return } } +// main function func main() { - // var config = &config.Config{} + //initialize config + CfgGlobal.Init() + cmdLists.InitConfig(CfgGlobal) + cmdCreate.InitConfig(CfgGlobal) + cmdEnv.InitConfig(CfgGlobal) - // print header - utils.PrintHeader() + // set debug mode + CfgGlobal.SetDebugMode(false) + CfgGlobal.DebugPrintConfig("Function main") // execute root command rootCmd.Execute() diff --git a/readme.md b/readme.md index bab31cf..22656c3 100644 --- a/readme.md +++ b/readme.md @@ -68,7 +68,8 @@ You can set the following environment variables: - `GIT_TOKEN` - Your Github personal access token. This will be used instead of passing the `-t` flag. *Temporaire* -(Git Token for linux)[ af65e1b846d721e3465422c04997d69b0cfe7f18 ] +(Gitea Token for linux)[ af65e1b846d721e3465422c04997d69b0cfe7f18 ] +(Github Token from Github)[ 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 ] ##License diff --git a/release/linux/0.0.0.25/kode-starter b/release/linux/0.0.0.25/kode-starter new file mode 100755 index 0000000000000000000000000000000000000000..36577dbf105acbc916ee63e8222ab5390d3a7fb4 GIT binary patch literal 10530273 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