From f4f3164978d2c72885291d3e063966cb251603d4 Mon Sep 17 00:00:00 2001 From: oscarzhou Date: Wed, 28 Dec 2022 14:39:18 +1300 Subject: [PATCH] config: refactor data initialization process --- go/configs/config.go | 39 ++++++----------------------- go/configs/credential.go | 32 ++++++++++++++++++++++++ go/configs/repository.go | 54 ++++++++++++++++++++++++++++++++++++++++ go/utils/print.go | 5 ++++ go/utils/prompt.go | 6 ++--- 5 files changed, 102 insertions(+), 34 deletions(-) create mode 100644 go/configs/credential.go create mode 100644 go/configs/repository.go diff --git a/go/configs/config.go b/go/configs/config.go index 2a66fb7..a1d6c84 100644 --- a/go/configs/config.go +++ b/go/configs/config.go @@ -5,8 +5,8 @@ import ( "errors" "fmt" "io" + "ocl/portainer-devtool/utils" "os" - "path" ) const ( @@ -78,39 +78,16 @@ func (config *Config) Summarize() { // The configuration also can be updated later func initializeConfig(w io.WriteCloser) (*Config, error) { config := &Config{} - fmt.Printf("Initialize devtool path:\n (Project path will store volumes and repositories)") - fmt.Scanf("%s", &(config.ProjectPath)) + config.ProjectPath = utils.Prompt("Specify Git Project Root Path") + + // analyze all the repositories in the project root path + // add the parsed information to RepositoryConfig + config.configureRepositories() // generate volume path automatically - config.VolumePath = path.Join(config.ProjectPath, "volumes") - - var loginCredential LoginCredential - fmt.Printf("Set login credential username(admin): ") - fmt.Scanf("%s", &(loginCredential.Username)) - if loginCredential.Username == "" { - loginCredential.Username = "admin" - } - - for { - fmt.Printf("Set login credential password(******): ") - fmt.Scanf("%s", &(loginCredential.Password)) - if loginCredential.Password != "" { - break - } - - fmt.Println("Login credential password must be provided") - } - - fmt.Printf("Set login address(127.0.0.1): ") - fmt.Scanf("%s", &(loginCredential.Address)) - if loginCredential.Address == "" { - loginCredential.Address = "http://127.0.0.1:9000/api/auth" - } else { - loginCredential.Address = fmt.Sprintf("http://%s:9000/api/auth", loginCredential.Address) - } - - config.LoginCredential = loginCredential + config.VolumePath = utils.Prompt("Specify Volume Path") + config.configureLoginCredential() // able to configure multiple project // if utils.PromptConfirm("Do you want to configure the repository now?") { // // configure repository diff --git a/go/configs/credential.go b/go/configs/credential.go new file mode 100644 index 0000000..e0d1219 --- /dev/null +++ b/go/configs/credential.go @@ -0,0 +1,32 @@ +package configs + +import ( + "fmt" + "ocl/portainer-devtool/utils" +) + +func (config *Config) configureLoginCredential() { + var loginCredential LoginCredential + loginCredential.Username = utils.Prompt("Set Login Credential Username(admin)") + if loginCredential.Username == "" { + loginCredential.Username = "admin" + } + + for { + loginCredential.Password = utils.Prompt("Set Login Credential Password(*****)") + if loginCredential.Password != "" { + break + } + + utils.WarnPrint("Login Credential Password must be provided") + } + + loginCredential.Address = utils.Prompt("Set Login Address(127.0.0.1)") + if loginCredential.Address == "" { + loginCredential.Address = "http://127.0.0.1:9000/api/auth" + } else { + loginCredential.Address = fmt.Sprintf("http://%s:9000/api/auth", loginCredential.Address) + } + + config.LoginCredential = loginCredential +} diff --git a/go/configs/repository.go b/go/configs/repository.go new file mode 100644 index 0000000..a9ec14a --- /dev/null +++ b/go/configs/repository.go @@ -0,0 +1,54 @@ +package configs + +import ( + "fmt" + "io/fs" + "log" + "ocl/portainer-devtool/utils" + "path/filepath" +) + +func (config *Config) configureRepositories() { + if config.RepositoryConfig == nil { + config.RepositoryConfig = make(map[string]RepositoryConfig) + } + for { + if !utils.PromptConfirm("Set up new repository") { + break + } + + repoConfig := RepositoryConfig{} + repoConfig.Name = utils.Prompt("Name") + repoConfig.URL = utils.Prompt("URL") + repoConfig.Directory = utils.Prompt("Directory") + config.RepositoryConfig[repoConfig.Name] = repoConfig + } + + utils.HighlightPrint("Configure repositories completed") +} + +func (config *Config) generateRepositoriesBasedOnProjectPath(projectPath string) error { + + filepath.WalkDir(projectPath, func(path string, d fs.DirEntry, err error) error { + if err != nil { + log.Printf("fail to walk in the project path %s, error: %v\n", projectPath, err) + return err + } + + if utils.MatchPathLength(projectPath, path, 1) { + fmt.Println(path) + + // posLastSeparator := strings.LastIndex(path, string(filepath.Separator)) + // repoName := path[posLastSeparator+1:] + + // repoConfig := RepositoryConfig{ + // Name: repoName, + // // URL: + // } + // config.RepositoryConfig[repoName] = + } + + return nil + }) + return nil +} diff --git a/go/utils/print.go b/go/utils/print.go index 0144aee..ef65601 100644 --- a/go/utils/print.go +++ b/go/utils/print.go @@ -38,6 +38,11 @@ func ErrorPrint(message string) { fmt.Println(colorRed, message, colorReset) } +func WarnPrint(message string) { + fmt.Println() + fmt.Println(colorPurple, message, colorReset) +} + func InputPrint(message string) { // adding \n before setting colorful output can // remove the first space in the colorful output diff --git a/go/utils/prompt.go b/go/utils/prompt.go index 9c7fabb..111e505 100644 --- a/go/utils/prompt.go +++ b/go/utils/prompt.go @@ -6,7 +6,7 @@ import ( ) func PromptContinue() bool { - ret := strings.ToLower(prompt("Continue (y/n)")) + ret := strings.ToLower(Prompt("Continue (y/n)")) if ret == "y" || ret == "yes" { return true } @@ -15,7 +15,7 @@ func PromptContinue() bool { } func PromptConfirm(question string) bool { - ret := fmt.Sprintf("%s (y/n)?", question) + ret := Prompt(fmt.Sprintf("%s (y/n)?", question)) if ret == "y" || ret == "yes" { return true } @@ -31,7 +31,7 @@ func SelectMenuItem(listMenu func()) string { return option } -func prompt(question string) string { +func Prompt(question string) string { fmt.Printf("%s %s :%s", colorYellow, question, colorReset) var ret string fmt.Scanf("%s", &ret)