package cmd import ( "fmt" "os" "path/filepath" "io" "github.com/spf13/cobra" ) var installAllCmd = &cobra.Command{ Use: "install-all", Short: "Копирует бинарник и config.json в ~/.rails", Run: func(cmd *cobra.Command, args []string) { home, err := os.UserHomeDir() if err != nil { fmt.Printf("Ошибка получения домашней директории: %v\n", err) os.Exit(1) } railsDir := filepath.Join(home, ".rails") binDir := filepath.Join(railsDir, "bin") configDir := filepath.Join(railsDir, "config") if err := os.MkdirAll(binDir, 0755); err != nil { fmt.Printf("Ошибка создания директории %s: %v\n", binDir, err) os.Exit(1) } if err := os.MkdirAll(configDir, 0755); err != nil { fmt.Printf("Ошибка создания директории %s: %v\n", configDir, err) os.Exit(1) } exePath, err := os.Executable() if err != nil { fmt.Printf("Ошибка получения пути к бинарнику: %v\n", err) os.Exit(1) } targetBin := filepath.Join(binDir, "train") srcBin, err := os.Open(exePath) if err != nil { fmt.Printf("Ошибка открытия бинарника: %v\n", err) os.Exit(1) } defer srcBin.Close() dstBin, err := os.Create(targetBin) if err != nil { fmt.Printf("Ошибка создания файла бинарника: %v\n", err) os.Exit(1) } defer dstBin.Close() if _, err = io.Copy(dstBin, srcBin); err != nil { fmt.Printf("Ошибка копирования бинарника: %v\n", err) os.Exit(1) } if err = os.Chmod(targetBin, 0755); err != nil { fmt.Printf("Ошибка установки прав для бинарника: %v\n", err) os.Exit(1) } fmt.Printf("Бинарник скопирован в %s\n", targetBin) sourceConfig := "./config.json" targetConfig := filepath.Join(configDir, "config.json") srcConfig, err := os.Open(sourceConfig) if err != nil { fmt.Printf("Ошибка открытия файла конфигурации: %v\n", err) os.Exit(1) } defer srcConfig.Close() dstConfig, err := os.Create(targetConfig) if err != nil { fmt.Printf("Ошибка создания файла конфигурации: %v\n", err) os.Exit(1) } defer dstConfig.Close() if _, err = io.Copy(dstConfig, srcConfig); err != nil { fmt.Printf("Ошибка копирования файла конфигурации: %v\n", err) os.Exit(1) } fmt.Printf("Файл конфигурации скопирован в %s\n", targetConfig) }, } func init() { rootCmd.AddCommand(installAllCmd) }