diff --git a/cmdEnv/envVars.go b/cmdEnv/envVars.go index e1f583d..e1f11c4 100644 --- a/cmdEnv/envVars.go +++ b/cmdEnv/envVars.go @@ -3,9 +3,12 @@ package cmdEnv import ( "fmt" "kode-starter/config" + "kode-starter/utils" "os" + "strconv" "strings" + "github.com/gookit/color" "github.com/spf13/cobra" ) @@ -16,15 +19,56 @@ var EnvCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { config.SetInformations(cmd, args) + startEnvVar(cmd, args) - // if option --env or -e is set then print environment variables - // if envVariablesFlag { + // 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 + + // if list flag is set to true list all environment variables + fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(config.GetEnvVariablesListFlag())) + if flag { + printEnvVariables() + } + +} + +func listEnvVariables() error { + + if config.GetEnvVariablesListFlag() { + fmt.Println("GetEnvVariablesListFlag: " + strconv.FormatBool(config.GetEnvVariablesListFlag())) + printEnvVariables() + } + + return nil + +} + func printEnvVariables() { fmt.Println("Environment variables") fmt.Println("---------------------") @@ -33,6 +77,26 @@ func printEnvVariables() { for _, e := range os.Environ() { // split key and value pair := strings.Split(e, "=") - fmt.Println(pair[0]) + fmt.Printf("%s=%s\n", pair[0], pair[1]) + } +} + +func printEnvVariablesFilter(filter string) { + fmt.Println("Environment variables") + // fmt.Println("---------------------") + utils.CreateLine(5) + + // 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])) + } else if strings.Contains(pair[1], filter) { + fmt.Printf("%s=%s\n", color.Green.Sprint(pair[0]), utils.ColorizeSubStrRed(pair[1], filter)) + } else { + fmt.Printf("%s=%s\n", pair[0], pair[1]) + } + } } diff --git a/cmdLists/lists.go b/cmdLists/lists.go index fc4345d..abfb860 100644 --- a/cmdLists/lists.go +++ b/cmdLists/lists.go @@ -30,7 +30,7 @@ var ListCmd = &cobra.Command{ // if -o flag is set, list projects for that org if config.GetListOrganisationFlag() { if !config.GetJsonFlag() { - utils.PrintHeader() + // utils.PrintHeader() fmt.Println("\nList projects for org: " + config.GetListOrganisation() + "\n") fmt.Println(utils.CreateLine(6)) } diff --git a/configFile/config-actionyml.go b/configFile/config-actionyml.go new file mode 100644 index 0000000..9e9b4b3 --- /dev/null +++ b/configFile/config-actionyml.go @@ -0,0 +1,84 @@ +package configFile + +import ( + "fmt" + "kode-starter/config" + "log" + "os" +) + +func loadConfigFile() *Config { + + filename := config.GetConfigFileName() + + cfg, err := LoadConfig(filename) + if err != nil { + log.Fatalf("error loading config file: %v", err) + os.Exit(1) + } + return cfg + +} + +func Listcategory() { + + cfg := loadConfigFile() + + // list all categories + ListCategories, err := cfg.GetListCategory() + if err != nil { + log.Fatalf("error getting categories: %v", err) + } + + for _, c := range ListCategories { + fmt.Printf("Category: %s\n", c) + } + +} + +// // list all elements from category "Category-Go" +// ListSoftwares, err := cfg.GetListSoftware("Go") +// if err != nil { +// log.Fatalf("error getting logiciels: %v", err) +// } + +// for _, s := range ListSoftwares { +// fmt.Printf("Software: %s\n", s) + +// Software, err := cfg.GetSoftware("Go", s) +// if err != nil { +// log.Fatalf("error getting logiciel: %v", err) +// } + +// fmt.Printf("Nom: %s\n", Software.Name) +// fmt.Printf("Version: %s\n", Software.Version) +// fmt.Printf("Auteur: %s\n", Software.Author) +// fmt.Printf("Location: %s\n", Software.Location) +// fmt.Printf("Description: %s\n", Software.Description) + +// } + +// EnvironmentVariables, err := cfg.GetListEnvironmentVariables("Go") +// if err != nil { +// log.Fatalf("error getting environment variables: %v", err) +// } + +// for _, e := range EnvironmentVariables { +// fmt.Printf("Environment variable: %s\n", e) +// EnvVar, err := cfg.GetEnvironmentVariables("Go", e) +// if err != nil { +// log.Fatalf("error getting environment variable: %v", err) +// } +// fmt.Printf("%s = %s\n", e, EnvVar) +// } + +// liste configuration elements for "directory" +// Dir, err := cfg.GetDirectory("Category-Go", "source") +// if err != nil { +// log.Fatalf("error getting directory: %v", err) +// } +// for _, d := range Dir.Path { +// fmt.Printf("Directory: %s\n", d) +// } + +// os.Exit(0) diff --git a/config/config-fileyml.go b/configFile/config-fileyml.go similarity index 94% rename from config/config-fileyml.go rename to configFile/config-fileyml.go index 239de8b..c1d8765 100644 --- a/config/config-fileyml.go +++ b/configFile/config-fileyml.go @@ -1,4 +1,4 @@ -package config +package configFile import ( "fmt" @@ -61,7 +61,7 @@ func LoadConfig(filename string) (*Config, error) { } // print source - fmt.Println(string(source)) + // fmt.Println(string(source)) err = yaml.Unmarshal(source, &config) if err != nil { @@ -71,6 +71,16 @@ func LoadConfig(filename string) (*Config, error) { return &config, nil } +// function GetListCategory return list category from config file +func (c *Config) GetListCategory() ([]string, error) { + var categories []string + for categoryName := range c.Sections { + categories = append(categories, categoryName) + } + + return categories, nil +} + // 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. diff --git a/go.sum b/go.sum index 642d969..44a8b54 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,7 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHg github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/kode-starter.go b/kode-starter.go index 353fb0c..c7b8cfa 100644 --- a/kode-starter.go +++ b/kode-starter.go @@ -1,15 +1,12 @@ package main import ( - "fmt" "kode-starter/cmdCreate" "kode-starter/cmdEnv" "kode-starter/cmdLists" "kode-starter/config" "kode-starter/utils" "kode-starter/version" - "log" - "os" "github.com/spf13/cobra" ) @@ -25,32 +22,41 @@ var rootCmd = &cobra.Command{ }, } -var token, org, name, private, description, group string -var verbose, createFlag bool -var listFlag, envVariablesFlag, groupFlag bool +var token, org, name, private, description, envGroup, envCategory string +var verbose, createFlag, versionFlag bool +var listEnvFlag, listEnvCfgFlag, setEnvFlag, envVariablesFlag, envGroupFlag bool func init() { - rootCmd.Flags().BoolP("help", "h", false, "Show help for create command") + // var config = &config.Config{} + // root menu section + rootCmd.Flags().BoolP("help", "h", false, "Show help for create command") + rootCmd.Flags().BoolVarP(&versionFlag, "version", "V", false, "Show version") + 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(&envVariablesFlag, "env", "e", false, "environment variables ") + // List menu section cmdLists.ListCmd.Flags().StringVarP(&token, "token", "t", "", "Github token") cmdLists.ListCmd.Flags().StringVarP(&org, "org", "o", "", "Github 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") - cmdEnv.EnvCmd.Flags().BoolVarP(&listFlag, "list", "l", false, "List options") - cmdEnv.EnvCmd.Flags().BoolVarP(&envVariablesFlag, "env", "e", false, "environnement variables") - cmdEnv.EnvCmd.Flags().BoolVarP(&groupFlag, "group", "g", false, "categories of informations") - cmdEnv.EnvCmd.Flags().StringVarP(&group, "filter", "f", "", "filter for a specific category") + // 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") + // Add subcommands rootCmd.AddCommand(cmdLists.ListCmd) rootCmd.AddCommand(cmdCreate.CreateCmd) rootCmd.AddCommand(cmdEnv.EnvCmd) @@ -61,79 +67,29 @@ func mainProgram(cmd *cobra.Command, args []string) { config.SetInformations(cmd, args) - fmt.Println("Header") - utils.PrintHeader() - - // Check if the help flag is set - if cmd.Flags().Changed("help") || cmd.Flags().Changed("h") { - utils.PrintHelpFormated(version.GetFullVersion(), config.GetAuthor(), config.GetBuildDate(), cmd) + // if version flag is set, print version and exit + if config.GetVersionFlag() { + utils.PrintVersion(version.GetFullVersion(), config.GetAuthor(), config.GetBuildDate()) return + + // if no flag is set, print help and exit } else { - // If no flag is set, show help + //configFile.Listcategory() utils.PrintHelpFormated(version.GetFullVersion(), config.GetAuthor(), config.GetBuildDate(), cmd) return - } } func main() { - filename := "config.yml" + // var config = &config.Config{} - cfg, err := config.LoadConfig(filename) - if err != nil { - log.Fatalf("error loading config file: %v", err) - } - - // list all elements from category "Category-Go" - ListSoftwares, err := cfg.GetListSoftware("Go") - if err != nil { - log.Fatalf("error getting logiciels: %v", err) - } - - for _, s := range ListSoftwares { - fmt.Printf("Software: %s\n", s) - - Software, err := cfg.GetSoftware("Go", s) - if err != nil { - log.Fatalf("error getting logiciel: %v", err) - } - - fmt.Printf("Nom: %s\n", Software.Name) - fmt.Printf("Version: %s\n", Software.Version) - fmt.Printf("Auteur: %s\n", Software.Author) - fmt.Printf("Location: %s\n", Software.Location) - fmt.Printf("Description: %s\n", Software.Description) - - } - - EnvironmentVariables, err := cfg.GetListEnvironmentVariables("Go") - if err != nil { - log.Fatalf("error getting environment variables: %v", err) - } - - for _, e := range EnvironmentVariables { - fmt.Printf("Environment variable: %s\n", e) - EnvVar, err := cfg.GetEnvironmentVariables("Go", e) - if err != nil { - log.Fatalf("error getting environment variable: %v", err) - } - fmt.Printf("%s = %s\n", e, EnvVar) - } - - // liste configuration elements for "directory" - // Dir, err := cfg.GetDirectory("Category-Go", "source") - // if err != nil { - // log.Fatalf("error getting directory: %v", err) - // } - // for _, d := range Dir.Path { - // fmt.Printf("Directory: %s\n", d) - // } - - os.Exit(0) + // print header + utils.PrintHeader() + // execute root command rootCmd.Execute() } diff --git a/readme.md b/readme.md index ea901ae..bab31cf 100644 --- a/readme.md +++ b/readme.md @@ -67,6 +67,9 @@ 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 ] + ##License MIT License. \ No newline at end of file diff --git a/utils/utils.go b/utils/utils.go index b2a8554..d6c84c0 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -35,6 +35,15 @@ func PrintHelpFormated(version string, author string, buildDate string, cmd *cob fmt.Println("") cmd.Help() fmt.Println("") + PrintVersion(version, author, buildDate) + + // color.Yellow.Println(CreateLine(15)) + // color.Green.Println("| Version: " + version + " || Author: " + author + " || Build date: " + buildDate + " |") + // color.Yellow.Println(CreateLine(15)) + // fmt.Println("") +} + +func PrintVersion(version string, author string, buildDate string) { color.Yellow.Println(CreateLine(15)) color.Green.Println("| Version: " + version + " || Author: " + author + " || Build date: " + buildDate + " |") color.Yellow.Println(CreateLine(15)) @@ -113,3 +122,8 @@ func PadString(s string, n int) string { } return s + strings.Repeat(" ", n-len(s)) } + +// function that color in red sub-trings in a string +func ColorizeSubStrRed(s string, sub string) string { + return strings.Replace(s, sub, color.Red.Sprint(sub), -1) +}