diff --git a/hello b/hello index 0606034..8f6c33d 100755 Binary files a/hello and b/hello differ diff --git a/main.go b/main.go index 9ca3098..214b0f7 100644 --- a/main.go +++ b/main.go @@ -70,10 +70,12 @@ type MenuItem struct { Catch []string `yaml:"catch,omitempty"` Vars []string `yaml:"vars,omitempty"` Env string `yaml:"env,omitempty"` + Hint string `yaml:"hint,omitempty"` // Добавляем hint в MenuItem } // Menu управляет отображением меню type Menu struct { + hint string items map[int]MenuItem variables *Variables baseDir string @@ -82,7 +84,6 @@ type Menu struct { // NewMenu инициализирует меню из YAML func NewMenu(yamlFile string) *Menu { currDir, _ := os.Getwd() - // baseDir := filepath.Join(currDir, "menu") // Базовая директория меню baseDir := currDir yamlPath := resolvePath(baseDir, yamlFile) @@ -94,16 +95,18 @@ func NewMenu(yamlFile string) *Menu { defer file.Close() decoder := yaml.NewDecoder(file) - var menu struct { + var menuData struct { + Hint string `yaml:"hint,omitempty"` // Добавляем поле hint Items map[int]MenuItem `yaml:"items"` } - if err := decoder.Decode(&menu); err != nil { + if err := decoder.Decode(&menuData); err != nil { log.Fatalf("Ошибка парсинга YAML: %v", err) } return &Menu{ - items: menu.Items, + hint: menuData.Hint, + items: menuData.Items, variables: NewVariables("env.ini"), baseDir: baseDir, } @@ -127,15 +130,23 @@ func resolvePath(baseDir, yamlFile string) string { // ShowItems отображает главное меню func (m *Menu) ShowItems() { + // Выводим подсказку, если она есть + if m.hint != "" { + fmt.Println(m.hint) + // fmt.Println() // Пустая строка после подсказки + } else { + fmt.Println() + } + fmt.Println("0. Выход") - //Извлекаем ключи из мапы + // Извлекаем ключи из мапы keys := make([]int, 0, len(m.items)) for key := range m.items { keys = append(keys, key) } - //Сортируем ключи + // Сортируем ключи sort.Ints(keys) for _, key := range keys { @@ -149,6 +160,7 @@ func (m *Menu) Loop() { for { m.ShowItems() + fmt.Print("\n") fmt.Print("Выберите действие: ") input, _ := reader.ReadString('\n') input = strings.TrimSpace(input) @@ -180,7 +192,13 @@ func (m *Menu) ChooseItem(itemNum int) { subMenu := NewMenu(filePath) subMenu.Loop() } else if len(item.Items) > 0 { - subMenu := &Menu{items: item.Items, variables: m.variables, baseDir: m.baseDir} + // Создаем подменю из вложенных items + subMenu := &Menu{ + hint: item.Hint, // Используем hint из MenuItem + items: item.Items, + variables: m.variables, + baseDir: m.baseDir, + } subMenu.Loop() } else if len(item.Commands) > 0 { vars := m.getVars(item, true) diff --git a/menu/develop/menu.yml b/menu/develop/menu.yml index 620754a..65803d1 100755 --- a/menu/develop/menu.yml +++ b/menu/develop/menu.yml @@ -1,3 +1,12 @@ +hint: | + + /======================================\ + | ************************************ | + | * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * | + | * ver. 1.0.0 (2024) * | + | ************************************ | + \======================================/ + items: 1: title: '1. Build' @@ -38,9 +47,10 @@ items: title: '5. Stop' env: 'dev' commands: - - 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop' - - 'sleep 3' - - 'docker network rm dockernet' + - 'docker stop $(docker ps -q)' + # - 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop' + # - 'sleep 3' + # - 'docker network rm dockernet' vars: - appName 6: diff --git a/menu/menu.yml b/menu/menu.yml index a457718..852a778 100755 --- a/menu/menu.yml +++ b/menu/menu.yml @@ -1,3 +1,12 @@ +hint: | + + /======================================\ + | ************************************ | + | * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * | + | * ver. 1.0.0 (2024) * | + | ************************************ | + \======================================/ + items: 1: title: '1. Develop'