Работа над конфигом repko, работа над интеграцией в deb пакет repko

This commit is contained in:
XeRo 2026-01-30 17:40:25 +05:00
parent 58b258be29
commit d3fd4f5858
7 changed files with 101 additions and 11 deletions

View file

@ -12,6 +12,7 @@ import (
func Start() {
//Создаем новый объект Main для настройки.
//todo работа внутри apt, вывод интерфейса во время выполнения apt
m := NewMain()
p := tea.NewProgram(m, tea.WithAltScreen()) //Запускаем через bubble tea программу
m.Program = p //Указываем объекту настроек, программу в которой запущен, чтобы передавать туда сигналы

View file

@ -57,7 +57,26 @@ func ExecuteAction(action *types.SectionAction, application *types.PackageApplic
if cmdErr != nil {
return fmt.Errorf("не удалось создать шаблон команды: %v", cmdErr)
}
return RunCommand(cmdStr, action.RunAs)
output, err := RunCommand(cmdStr, action.RunAs)
if err != nil {
return err
}
if action.AssignTo != "" {
assigned := false
for i := range application.Variables {
v := &application.Variables[i]
if v.Name == action.AssignTo {
v.Value = output
assigned = true
logrus.Infof("Присвоение значения '%s' переменной '%s'", output, v.Name)
break
}
}
if !assigned {
return fmt.Errorf("переменная '%s' для присвоения не найдена", action.AssignTo)
}
}
return nil
case "file_template":
//Формируем 2 строки пути, с подставленными значениями и передаем её для выполнения
source, sourceErr := RenderTemplate(action.FileSource, vars)
@ -75,9 +94,9 @@ func ExecuteAction(action *types.SectionAction, application *types.PackageApplic
}
// RunCommand запускает выполнение переданной команды от указанного лица
func RunCommand(cmdStr, runAs string) error {
func RunCommand(cmdStr, runAs string) (string, error) {
if cmdStr == "" {
return nil
return "", nil
}
var cmd *exec.Cmd
if runAs != "" && runAs != "root" {
@ -87,9 +106,9 @@ func RunCommand(cmdStr, runAs string) error {
}
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("ошибка команды: %v\nВывод: %s", err, string(output))
return string(output), fmt.Errorf("ошибка выполнения команды: %v\nВывод: %s", err, string(output))
}
return nil
return strings.TrimSpace(string(output)), nil
}
// RenderFileTemplate создает целевой файл на основе файла источника с подставленными значениями в нем