From 3b1799397e21da6c14f2ba7f01e9d031529afec8 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 19 Jan 2025 13:26:48 +0100 Subject: [PATCH 01/29] fix: fix nil pointer execution if no proper packagemanager selected --- cmd/install_cmd.go | 3 ++- cmd/remove_cmd.go | 5 ++++- cmd/search_cmd.go | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index ed36c43..6b8deaa 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -28,7 +28,7 @@ var installCmd = &cobra.Command{ if err := osManager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } - case "homebrew": + case "homebrew", "brew": manager = &pm.HomebrewManager{} case "cargo": manager = &pm.CargoManager{} @@ -38,6 +38,7 @@ var installCmd = &cobra.Command{ manager = &pm.FlatpakManager{} default: fmt.Println("No PackageManager found") + return } if err := manager.InstallPackage(packageName); err != nil { log.Printf("error: %v\n", err) diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 7e36cc6..defd1b5 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -1,6 +1,7 @@ package cmd import ( + "fmt" "log" "system_setup_tool/utils" @@ -27,7 +28,7 @@ var removeCmd = &cobra.Command{ if err := osManager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } - case "homebrew": + case "homebrew", "brew": manager = &pm.HomebrewManager{} case "cargo": manager = &pm.CargoManager{} @@ -36,6 +37,8 @@ var removeCmd = &cobra.Command{ case "flatpak": manager = &pm.FlatpakManager{} default: + fmt.Println("No PackageManager found") + return } if err := manager.RemovePackage(packageName); err != nil { log.Printf("error: %v\n", err) diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 1bc77bc..2536fea 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -27,6 +27,9 @@ var searchCmd = &cobra.Command{ } if managerName != "" { + if managerName == "brew" { + managerName = "homebrew" + } for _, m := range managers { if strings.EqualFold(m.Name(), managerName) { searchAndDisplayResults(m, packageName) From f39051f93d2de8e5e4ba53440b8d0837f2b4d558 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 19 Jan 2025 22:21:28 +0100 Subject: [PATCH 02/29] feat(cli): add update and update-all command --- cmd/cmd.go | 4 +- cmd/install_cmd.go | 7 ++- cmd/remove_cmd.go | 7 ++- cmd/search_cmd.go | 5 +- cmd/update_command.go | 81 ++++++++++++++++++++++++++++++++ packagemanager/cargo.go | 13 ++++- packagemanager/flatpak.go | 10 ++++ packagemanager/golang.go | 13 ++++- packagemanager/homebrew.go | 10 ++++ packagemanager/os.go | 38 +++++++++++++++ packagemanager/packagemanager.go | 2 + packagemanager/pipx.go | 10 ++++ 12 files changed, 192 insertions(+), 8 deletions(-) create mode 100644 cmd/update_command.go diff --git a/cmd/cmd.go b/cmd/cmd.go index 102668c..c940ea8 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -38,8 +38,10 @@ func init() { searchCmd.Flags().StringP("manager", "m", "", "The package manager you want to search a package with. (Options: os|homebrew|flatpak)") + updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)") + packageCmd.AddCommand(addCmd, deleteCmd, showCmd, enableCmd) - RootCmd.AddCommand(packageCmd, searchCmd, installCmd, removeCmd) + RootCmd.AddCommand(packageCmd, searchCmd, installCmd, removeCmd, updateCmd, updateAllCmd) } func initConfig() { diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index 6b8deaa..b31c3b2 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -18,6 +18,11 @@ var installCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager + if managerName == "os" { + managerName = "OS Package Manager" + } else if managerName == "brew" { + managerName = "homebrew" + } switch managerName { case "os": sudoPassword, err := utils.GetSudoPassword() @@ -28,7 +33,7 @@ var installCmd = &cobra.Command{ if err := osManager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } - case "homebrew", "brew": + case "homebrew": manager = &pm.HomebrewManager{} case "cargo": manager = &pm.CargoManager{} diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index defd1b5..a41ff61 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -18,6 +18,11 @@ var removeCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager + if managerName == "os" { + managerName = "OS Package Manager" + } else if managerName == "brew" { + managerName = "homebrew" + } switch managerName { case "os": sudoPassword, err := utils.GetSudoPassword() @@ -28,7 +33,7 @@ var removeCmd = &cobra.Command{ if err := osManager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } - case "homebrew", "brew": + case "homebrew": manager = &pm.HomebrewManager{} case "cargo": manager = &pm.CargoManager{} diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 2536fea..969f08c 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -18,6 +18,8 @@ var searchCmd = &cobra.Command{ managerName, _ := cmd.Flags().GetString("manager") if managerName == "os" { managerName = "OS Package Manager" + } else if managerName == "brew" { + managerName = "homebrew" } managers := []pm.PackageManager{ @@ -27,9 +29,6 @@ var searchCmd = &cobra.Command{ } if managerName != "" { - if managerName == "brew" { - managerName = "homebrew" - } for _, m := range managers { if strings.EqualFold(m.Name(), managerName) { searchAndDisplayResults(m, packageName) diff --git a/cmd/update_command.go b/cmd/update_command.go new file mode 100644 index 0000000..ebb23b2 --- /dev/null +++ b/cmd/update_command.go @@ -0,0 +1,81 @@ +package cmd + +import ( + "fmt" + "log" + pm "system_setup_tool/packagemanager" + "system_setup_tool/utils" + + "github.com/spf13/cobra" +) + +var updateCmd = &cobra.Command{ + Use: "update [package_name]", + Short: "update a package with the specified package manager.", + Long: "update a package with the specified package manager.\nIf no package specified, all packages for the package manager will be updated", + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + packageName := args[0] + managerName, _ := cmd.Flags().GetString("manager") + var manager pm.PackageManager + if managerName == "os" { + managerName = "OS Package Manager" + } else if managerName == "brew" { + managerName = "homebrew" + } + + switch managerName { + case "os": + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + osManager := pm.NewOSManager(sudoPassword) + if err := osManager.Install([]string{packageName}); err != nil { + log.Printf("error: %v\n", err) + } + case "homebrew": + manager = &pm.HomebrewManager{} + case "cargo": + manager = &pm.CargoManager{} + case "pipx": + manager = &pm.PipxManager{} + case "flatpak": + manager = &pm.FlatpakManager{} + default: + fmt.Println("No PackageManager found") + return + } + if packageName != "" { + if err := manager.UpdatePackage(packageName); err != nil { + log.Printf("error: %v\n", err) + } + } else { + if err := manager.UpdateAllPackages(); err != nil { + log.Printf("error: %v\n", err) + } + } + }, +} + +var updateAllCmd = &cobra.Command{ + Use: "update-all", + Short: "update all packages with all package managers.", + Run: func(cmd *cobra.Command, args []string) { + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + + managers := []pm.PackageManager{ + pm.NewOSManager(sudoPassword), + &pm.HomebrewManager{}, + &pm.FlatpakManager{}, + &pm.PipxManager{}, + } + for _, m := range managers { + fmt.Printf("Updating %s-Packages\n", m.Name()) + m.UpdateAllPackages() + } + }, +} diff --git a/packagemanager/cargo.go b/packagemanager/cargo.go index 9623a89..d99a0f5 100644 --- a/packagemanager/cargo.go +++ b/packagemanager/cargo.go @@ -1,6 +1,9 @@ package packagemanager -import "system_setup_tool/internal/shell" +import ( + "fmt" + "system_setup_tool/internal/shell" +) type CargoManager struct{} @@ -45,3 +48,11 @@ func (c *CargoManager) RemovePackage(pkg string) error { func (c *CargoManager) SearchPackage(pkg string) []string { return []string{} } + +func (c *CargoManager) UpdatePackage(pkg string) error { + return fmt.Errorf("update not supported") +} + +func (c *CargoManager) UpdateAllPackages() error { + return fmt.Errorf("update not supported") +} diff --git a/packagemanager/flatpak.go b/packagemanager/flatpak.go index 4c30842..2f4a72b 100644 --- a/packagemanager/flatpak.go +++ b/packagemanager/flatpak.go @@ -116,3 +116,13 @@ func (f *FlatpakManager) SearchPackage(pkg string) []string { packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList } + +func (f *FlatpakManager) UpdatePackage(pkg string) error { + cmd := shell.ExecCommand("flatpak", "update", "-y", pkg) + return cmd.Run() +} + +func (f *FlatpakManager) UpdateAllPackages() error { + cmd := shell.ExecCommand("flatpak", "update", "-y") + return cmd.Run() +} diff --git a/packagemanager/golang.go b/packagemanager/golang.go index 9392f89..87d779f 100644 --- a/packagemanager/golang.go +++ b/packagemanager/golang.go @@ -1,6 +1,9 @@ package packagemanager -import "system_setup_tool/internal/shell" +import ( + "fmt" + "system_setup_tool/internal/shell" +) type GolangManager struct{} @@ -45,3 +48,11 @@ func (g *GolangManager) RemovePackage(pkg string) error { func (g *GolangManager) SearchPackage(pkg string) []string { return []string{} } + +func (g *GolangManager) UpdatePackage(pkg string) error { + return fmt.Errorf("update not supported") +} + +func (g *GolangManager) UpdateAllPackages() error { + return fmt.Errorf("update not supported") +} diff --git a/packagemanager/homebrew.go b/packagemanager/homebrew.go index 93cbcd6..2baa2f2 100644 --- a/packagemanager/homebrew.go +++ b/packagemanager/homebrew.go @@ -59,3 +59,13 @@ func (h *HomebrewManager) SearchPackage(pkg string) []string { packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList } + +func (h *HomebrewManager) UpdatePackage(pkg string) error { + cmd := shell.ExecCommand("brew", "upgrade", pkg) + return cmd.Run() +} + +func (h *HomebrewManager) UpdateAllPackages() error { + cmd := shell.ExecCommand("brew", "update") + return cmd.Run() +} diff --git a/packagemanager/os.go b/packagemanager/os.go index e337347..48f1934 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -74,6 +74,20 @@ func (o *OSManager) SearchPackage(pkg string) []string { return packageList } +func (o *OSManager) UpdatePackage(pkg string) error { + fullCmd := fmt.Sprintf("%s %s", o.OS.UpdateCommand, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(o.SudoPassword + "\n") + return command.Run() +} + +func (o *OSManager) UpdateAllPackages() error { + fullCmd := fmt.Sprintf("%s", o.OS.UpdateCommand) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(o.SudoPassword + "\n") + return command.Run() +} + type OS struct { ID string Name string @@ -82,6 +96,7 @@ type OS struct { InstallCommand string SearchCommand string RemoveCommand string + UpdateCommand string } func parseOsRelease(osRelease string) *OS { @@ -91,6 +106,9 @@ func parseOsRelease(osRelease string) *OS { result.Version = "Unknown" result.PackageManager = "Unkown" result.InstallCommand = "Unkown" + result.SearchCommand = "Unkown" + result.RemoveCommand = "Unkown" + result.UpdateCommand = "Unkown" lines := strings.Split(osRelease, "\n") @@ -120,6 +138,10 @@ func parseOsRelease(osRelease string) *OS { if err != nil { log.Fatal(err) } + err = result.getUpdateCommand() + if err != nil { + log.Fatal(err) + } return &result } @@ -209,6 +231,22 @@ func (os *OS) getDeleteCommand() error { } } +func (os *OS) getUpdateCommand() error { + switch os.PackageManager { + case "apt": + os.UpdateCommand = "apt update" + return nil + case "pacman": + os.UpdateCommand = "pacman -S" + return nil + case "dnf": + os.UpdateCommand = "dnf update" + return nil + default: + return fmt.Errorf("no install command found for package manager: %s", os.ID) + } +} + func InstallBuildEssentials(os *OS, sudoPassword string) error { var command string switch os.PackageManager { diff --git a/packagemanager/packagemanager.go b/packagemanager/packagemanager.go index 48362d2..8350beb 100644 --- a/packagemanager/packagemanager.go +++ b/packagemanager/packagemanager.go @@ -6,5 +6,7 @@ type PackageManager interface { InstallManager() error RemovePackage(pkg string) error SearchPackage(pkg string) []string + UpdatePackage(pkg string) error + UpdateAllPackages() error Name() string } diff --git a/packagemanager/pipx.go b/packagemanager/pipx.go index a4e1716..c8711ec 100644 --- a/packagemanager/pipx.go +++ b/packagemanager/pipx.go @@ -46,3 +46,13 @@ func (p *PipxManager) RemovePackage(pkg string) error { func (p *PipxManager) SearchPackage(pkg string) []string { return []string{} } + +func (p *PipxManager) UpdatePackage(pkg string) error { + cmd := shell.ExecCommand("pipx", "upgrade", pkg) + return cmd.Run() +} + +func (p *PipxManager) UpdateAllPackages() error { + cmd := shell.ExecCommand("pipx", "upgrade-all") + return cmd.Run() +} From 8dabc7357b8fc6f911f3d0ab5d407c92d57d2cab Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 19 Jan 2025 22:54:49 +0100 Subject: [PATCH 03/29] feat(packagemanager): added packagemanager definitions for winget and chocolatey --- packagemanager/choco.go | 66 ++++++++++++++++++++++++++++++++++++++ packagemanager/homebrew.go | 2 +- packagemanager/os.go | 23 +++++++++---- packagemanager/winget.go | 66 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 packagemanager/choco.go create mode 100644 packagemanager/winget.go diff --git a/packagemanager/choco.go b/packagemanager/choco.go new file mode 100644 index 0000000..71d4c8d --- /dev/null +++ b/packagemanager/choco.go @@ -0,0 +1,66 @@ +package packagemanager + +import ( + "log" + "strings" + "system_setup_tool/internal/shell" +) + +type ChocoManager struct{} + +func (c *ChocoManager) Install(packages []string) error { + if len(packages) == 0 { + return nil + } + err := InstallWithProgress(c, packages) + if err != nil { + return err + } + return nil +} + +func (c *ChocoManager) Name() string { + return "Chocolatey" +} + +func (c *ChocoManager) InstallManager() error { + if _, err := shell.ExecLookPath("choco"); err == nil { + return nil + } + + return installHomebrew() +} + +func installChoco() error { + return nil +} + +func (c *ChocoManager) InstallPackage(pkg string) error { + cmd := shell.ExecCommand("choco", "install", pkg) + return cmd.Run() +} + +func (c *ChocoManager) RemovePackage(pkg string) error { + cmd := shell.ExecCommand("choco", "uninstall", pkg) + return cmd.Run() +} + +func (c *ChocoManager) SearchPackage(pkg string) []string { + cmd := shell.ExecCommand("choco", "search", pkg) + packages, err := cmd.Output() + if err != nil { + log.Printf("error fetching %s packages: %v", c.Name(), err) + } + packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") + return packageList +} + +func (c *ChocoManager) UpdatePackage(pkg string) error { + cmd := shell.ExecCommand("choco", "update", pkg) + return cmd.Run() +} + +func (c *ChocoManager) UpdateAllPackages() error { + cmd := shell.ExecCommand("choco", "update") + return cmd.Run() +} diff --git a/packagemanager/homebrew.go b/packagemanager/homebrew.go index 2baa2f2..af72153 100644 --- a/packagemanager/homebrew.go +++ b/packagemanager/homebrew.go @@ -66,6 +66,6 @@ func (h *HomebrewManager) UpdatePackage(pkg string) error { } func (h *HomebrewManager) UpdateAllPackages() error { - cmd := shell.ExecCommand("brew", "update") + cmd := shell.ExecCommand("brew", "upgrade") return cmd.Run() } diff --git a/packagemanager/os.go b/packagemanager/os.go index 48f1934..e6fe90a 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "os" + "runtime" "strings" "system_setup_tool/internal/shell" ) @@ -14,14 +15,22 @@ type OSManager struct { } func NewOSManager(sudoPassword string) *OSManager { - os, err := GetLinuxDistribution() - if err != nil { - log.Fatalf("error geting os information: %v", err) - } - return &OSManager{ - OS: os, - SudoPassword: sudoPassword, + switch runtime.GOOS { + case "linux": + os, err := GetLinuxDistribution() + if err != nil { + log.Fatalf("error geting os information: %v", err) + } + return &OSManager{ + OS: os, + SudoPassword: sudoPassword, + } + case "windows": + case "darwin": + default: + log.Fatal("Operating system not supported") } + return nil } func (o *OSManager) Name() string { diff --git a/packagemanager/winget.go b/packagemanager/winget.go new file mode 100644 index 0000000..2d5d14b --- /dev/null +++ b/packagemanager/winget.go @@ -0,0 +1,66 @@ +package packagemanager + +import ( + "log" + "strings" + "system_setup_tool/internal/shell" +) + +type WingetManager struct{} + +func (w *WingetManager) Install(packages []string) error { + if len(packages) == 0 { + return nil + } + err := InstallWithProgress(w, packages) + if err != nil { + return err + } + return nil +} + +func (w *WingetManager) Name() string { + return "Winget" +} + +func (w *WingetManager) InstallManager() error { + if _, err := shell.ExecLookPath("winget"); err == nil { + return nil + } + + return installHomebrew() +} + +func installWinget() error { + return nil +} + +func (w *WingetManager) InstallPackage(pkg string) error { + cmd := shell.ExecCommand("winget", "install", pkg) + return cmd.Run() +} + +func (w *WingetManager) RemovePackage(pkg string) error { + cmd := shell.ExecCommand("winget", "uninstall", pkg) + return cmd.Run() +} + +func (w *WingetManager) SearchPackage(pkg string) []string { + cmd := shell.ExecCommand("winget", "search", pkg) + packages, err := cmd.Output() + if err != nil { + log.Printf("error fetching %s packages: %v", w.Name(), err) + } + packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") + return packageList +} + +func (w *WingetManager) UpdatePackage(pkg string) error { + cmd := shell.ExecCommand("winget", "update", pkg) + return cmd.Run() +} + +func (w *WingetManager) UpdateAllPackages() error { + cmd := shell.ExecCommand("winget", "update") + return cmd.Run() +} From 8281883e4deef3a9426e1a5d8f362fab1faaad59 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Mon, 20 Jan 2025 21:28:44 +0100 Subject: [PATCH 04/29] feat(cli,packagemanager): implemented first working windows and macos versions in order to implement sst for windows and macos the structure of osmanager has been changed. Now osmanager has a new field pm, which contains the specific packagemanager for the os. Linux packagemanagers have been implemented as packagemanagers on their own. --- cmd/install_cmd.go | 20 +-- cmd/remove_cmd.go | 18 +-- cmd/search_cmd.go | 26 +++- cmd/update_command.go | 18 +-- go.mod | 2 +- packagemanager/apt.go | 76 +++++++++++ packagemanager/dnf.go | 76 +++++++++++ packagemanager/os.go | 249 +++++++++++++++--------------------- packagemanager/os_test.go | 9 -- packagemanager/pacman.go | 76 +++++++++++ packagemanager/win.go | 30 +++++ packagemanager/win_dummy.go | 8 ++ 12 files changed, 422 insertions(+), 186 deletions(-) create mode 100644 packagemanager/apt.go create mode 100644 packagemanager/dnf.go create mode 100644 packagemanager/pacman.go create mode 100644 packagemanager/win.go create mode 100644 packagemanager/win_dummy.go diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index b31c3b2..be9de12 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "log" + "runtime" "system_setup_tool/utils" pm "system_setup_tool/packagemanager" @@ -24,14 +25,15 @@ var installCmd = &cobra.Command{ managerName = "homebrew" } switch managerName { - case "os": - sudoPassword, err := utils.GetSudoPassword() - if err != nil { - log.Fatal(err) - } - osManager := pm.NewOSManager(sudoPassword) - if err := osManager.Install([]string{packageName}); err != nil { - log.Printf("error: %v\n", err) + case "OS Package Manager": + if runtime.GOOS != "windows" { + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + manager = pm.NewOSManager(sudoPassword) + } else { + manager = pm.NewOSManager("") } case "homebrew": manager = &pm.HomebrewManager{} @@ -45,7 +47,7 @@ var installCmd = &cobra.Command{ fmt.Println("No PackageManager found") return } - if err := manager.InstallPackage(packageName); err != nil { + if err := manager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } }, diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index a41ff61..30b80f2 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "log" + "runtime" "system_setup_tool/utils" pm "system_setup_tool/packagemanager" @@ -24,14 +25,15 @@ var removeCmd = &cobra.Command{ managerName = "homebrew" } switch managerName { - case "os": - sudoPassword, err := utils.GetSudoPassword() - if err != nil { - log.Fatal(err) - } - osManager := pm.NewOSManager(sudoPassword) - if err := osManager.Install([]string{packageName}); err != nil { - log.Printf("error: %v\n", err) + case "OS Package Manager": + if runtime.GOOS != "windows" { + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + manager = pm.NewOSManager(sudoPassword) + } else { + manager = pm.NewOSManager("") } case "homebrew": manager = &pm.HomebrewManager{} diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 969f08c..6fe1f68 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -2,6 +2,8 @@ package cmd import ( "fmt" + "log" + "runtime" "strings" pm "system_setup_tool/packagemanager" @@ -22,10 +24,26 @@ var searchCmd = &cobra.Command{ managerName = "homebrew" } - managers := []pm.PackageManager{ - pm.NewOSManager(""), - &pm.HomebrewManager{}, - &pm.FlatpakManager{}, + var managers []pm.PackageManager + switch runtime.GOOS { + case "linux": + managers = []pm.PackageManager{ + pm.NewOSManager(""), + &pm.HomebrewManager{}, + &pm.FlatpakManager{}, + } + case "windows": + managers = []pm.PackageManager{ + pm.NewOSManager(""), + &pm.WingetManager{}, + &pm.ChocoManager{}, + } + case "darwin": + managers = []pm.PackageManager{ + pm.NewOSManager(""), + } + default: + log.Println("No Package Managers found") } if managerName != "" { diff --git a/cmd/update_command.go b/cmd/update_command.go index ebb23b2..a6162b5 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "log" + "runtime" pm "system_setup_tool/packagemanager" "system_setup_tool/utils" @@ -25,14 +26,15 @@ var updateCmd = &cobra.Command{ } switch managerName { - case "os": - sudoPassword, err := utils.GetSudoPassword() - if err != nil { - log.Fatal(err) - } - osManager := pm.NewOSManager(sudoPassword) - if err := osManager.Install([]string{packageName}); err != nil { - log.Printf("error: %v\n", err) + case "OS Package Manager": + if runtime.GOOS != "windows" { + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + manager = pm.NewOSManager(sudoPassword) + } else { + manager = pm.NewOSManager("") } case "homebrew": manager = &pm.HomebrewManager{} diff --git a/go.mod b/go.mod index 72088a7..396303f 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/schollz/progressbar/v3 v3.18.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 + golang.org/x/sys v0.29.0 ) require ( @@ -50,7 +51,6 @@ require ( go.uber.org/multierr v1.9.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.29.0 // indirect golang.org/x/term v0.28.0 // indirect golang.org/x/text v0.18.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/packagemanager/apt.go b/packagemanager/apt.go new file mode 100644 index 0000000..dd63647 --- /dev/null +++ b/packagemanager/apt.go @@ -0,0 +1,76 @@ +package packagemanager + +import ( + "fmt" + "log" + "strings" + "system_setup_tool/internal/shell" +) + +type AptManager struct { + SudoPassword string +} + +func (a *AptManager) Install(packages []string) error { + if len(packages) == 0 { + return nil + } + err := InstallWithProgress(a, packages) + if err != nil { + return err + } + return nil +} + +func (a *AptManager) Name() string { + return "OS Home Manager" +} + +func (a *AptManager) InstallManager() error { + return nil +} + +func (a *AptManager) InstallPackage(pkg string) error { + cmd := "apt install -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(a.SudoPassword + "\n") + return command.Run() +} + +func (a *AptManager) RemovePackage(pkg string) error { + cmd := "apt remove -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(a.SudoPassword + "\n") + return command.Run() +} + +func (a *AptManager) SearchPackage(pkg string) []string { + cmd := "apt search -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(a.SudoPassword + "\n") + packages, err := command.Output() + if err != nil { + log.Printf("error fetching %s packages: %v", a.Name(), err) + } + packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") + return packageList +} + +func (a *AptManager) UpdatePackage(pkg string) error { + cmd := "apt update -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(a.SudoPassword + "\n") + return command.Run() +} + +func (a *AptManager) UpdateAllPackages() error { + cmd := "apt update -y" + fullCmd := fmt.Sprintf("%s", cmd) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(a.SudoPassword + "\n") + return command.Run() +} diff --git a/packagemanager/dnf.go b/packagemanager/dnf.go new file mode 100644 index 0000000..d68a59f --- /dev/null +++ b/packagemanager/dnf.go @@ -0,0 +1,76 @@ +package packagemanager + +import ( + "fmt" + "log" + "strings" + "system_setup_tool/internal/shell" +) + +type DnfManager struct { + SudoPassword string +} + +func (d *DnfManager) Install(packages []string) error { + if len(packages) == 0 { + return nil + } + err := InstallWithProgress(d, packages) + if err != nil { + return err + } + return nil +} + +func (d *DnfManager) Name() string { + return "OS Home Manager" +} + +func (d *DnfManager) InstallManager() error { + return nil +} + +func (d *DnfManager) InstallPackage(pkg string) error { + cmd := "dnf install -y --best" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(d.SudoPassword + "\n") + return command.Run() +} + +func (d *DnfManager) RemovePackage(pkg string) error { + cmd := "dnf remove -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(d.SudoPassword + "\n") + return command.Run() +} + +func (d *DnfManager) SearchPackage(pkg string) []string { + cmd := "dnf search -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(d.SudoPassword + "\n") + packages, err := command.Output() + if err != nil { + log.Printf("error fetching %s packages: %v", d.Name(), err) + } + packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") + return packageList +} + +func (d *DnfManager) UpdatePackage(pkg string) error { + cmd := "dnf update -y" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(d.SudoPassword + "\n") + return command.Run() +} + +func (d *DnfManager) UpdateAllPackages() error { + cmd := "dnf update -y" + fullCmd := fmt.Sprintf("%s", cmd) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(d.SudoPassword + "\n") + return command.Run() +} diff --git a/packagemanager/os.go b/packagemanager/os.go index e6fe90a..efc84d6 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -12,6 +12,7 @@ import ( type OSManager struct { OS *OS SudoPassword string + pm PackageManager } func NewOSManager(sudoPassword string) *OSManager { @@ -19,14 +20,66 @@ func NewOSManager(sudoPassword string) *OSManager { case "linux": os, err := GetLinuxDistribution() if err != nil { - log.Fatalf("error geting os information: %v", err) + log.Fatalf("error getting os information: %v", err) + } + var pm PackageManager + switch os.ID { + case "debian", "ubuntu": + pm = &AptManager{SudoPassword: sudoPassword} + case "arch": + pm = &PacmanManager{SudoPassword: sudoPassword} + case "fedora": + pm = &DnfManager{SudoPassword: sudoPassword} + default: + log.Fatalf("Unsupported Linux distribution: %s", os.ID) } return &OSManager{ OS: os, SudoPassword: sudoPassword, + pm: pm, } case "windows": + os, err := getPlatformInfo() + if err != nil { + return nil + } + + if _, err := shell.ExecLookPath("winget"); err == nil { + return &OSManager{ + OS: os, + SudoPassword: "", + pm: &WingetManager{}, + } + } else if _, err := shell.ExecLookPath("choco"); err == nil { + return &OSManager{ + OS: os, + SudoPassword: "", + pm: &ChocoManager{}, + } + } else { + log.Println("Neither Winget nor Chocolatey found on Windows. Package management functionality will be limited.") + } case "darwin": + os, err := platformInfoMac() + if err != nil { + return nil + } + _, err = shell.ExecLookPath("brew") + if err == nil { + return &OSManager{ + OS: os, + SudoPassword: sudoPassword, + pm: &HomebrewManager{}, + } + } else { + manager := &HomebrewManager{} + manager.InstallManager() + return &OSManager{ + OS: os, + SudoPassword: sudoPassword, + pm: manager, + } + } default: log.Fatal("Operating system not supported") } @@ -43,7 +96,7 @@ func (o *OSManager) Install(packages []string) error { if len(packages) == 0 { return nil } - err := InstallWithProgress(o, packages) + err := InstallWithProgress(o.pm, packages) if err != nil { return err } @@ -51,7 +104,7 @@ func (o *OSManager) Install(packages []string) error { } func (o *OSManager) InstallPackage(pkg string) error { - return InstallPackage(o.OS.InstallCommand, pkg, o.SudoPassword) + return o.pm.InstallPackage(pkg) //(o.OS.InstallCommand, pkg, o.SudoPassword) } func (o *OSManager) InstallBuildEssentials() error { @@ -59,42 +112,19 @@ func (o *OSManager) InstallBuildEssentials() error { } func (o *OSManager) RemovePackage(pkg string) error { - fullCmd := fmt.Sprintf("%s %s", o.OS.RemoveCommand, pkg) - command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) - command.Stdin = strings.NewReader(o.SudoPassword + "\n") - return command.Run() + return o.pm.RemovePackage(pkg) } func (o *OSManager) SearchPackage(pkg string) []string { - cmdParts := strings.Fields(o.OS.SearchCommand) - if len(cmdParts) == 0 { - log.Printf("Invalid search command for OS package manager") - return []string{} - } - - cmd := shell.ExecCommand(cmdParts[0], append(cmdParts[1:], pkg)...) - packages, err := cmd.Output() - if err != nil { - log.Printf("Error fetching %s packages: %v", o.OS.PackageManager, err) - return []string{} - } - - packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") - return packageList + return o.pm.SearchPackage(pkg) } func (o *OSManager) UpdatePackage(pkg string) error { - fullCmd := fmt.Sprintf("%s %s", o.OS.UpdateCommand, pkg) - command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) - command.Stdin = strings.NewReader(o.SudoPassword + "\n") - return command.Run() + return o.pm.UpdatePackage(pkg) } func (o *OSManager) UpdateAllPackages() error { - fullCmd := fmt.Sprintf("%s", o.OS.UpdateCommand) - command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) - command.Stdin = strings.NewReader(o.SudoPassword + "\n") - return command.Run() + return o.pm.UpdateAllPackages() } type OS struct { @@ -102,10 +132,6 @@ type OS struct { Name string Version string PackageManager string - InstallCommand string - SearchCommand string - RemoveCommand string - UpdateCommand string } func parseOsRelease(osRelease string) *OS { @@ -113,11 +139,6 @@ func parseOsRelease(osRelease string) *OS { result.ID = "Unknown" result.Name = "Unknown" result.Version = "Unknown" - result.PackageManager = "Unkown" - result.InstallCommand = "Unkown" - result.SearchCommand = "Unkown" - result.RemoveCommand = "Unkown" - result.UpdateCommand = "Unkown" lines := strings.Split(osRelease, "\n") @@ -135,22 +156,6 @@ func parseOsRelease(osRelease string) *OS { result.Version = strings.Trim(splitLine[1], "\"") } } - err := result.getPackageManager() - if err != nil { - log.Fatal(err) - } - err = result.getInstallCommand() - if err != nil { - log.Fatal(err) - } - err = result.getSearchCommand() - if err != nil { - log.Fatal(err) - } - err = result.getUpdateCommand() - if err != nil { - log.Fatal(err) - } return &result } @@ -164,98 +169,6 @@ func GetLinuxDistribution() (*OS, error) { return parseOsRelease(string(osRelease)), nil } -func (os *OS) getPackageManager() error { - switch os.ID { - case "debian", "ubuntu": - os.PackageManager = "apt" - return nil - case "arch": - os.PackageManager = "pacman" - return nil - case "fedora": - os.PackageManager = "dnf" - return nil - default: - pmcommands := []string{ - "apt", - "dnf", - "pacman", - } - for _, pmname := range pmcommands { - _, err := shell.ExecLookPath(pmname) - if err == nil { - os.PackageManager = pmname - return nil - } - } - return fmt.Errorf("no packagemanager found for os: %s", os) - } -} - -func (os *OS) getInstallCommand() error { - switch os.PackageManager { - case "apt": - os.InstallCommand = "apt install -y" - return nil - case "pacman": - os.InstallCommand = "pacman -S --noconfirm --needed" - return nil - case "dnf": - os.InstallCommand = "dnf install -y --best" - return nil - default: - return fmt.Errorf("no install command found for package manager: %s", os.ID) - } -} - -func (os *OS) getSearchCommand() error { - switch os.PackageManager { - case "apt": - os.SearchCommand = "apt search" - return nil - case "pacman": - os.SearchCommand = "pacman -Ss" - return nil - case "dnf": - os.SearchCommand = "dnf search" - return nil - default: - return fmt.Errorf("no install command found for package manager: %s", os.ID) - } -} - -func (os *OS) getDeleteCommand() error { - switch os.PackageManager { - case "apt": - os.RemoveCommand = "apt remove" - return nil - case "pacman": - os.RemoveCommand = "pacman -R" - return nil - case "dnf": - os.RemoveCommand = "dnf remove" - return nil - default: - return fmt.Errorf("no install command found for package manager: %s", os.ID) - } -} - -func (os *OS) getUpdateCommand() error { - switch os.PackageManager { - case "apt": - os.UpdateCommand = "apt update" - return nil - case "pacman": - os.UpdateCommand = "pacman -S" - return nil - case "dnf": - os.UpdateCommand = "dnf update" - return nil - default: - return fmt.Errorf("no install command found for package manager: %s", os.ID) - } -} - func InstallBuildEssentials(os *OS, sudoPassword string) error { var command string switch os.PackageManager { @@ -275,3 +188,45 @@ func InstallBuildEssentials(os *OS, sudoPassword string) error { } return nil } + +func getSysctlValue(key string) (string, error) { + stdout, err := shell.ExecCommand(".", "sysctl", key).Output() + if err != nil { + return "", err + } + version := strings.TrimPrefix(string(stdout), key+": ") + return strings.TrimSpace(version), nil +} + +func platformInfoMac() (*OS, error) { + var result OS + result.ID = "Unknown" + result.Name = "MacOS" + result.Version = "Unknown" + + version, err := getSysctlValue("kern.osproductversion") + if err != nil { + return nil, err + } + result.Version = version + ID, err := getSysctlValue("kern.osversion") + if err != nil { + return nil, err + } + result.ID = ID + + return &result, nil +} + +func getPlatformInfo() (*OS, error) { + switch runtime.GOOS { + case "windows": + return platformInfoWin() + case "darwin": + return platformInfoMac() + case "linux": + return GetLinuxDistribution() + default: + return nil, fmt.Errorf("unsupported operating system: %s", runtime.GOOS) + } +} diff --git a/packagemanager/os_test.go b/packagemanager/os_test.go index 25dbf58..f4d76eb 100644 --- a/packagemanager/os_test.go +++ b/packagemanager/os_test.go @@ -41,13 +41,4 @@ VERSION_ID="20.04" if os.Version != "20.04" { t.Errorf("Expected Version to be '20.04', got %s", os.Version) } - if os.PackageManager != "apt" { - t.Errorf("Expected PackageManager to be 'apt', got %s", os.PackageManager) - } - if os.InstallCommand != "apt install -y" { - t.Errorf("Expected InstallCommand to be 'apt install -y', got %s", os.InstallCommand) - } - if os.SearchCommand != "apt search" { - t.Errorf("Expected SearchCommand to be 'apt search', got %s", os.SearchCommand) - } } diff --git a/packagemanager/pacman.go b/packagemanager/pacman.go new file mode 100644 index 0000000..94f018b --- /dev/null +++ b/packagemanager/pacman.go @@ -0,0 +1,76 @@ +package packagemanager + +import ( + "fmt" + "log" + "strings" + "system_setup_tool/internal/shell" +) + +type PacmanManager struct { + SudoPassword string +} + +func (m *PacmanManager) Install(packages []string) error { + if len(packages) == 0 { + return nil + } + err := InstallWithProgress(m, packages) + if err != nil { + return err + } + return nil +} + +func (m *PacmanManager) Name() string { + return "OS Home Manager" +} + +func (m *PacmanManager) InstallManager() error { + return nil +} + +func (m *PacmanManager) InstallPackage(pkg string) error { + cmd := "pacman -S --noconfirm --needed" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(m.SudoPassword + "\n") + return command.Run() +} + +func (m *PacmanManager) RemovePackage(pkg string) error { + cmd := "pacman -R" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(m.SudoPassword + "\n") + return command.Run() +} + +func (p *PacmanManager) SearchPackage(pkg string) []string { + cmd := "pacman -Ss" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(p.SudoPassword + "\n") + packages, err := command.Output() + if err != nil { + log.Printf("error fetching %s packages: %v", p.Name(), err) + } + packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") + return packageList +} + +func (p *PacmanManager) UpdatePackage(pkg string) error { + cmd := "pacman -S" + fullCmd := fmt.Sprintf("%s %s", cmd, pkg) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(p.SudoPassword + "\n") + return command.Run() +} + +func (p *PacmanManager) UpdateAllPackages() error { + cmd := "apt -S" + fullCmd := fmt.Sprintf("%s", cmd) + command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) + command.Stdin = strings.NewReader(p.SudoPassword + "\n") + return command.Run() +} diff --git a/packagemanager/win.go b/packagemanager/win.go new file mode 100644 index 0000000..4488b57 --- /dev/null +++ b/packagemanager/win.go @@ -0,0 +1,30 @@ +//go:build windows +// +build windows + +package packagemanager + +import ( + "fmt" + + "golang.org/x/sys/windows/registry" +) + +func platformInfoWin() (*OS, error) { + var result OS + result.ID = "Unknown" + result.Name = "Windows" + result.Version = "Unknown" + + key, _ := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) + + productName, _, _ := key.GetStringValue("ProductName") + currentBuild, _, _ := key.GetStringValue("CurrentBuildNumber") + displayVersion, _, _ := key.GetStringValue("DisplayVersion") + releaseId, _, _ := key.GetStringValue("ReleaseId") + + result.Name = productName + result.Version = fmt.Sprintf("%s (Build: %s)", releaseId, currentBuild) + result.ID = displayVersion + + return &result, key.Close() +} diff --git a/packagemanager/win_dummy.go b/packagemanager/win_dummy.go new file mode 100644 index 0000000..3482159 --- /dev/null +++ b/packagemanager/win_dummy.go @@ -0,0 +1,8 @@ +//go:build linux +// +build linux + +package packagemanager + +func platformInfoWin() (*OS, error) { + return nil, nil +} From fc966df8f574f1bac15e7a52471e0aecde586dff Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Mon, 20 Jan 2025 21:33:07 +0100 Subject: [PATCH 05/29] docs: update changelog.md --- changelog.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/changelog.md b/changelog.md index f7bbf83..b012ff6 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. +## [0.4.0] - 2025-01-20 + +### 🚀 Features + +- *(cli)* Add update and update-all command +- *(packagemanager)* Added packagemanager definitions for winget and chocolatey +- *(cli,packagemanager)* Implemented first working windows and macos versions + +## [0.3.1] - 2025-01-19 + +### 🐛 Bug Fixes + +- Fix nil pointer execution if no proper packagemanager selected + ## [0.3.0] - 2025-01-18 ### 🚀 Features @@ -19,6 +33,10 @@ All notable changes to this project will be documented in this file. - Seperate files, function and structs into seperate packages - Move main.go back to project root +### 📚 Documentation + +- Update changelog.md + ## [0.2.0] - 2025-01-16 ### 🚀 Features From 05e774764fb1c7cb7da8d5cca9d90b689fc24acb Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Mon, 20 Jan 2025 21:37:13 +0100 Subject: [PATCH 06/29] fix(packagemanager): added missing build tag for macos --- packagemanager/win_dummy.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packagemanager/win_dummy.go b/packagemanager/win_dummy.go index 3482159..b98c8d2 100644 --- a/packagemanager/win_dummy.go +++ b/packagemanager/win_dummy.go @@ -1,5 +1,5 @@ -//go:build linux -// +build linux +//go:build linux || darwin +// +build linux darwin package packagemanager From 0306ad36ef1a299d5c74143afbc92d8cd3f50f6c Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Mon, 20 Jan 2025 21:37:35 +0100 Subject: [PATCH 07/29] docs: update changelog.md --- changelog.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index b012ff6..2846d08 100644 --- a/changelog.md +++ b/changelog.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. -## [0.4.0] - 2025-01-20 +## [unreleased] ### 🚀 Features @@ -10,6 +10,14 @@ All notable changes to this project will be documented in this file. - *(packagemanager)* Added packagemanager definitions for winget and chocolatey - *(cli,packagemanager)* Implemented first working windows and macos versions +### 🐛 Bug Fixes + +- *(packagemanager)* Added missing build tag for macos + +### 📚 Documentation + +- Update changelog.md + ## [0.3.1] - 2025-01-19 ### 🐛 Bug Fixes From afaf7707aa03c63a50481f068e7b9d4264c4b0d4 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Mon, 20 Jan 2025 22:10:19 +0100 Subject: [PATCH 08/29] feat(cli): add concurrent execution of search and update to improve performance --- changelog.md | 2 +- cmd/search_cmd.go | 36 ++++++++++++++++++++++--- cmd/update_command.go | 62 ++++++++++++++++++++++++++++++++++--------- packagemanager/dnf.go | 7 ++--- 4 files changed, 85 insertions(+), 22 deletions(-) diff --git a/changelog.md b/changelog.md index 2846d08..b7242bf 100644 --- a/changelog.md +++ b/changelog.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. -## [unreleased] +## [0.4.0] - 2025-01-20 ### 🚀 Features diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 6fe1f68..ca92f53 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -5,6 +5,7 @@ import ( "log" "runtime" "strings" + "sync" pm "system_setup_tool/packagemanager" @@ -57,9 +58,7 @@ var searchCmd = &cobra.Command{ return } - for _, manager := range managers { - searchAndDisplayResults(manager, packageName) - } + searchConcurrently(managers, packageName) }, } @@ -79,3 +78,34 @@ func searchAndDisplayResults(manager pm.PackageManager, packageName string) { displayResults(results, manager.Name()) fmt.Println() } + +func searchConcurrently(managers []pm.PackageManager, packageName string) { + var wg sync.WaitGroup + results := make(chan struct { + manager pm.PackageManager + results []string + }, len(managers)) + + for _, manager := range managers { + wg.Add(1) + go func(m pm.PackageManager) { + defer wg.Done() + searchResults := m.SearchPackage(packageName) + results <- struct { + manager pm.PackageManager + results []string + }{m, searchResults} + }(manager) + } + + go func() { + wg.Wait() + close(results) + }() + + for result := range results { + fmt.Printf("Results from %s:\n", result.manager.Name()) + displayResults(result.results, result.manager.Name()) + fmt.Println() + } +} diff --git a/cmd/update_command.go b/cmd/update_command.go index a6162b5..14c0621 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "runtime" + "sync" pm "system_setup_tool/packagemanager" "system_setup_tool/utils" @@ -64,20 +65,55 @@ var updateAllCmd = &cobra.Command{ Use: "update-all", Short: "update all packages with all package managers.", Run: func(cmd *cobra.Command, args []string) { - sudoPassword, err := utils.GetSudoPassword() - if err != nil { - log.Fatal(err) - } - managers := []pm.PackageManager{ - pm.NewOSManager(sudoPassword), - &pm.HomebrewManager{}, - &pm.FlatpakManager{}, - &pm.PipxManager{}, - } - for _, m := range managers { - fmt.Printf("Updating %s-Packages\n", m.Name()) - m.UpdateAllPackages() + var managers []pm.PackageManager + switch runtime.GOOS { + case "linux": + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + managers = []pm.PackageManager{ + pm.NewOSManager(sudoPassword), + &pm.HomebrewManager{}, + &pm.FlatpakManager{}, + &pm.PipxManager{}, + } + case "windows": + managers = []pm.PackageManager{ + pm.NewOSManager(""), + &pm.WingetManager{}, + &pm.ChocoManager{}, + &pm.PipxManager{}, + } + case "darwin": + sudoPassword, err := utils.GetSudoPassword() + if err != nil { + log.Fatal(err) + } + managers = []pm.PackageManager{ + pm.NewOSManager(sudoPassword), + &pm.PipxManager{}, + } + default: + log.Println("No Package Managers found") } + updateAllConcurrently(managers) }, } + +func updateAllConcurrently(managers []pm.PackageManager) { + var wg sync.WaitGroup + for _, m := range managers { + wg.Add(1) + go func(manager pm.PackageManager) { + defer wg.Done() + fmt.Printf("Updating %s-Packages\n", manager.Name()) + err := manager.UpdateAllPackages() + if err != nil { + log.Printf("Error updating %s: %v\n", manager.Name(), err) + } + }(m) + } + wg.Wait() +} diff --git a/packagemanager/dnf.go b/packagemanager/dnf.go index d68a59f..6c539b2 100644 --- a/packagemanager/dnf.go +++ b/packagemanager/dnf.go @@ -47,11 +47,8 @@ func (d *DnfManager) RemovePackage(pkg string) error { } func (d *DnfManager) SearchPackage(pkg string) []string { - cmd := "dnf search -y" - fullCmd := fmt.Sprintf("%s %s", cmd, pkg) - command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) - command.Stdin = strings.NewReader(d.SudoPassword + "\n") - packages, err := command.Output() + cmd := shell.ExecCommand("dnf", "search", pkg) + packages, err := cmd.Output() if err != nil { log.Printf("error fetching %s packages: %v", d.Name(), err) } From 53a50f2be47d2ab868ae31b1760db3c53f3b437e Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Wed, 22 Jan 2025 13:21:47 +0100 Subject: [PATCH 09/29] fix(packagemanager): reimplement getPackagemanager to enable installing buildtools on linux --- packagemanager/os.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packagemanager/os.go b/packagemanager/os.go index efc84d6..703e887 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -156,6 +156,10 @@ func parseOsRelease(osRelease string) *OS { result.Version = strings.Trim(splitLine[1], "\"") } } + err := result.getPackageManager() + if err != nil { + log.Fatal(err) + } return &result } @@ -230,3 +234,31 @@ func getPlatformInfo() (*OS, error) { return nil, fmt.Errorf("unsupported operating system: %s", runtime.GOOS) } } + +func (os *OS) getPackageManager() error { + switch os.ID { + case "debian", "ubuntu": + os.PackageManager = "apt" + return nil + case "arch": + os.PackageManager = "pacman" + return nil + case "fedora": + os.PackageManager = "dnf" + return nil + default: + pmcommands := []string{ + "apt", + "dnf", + "pacman", + } + for _, pmname := range pmcommands { + _, err := shell.ExecLookPath(pmname) + if err == nil { + os.PackageManager = pmname + return nil + } + } + return fmt.Errorf("no packagemanager found fos os: %s", os.Name) + } +} From 70dbc9e062484df79bb1838218ec9643583aa93e Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Thu, 23 Jan 2025 07:59:26 +0100 Subject: [PATCH 10/29] feat(cli): add aliases to commands --- cmd/cmd.go | 7 ++++--- cmd/install_cmd.go | 7 ++++--- cmd/search_cmd.go | 7 ++++--- cmd/update_command.go | 9 +++++---- config.toml | 3 --- magefile.go | 14 +++----------- 6 files changed, 20 insertions(+), 27 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index c940ea8..7b5a390 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -10,9 +10,10 @@ import ( ) var RootCmd = &cobra.Command{ - Use: "system_setup_tool", - Short: "Installs packages based on TOML configuration", - Run: tui.Run, + Use: "system_setup_tool", + Short: "Installs packages based on TOML configuration", + Version: "0.4.0", + Run: tui.Run, } func init() { diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index be9de12..b12d83f 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -12,9 +12,10 @@ import ( ) var installCmd = &cobra.Command{ - Use: "install [package_name]", - Short: "Install a package with the specified package manager", - Args: cobra.ExactArgs(1), + Use: "install [package_name]", + Short: "Install a package with the specified package manager", + Args: cobra.ExactArgs(1), + Aliases: []string{"i"}, Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index ca92f53..7d1dff3 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -13,9 +13,10 @@ import ( ) var searchCmd = &cobra.Command{ - Use: "search [package_name]", - Short: "Search for a package across package managers (will search in os|flatpak|homebrew)", - Args: cobra.ExactArgs(1), + Use: "search [package_name]", + Short: "Search for a package across package managers (will search in os|flatpak|homebrew)", + Args: cobra.ExactArgs(1), + Aliases: []string{"s"}, Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") diff --git a/cmd/update_command.go b/cmd/update_command.go index 14c0621..79e2d09 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -12,10 +12,11 @@ import ( ) var updateCmd = &cobra.Command{ - Use: "update [package_name]", - Short: "update a package with the specified package manager.", - Long: "update a package with the specified package manager.\nIf no package specified, all packages for the package manager will be updated", - Args: cobra.ExactArgs(1), + Use: "update [package_name]", + Short: "update a package with the specified package manager.", + Long: "update a package with the specified package manager.\nIf no package specified, all packages for the package manager will be updated", + Args: cobra.ExactArgs(1), + Aliases: []string{"u"}, Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") diff --git a/config.toml b/config.toml index 9d94c2c..6dd18cd 100644 --- a/config.toml +++ b/config.toml @@ -101,8 +101,6 @@ packages = [ 'hyprutils', 'kitty', 'mako', - 'SwayNotificationCenter', - 'SwayNotificationCenter-zsh-completion', 'mpv', 'pidgin', 'remmina', @@ -110,7 +108,6 @@ packages = [ 'virt-manager', 'vlc', 'waybar', - 'nwg-panel', 'nwg-look', 'xdg-desktop-portal-hyprland', 'zathura', diff --git a/magefile.go b/magefile.go index eb85b08..b0be26b 100644 --- a/magefile.go +++ b/magefile.go @@ -16,9 +16,8 @@ import ( // A build step that requires additional params, or platform specific steps for example func Build() error { - mg.Deps(InstallDeps) fmt.Println("Building...") - cmd := exec.Command("go", "build", "-o", "system_setup_tool", ".") + cmd := exec.Command("go", "build", "-o", "sst", ".") return cmd.Run() } @@ -26,20 +25,13 @@ func Build() error { func Install() error { mg.Deps(Build) fmt.Println("Installing...") - return os.Rename("./system_setup_tool", "/usr/bin/system_setup_tool") -} - -// Manage your deps, or running package managers. -func InstallDeps() error { - fmt.Println("Installing Deps...") - cmd := exec.Command("go", "get", "github.com/stretchr/piglatin") - return cmd.Run() + return os.Rename("./sst", "~/.local/bin/sst") } // Clean up after yourself func Clean() { fmt.Println("Cleaning...") - os.RemoveAll("MyApp") + os.RemoveAll("system_setup_tool") } // Use gofmt to format your code From f8abf29594a677ebc82016cbad03400edb9be72c Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 24 Jan 2025 08:10:09 +0100 Subject: [PATCH 11/29] feat(config): add creation of default config if no config exists --- cmd/cmd.go | 65 +++++++++++++++++++++++++++-- config.toml | 115 ---------------------------------------------------- 2 files changed, 62 insertions(+), 118 deletions(-) delete mode 100644 config.toml diff --git a/cmd/cmd.go b/cmd/cmd.go index 7b5a390..3218b50 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -2,7 +2,9 @@ package cmd import ( "fmt" + "log" "os" + "path/filepath" "system_setup_tool/tui" "github.com/spf13/cobra" @@ -51,11 +53,68 @@ func initConfig() { } else { viper.SetConfigName("config") viper.SetConfigType("toml") - viper.AddConfigPath(".") + dirname, err := os.UserConfigDir() + if err != nil { + log.Println("cant obtain config dir") + } else { + viper.AddConfigPath(filepath.Join(dirname, "sst")) + } } if err := viper.ReadInConfig(); err != nil { - fmt.Println("Error reading configuration file:", err) - os.Exit(1) + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + fmt.Println("no config file found, creating a new one...") + if err := createDefaultConfig(); err != nil { + log.Printf("error creating default config: %v\n", err) + os.Exit(1) + } + } else { + log.Printf("error reading config file: %v\n", err) + os.Exit(1) + } } } + +func createDefaultConfig() error { + v := viper.New() + + v.SetDefault("config", "") + v.SetDefault("headless", true) + + v.SetDefault("dotfiles.enable", false) + v.SetDefault("dotfiles.git_repo", "") + + v.SetDefault("package_managers.cargo.enable", false) + v.SetDefault("package_managers.cargo.packages", []string{}) + + v.SetDefault("package_managers.flatpak.enable", false) + v.SetDefault("package_managers.flatpak.packages", []string{}) + + v.SetDefault("package_managers.go.enable", false) + v.SetDefault("package_managers.go.packages", []string{}) + + v.SetDefault("package_managers.homebrew.enable", false) + v.SetDefault("package_managers.homebrew.packages", []string{}) + + v.SetDefault("package_managers.pipx.enable", false) + v.SetDefault("package_managers.pipx.packages", []string{}) + + v.SetDefault("package_managers.os.enable", true) + v.SetDefault("package_managers.os.packages", []string{}) + + configDir := filepath.Join(os.Getenv("HOME"), ".config", "sst") + if err := os.MkdirAll(configDir, 0755); err != nil { + return fmt.Errorf("error creating config dir: %w", err) + } + + configPath := filepath.Join(configDir, "config.toml") + v.SetConfigFile(configPath) + v.SetConfigType("toml") + + if err := v.WriteConfig(); err != nil { + return fmt.Errorf("error writing default config: %w", err) + } + + fmt.Println("default config created:", configPath) + return nil +} diff --git a/config.toml b/config.toml deleted file mode 100644 index 6dd18cd..0000000 --- a/config.toml +++ /dev/null @@ -1,115 +0,0 @@ -config = '' -headless = true - -[dotfiles] -enable = false -git_repo = 'https://codeberg.org/Pata1704/dotfiles.git' - -[package_managers] -[package_managers.cargo] -enable = true -packages = ['typst-cli'] - -[package_managers.flatpak] -enable = true -packages = [ - 'com.spotify.Client', - 'us.zoom.Zoom', - 'org.zotero.Zotero', - 'com.google.AndroidStudio', - 'io.freetubeapp.FreeTube', - 'com.discordapp.Discord', - 'com.nextcloud.desktopclient.nextcloud', - 'com.github.tchx84.Flatseal', - 'io.github.flattool.Warehouse', - 'org.onlyoffice.desktopeditors', -] - -[package_managers.go] -enable = true -packages = [ - 'github.com/stefanlogue/meteor', - 'golang.org/x/tools/gopls', - 'github.com/go-delve/delve/cmd/dlv', - 'github.com/air-verse/air', -] - -[package_managers.homebrew] -enable = true -packages = [ - 'oh-my-posh', - 'fd', - 'fzf', - 'ripgrep', - 'neovim', - 'helix', - 'node', - 'yazi', - 'zk', - 'bat', - 'bottom', - 'btop', - 'git-cliff', - 'glow', - 'lazygit', - 'goreleaser', - 'harlequin', - 'mage', - 'posting', - 'typst', - 'wails', - 'zoxide', - 'lsd', - 'jq', - 'yq', - 'timewarrior', - 'tmux', - 'fastfetch', - 'stow', - 'distrobox', -] - -[package_managers.pipx] -enable = true -packages = ['euporie'] - -[package_managers.os] -enable = true -packages = [ - 'git', - 'curl', - 'wget', - 'biber', - 'bear', - 'docker', - 'docker-compose', - 'zsh', - 'npm', - 'task', - 'tree-sitter-cli', - 'python3-pip', - 'latexmk', - 'luarocks', - 'flameshot', - 'fuzzel', - 'hyprcursor', - 'hypridle', - 'hyprland', - 'hyprland-qtutils', - 'hyprlock', - 'hyprpaper', - 'hyprutils', - 'kitty', - 'mako', - 'mpv', - 'pidgin', - 'remmina', - 'thunderbird-i18n-de', - 'virt-manager', - 'vlc', - 'waybar', - 'nwg-look', - 'xdg-desktop-portal-hyprland', - 'zathura', - 'zathura-pdf-mupdf', -] From 8ed3b0c01302889a6e6c37aed6c8708e0562f948 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 24 Jan 2025 09:24:59 +0100 Subject: [PATCH 12/29] feat(cli): add history command and logging for actions --- changelog.md | 13 +++++++++++++ cmd/cmd.go | 17 +++++++++++++++-- cmd/history_cmd.go | 28 ++++++++++++++++++++++++++++ cmd/install_cmd.go | 3 +++ cmd/package_commands.go | 10 ++++++++++ cmd/remove_cmd.go | 3 +++ cmd/search_cmd.go | 4 ++++ cmd/update_command.go | 8 ++++++++ utils/utils.go | 28 ++++++++++++++++++++++++++-- 9 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 cmd/history_cmd.go diff --git a/changelog.md b/changelog.md index b7242bf..a5ec126 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. +## [unreleased] + +### 🚀 Features + +- *(cli)* Add concurrent execution of search and update to improve performance +- *(cli)* Add aliases to commands +- *(config)* Add creation of default config if no config exists + +### 🐛 Bug Fixes + +- *(packagemanager)* Reimplement getPackagemanager to enable installing buildtools on linux + ## [0.4.0] - 2025-01-20 ### 🚀 Features @@ -16,6 +28,7 @@ All notable changes to this project will be documented in this file. ### 📚 Documentation +- Update changelog.md - Update changelog.md ## [0.3.1] - 2025-01-19 diff --git a/cmd/cmd.go b/cmd/cmd.go index 3218b50..1c2e2c9 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -43,8 +43,21 @@ func init() { updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)") - packageCmd.AddCommand(addCmd, deleteCmd, showCmd, enableCmd) - RootCmd.AddCommand(packageCmd, searchCmd, installCmd, removeCmd, updateCmd, updateAllCmd) + packageCmd.AddCommand( + addCmd, + deleteCmd, + showCmd, + enableCmd, + ) + RootCmd.AddCommand( + packageCmd, + searchCmd, + installCmd, + removeCmd, + updateCmd, + updateAllCmd, + historyCmd, + ) } func initConfig() { diff --git a/cmd/history_cmd.go b/cmd/history_cmd.go new file mode 100644 index 0000000..f6b198c --- /dev/null +++ b/cmd/history_cmd.go @@ -0,0 +1,28 @@ +package cmd + +import ( + "fmt" + "log" + "os" + "path/filepath" + + "github.com/spf13/cobra" +) + +var historyCmd = &cobra.Command{ + Use: "history", + Short: "Zeigt die Befehlshistorie an", + Run: func(cmd *cobra.Command, args []string) { + dirname, err := os.UserConfigDir() + if err != nil { + log.Printf("error getting user config dir: %v\n", err) + } + historyFile := filepath.Join(dirname, "sst", "sst_history") + content, err := os.ReadFile(historyFile) + if err != nil { + fmt.Println("error reading history: ", err) + return + } + fmt.Println(string(content)) + }, +} diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index b12d83f..7e4c7a7 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -51,5 +51,8 @@ var installCmd = &cobra.Command{ if err := manager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } + if err := utils.LogToHistory("installed", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/package_commands.go b/cmd/package_commands.go index d3b50f5..74aec53 100644 --- a/cmd/package_commands.go +++ b/cmd/package_commands.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "sort" + "system_setup_tool/utils" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -58,6 +59,9 @@ var addCmd = &cobra.Command{ } fmt.Printf("Package %s has been added to the configuration for %s\n", name, manager) + if err := utils.LogToHistory("added", name, manager); err != nil { + fmt.Println("error logging action:", err) + } }, } @@ -120,6 +124,9 @@ var deleteCmd = &cobra.Command{ } fmt.Printf("Package %s was not found in the configuration for %s\n", name, manager) + if err := utils.LogToHistory("removed", name, manager); err != nil { + fmt.Println("error logging action:", err) + } } }, } @@ -187,5 +194,8 @@ var enableCmd = &cobra.Command{ } fmt.Printf("Package manager %s has been %s\n", manager, map[bool]string{true: "enabled", false: "disabled"}[enable]) + if err := utils.LogToHistory("enabled", "", manager); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 30b80f2..36c4bff 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -50,5 +50,8 @@ var removeCmd = &cobra.Command{ if err := manager.RemovePackage(packageName); err != nil { log.Printf("error: %v\n", err) } + if err := utils.LogToHistory("removed", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 7d1dff3..3b9c28e 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -8,6 +8,7 @@ import ( "sync" pm "system_setup_tool/packagemanager" + "system_setup_tool/utils" "github.com/spf13/cobra" ) @@ -108,5 +109,8 @@ func searchConcurrently(managers []pm.PackageManager, packageName string) { fmt.Printf("Results from %s:\n", result.manager.Name()) displayResults(result.results, result.manager.Name()) fmt.Println() + if err := utils.LogToHistory("searched", packageName, result.manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } } } diff --git a/cmd/update_command.go b/cmd/update_command.go index 79e2d09..6f5ca15 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -53,10 +53,18 @@ var updateCmd = &cobra.Command{ if packageName != "" { if err := manager.UpdatePackage(packageName); err != nil { log.Printf("error: %v\n", err) + } else { + if err := utils.LogToHistory("updated", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } } } else { if err := manager.UpdateAllPackages(); err != nil { log.Printf("error: %v\n", err) + } else { + if err := utils.LogToHistory("updated", "all", "all"); err != nil { + fmt.Println("error logging action:", err) + } } } }, diff --git a/utils/utils.go b/utils/utils.go index 9024846..a3679f8 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -2,6 +2,9 @@ package utils import ( "fmt" + "os" + "path/filepath" + "time" "github.com/charmbracelet/huh" ) @@ -11,7 +14,7 @@ func GetSudoPassword() (string, error) { form := huh.NewForm( huh.NewGroup( huh.NewInput(). - Title("Bitte geben Sie Ihr sudo-Passwort ein"). + Title("Enter your password"). EchoMode(huh.EchoModePassword). Value(&password), ), @@ -19,7 +22,7 @@ func GetSudoPassword() (string, error) { err := form.Run() if err != nil { - return "", fmt.Errorf("fehler bei der Passwortabfrage: %v", err) + return "", fmt.Errorf("error at password-dialog: %v", err) } return password, nil } @@ -30,3 +33,24 @@ func max(a, b int) int { } return b } + +func LogToHistory(action, pkg, manager string) error { + dirname, err := os.UserConfigDir() + if err != nil { + return fmt.Errorf("cant obtain config dir: %v", err) + } + historyFile := filepath.Join(dirname, "sst", "sst_history") + f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer f.Close() + + timestamp := time.Now().Format("2006-01-02 15:04:05") + logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager) + + if _, err := f.WriteString(logEntry); err != nil { + return err + } + return nil +} From 7d4a54b34ccad17f906211362676b26ee0e723f5 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 24 Jan 2025 10:11:32 +0100 Subject: [PATCH 13/29] feat(cli): add max history length --- cmd/history_cmd.go | 3 ++- utils/utils.go | 60 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/cmd/history_cmd.go b/cmd/history_cmd.go index f6b198c..2b1fedb 100644 --- a/cmd/history_cmd.go +++ b/cmd/history_cmd.go @@ -11,7 +11,8 @@ import ( var historyCmd = &cobra.Command{ Use: "history", - Short: "Zeigt die Befehlshistorie an", + Short: "show command history", + Long: "Shows history of the last 2000 commands", Run: func(cmd *cobra.Command, args []string) { dirname, err := os.UserConfigDir() if err != nil { diff --git a/utils/utils.go b/utils/utils.go index a3679f8..59c7fba 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "time" "github.com/charmbracelet/huh" @@ -34,23 +35,68 @@ func max(a, b int) int { return b } +const ( + maxHistoryLines = 2000 + historyFileName = "sst_history" +) + +// func LogToHistory(action, pkg, manager string) error { +// dirname, err := os.UserConfigDir() +// if err != nil { +// return fmt.Errorf("cant obtain config dir: %v", err) +// } +// historyFile := filepath.Join(dirname, "sst", "sst_history") +// f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) +// if err != nil { +// return err +// } +// defer f.Close() + +// timestamp := time.Now().Format("2006-01-02 15:04:05") +// logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager) + +// if _, err := f.WriteString(logEntry); err != nil { +// return err +// } +// return nil +// } +// + func LogToHistory(action, pkg, manager string) error { dirname, err := os.UserConfigDir() if err != nil { return fmt.Errorf("cant obtain config dir: %v", err) } - historyFile := filepath.Join(dirname, "sst", "sst_history") - f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + historyFile := filepath.Join(dirname, "sst", historyFileName) + + lines, err := readHistoryLines(historyFile) if err != nil { return err } - defer f.Close() timestamp := time.Now().Format("2006-01-02 15:04:05") - logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager) + newLine := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]", timestamp, action, pkg, manager) + lines = append(lines, newLine) - if _, err := f.WriteString(logEntry); err != nil { - return err + if len(lines) > maxHistoryLines { + lines = lines[len(lines)-maxHistoryLines:] } - return nil + + return writeHistoryLines(historyFile, lines) +} + +func readHistoryLines(filePath string) ([]string, error) { + content, err := os.ReadFile(filePath) + if err != nil { + if os.IsNotExist(err) { + return []string{}, nil + } + return nil, err + } + return strings.Split(string(content), "\n"), nil +} + +func writeHistoryLines(filePath string, lines []string) error { + content := strings.Join(lines, "\n") + return os.WriteFile(filePath, []byte(content), 0644) } From b18b7761fce146b5a8db3bf3b138f37b82f2f365 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 24 Jan 2025 10:24:48 +0100 Subject: [PATCH 14/29] refactor(cli): perform code clean up --- utils/utils.go | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index 59c7fba..33d87e5 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -40,28 +40,6 @@ const ( historyFileName = "sst_history" ) -// func LogToHistory(action, pkg, manager string) error { -// dirname, err := os.UserConfigDir() -// if err != nil { -// return fmt.Errorf("cant obtain config dir: %v", err) -// } -// historyFile := filepath.Join(dirname, "sst", "sst_history") -// f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) -// if err != nil { -// return err -// } -// defer f.Close() - -// timestamp := time.Now().Format("2006-01-02 15:04:05") -// logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager) - -// if _, err := f.WriteString(logEntry); err != nil { -// return err -// } -// return nil -// } -// - func LogToHistory(action, pkg, manager string) error { dirname, err := os.UserConfigDir() if err != nil { @@ -75,8 +53,8 @@ func LogToHistory(action, pkg, manager string) error { } timestamp := time.Now().Format("2006-01-02 15:04:05") - newLine := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]", timestamp, action, pkg, manager) - lines = append(lines, newLine) + logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]", timestamp, action, pkg, manager) + lines = append(lines, logEntry) if len(lines) > maxHistoryLines { lines = lines[len(lines)-maxHistoryLines:] From 3519efeccc99c6fbe2bd103359dda3be821d761f Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 24 Jan 2025 10:28:04 +0100 Subject: [PATCH 15/29] update Changelog.md --- changelog.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index a5ec126..a64bd84 100644 --- a/changelog.md +++ b/changelog.md @@ -2,18 +2,24 @@ All notable changes to this project will be documented in this file. -## [unreleased] +## [0.5.0] - 2025-01-24 ### 🚀 Features - *(cli)* Add concurrent execution of search and update to improve performance - *(cli)* Add aliases to commands - *(config)* Add creation of default config if no config exists +- *(cli)* Add history command and logging for actions +- *(cli)* Add max history length ### 🐛 Bug Fixes - *(packagemanager)* Reimplement getPackagemanager to enable installing buildtools on linux +### 🚜 Refactor + +- *(cli)* Perform code clean up + ## [0.4.0] - 2025-01-20 ### 🚀 Features From 11b8541630458937021a2884e794d94c9572e841 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 31 Jan 2025 17:56:02 +0100 Subject: [PATCH 16/29] feat(cli): add check command --- cmd/check_cmd.go | 49 ++++++++++++++++++++++++++++++++ cmd/cmd.go | 3 ++ packagemanager/apt.go | 5 ++++ packagemanager/cargo.go | 11 +++++++ packagemanager/choco.go | 5 ++++ packagemanager/dnf.go | 5 ++++ packagemanager/flatpak.go | 5 ++++ packagemanager/golang.go | 11 +++++++ packagemanager/homebrew.go | 5 ++++ packagemanager/os.go | 4 +++ packagemanager/packagemanager.go | 1 + packagemanager/pacman.go | 5 ++++ packagemanager/pipx.go | 10 ++++++- packagemanager/winget.go | 5 ++++ 14 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 cmd/check_cmd.go diff --git a/cmd/check_cmd.go b/cmd/check_cmd.go new file mode 100644 index 0000000..aab0f87 --- /dev/null +++ b/cmd/check_cmd.go @@ -0,0 +1,49 @@ +package cmd + +import ( + "fmt" + "log" + + pm "system_setup_tool/packagemanager" + "system_setup_tool/utils" + + "github.com/spf13/cobra" +) + +var checkCmd = &cobra.Command{ + Use: "check [package-name]", + Short: "Check if the specified package is installed", + Args: cobra.ExactArgs(1), + Aliases: []string{"c"}, + Run: func(cmd *cobra.Command, args []string) { + packageName := args[0] + managerName, _ := cmd.Flags().GetString("manager") + var manager pm.PackageManager + if managerName == "os" { + managerName = "OS Package Manager" + } else if managerName == "brew" { + managerName = "homebrew" + } + switch managerName { + case "OS Package Manager": + manager = pm.NewOSManager("") + case "homebrew": + manager = &pm.HomebrewManager{} + case "cargo": + manager = &pm.CargoManager{} + case "pipx": + manager = &pm.PipxManager{} + case "flatpak": + manager = &pm.FlatpakManager{} + default: + fmt.Println("No PackageManager found") + } + if err := manager.Check(packageName); err != nil { + log.Printf("error: %v\n", err) + } + fmt.Printf("Package: %s installed\n", packageName) + if err := utils.LogToHistory("checked", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } + }, +} diff --git a/cmd/cmd.go b/cmd/cmd.go index 1c2e2c9..52b2f40 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -43,6 +43,8 @@ func init() { updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)") + checkCmd.Flags().StringP("manager", "m", "os", "The package manager you want to check for a packages with. (Options: os|homebrew|pipx|flatpak)") + packageCmd.AddCommand( addCmd, deleteCmd, @@ -57,6 +59,7 @@ func init() { updateCmd, updateAllCmd, historyCmd, + checkCmd, ) } diff --git a/packagemanager/apt.go b/packagemanager/apt.go index dd63647..67df45b 100644 --- a/packagemanager/apt.go +++ b/packagemanager/apt.go @@ -74,3 +74,8 @@ func (a *AptManager) UpdateAllPackages() error { command.Stdin = strings.NewReader(a.SudoPassword + "\n") return command.Run() } + +func (a *AptManager) Check(pkg string) error { + cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("dpkg -l | grep %s", pkg)) + return cmd.Run() +} diff --git a/packagemanager/cargo.go b/packagemanager/cargo.go index d99a0f5..fe63d6e 100644 --- a/packagemanager/cargo.go +++ b/packagemanager/cargo.go @@ -2,6 +2,8 @@ package packagemanager import ( "fmt" + "os" + "path/filepath" "system_setup_tool/internal/shell" ) @@ -56,3 +58,12 @@ func (c *CargoManager) UpdatePackage(pkg string) error { func (c *CargoManager) UpdateAllPackages() error { return fmt.Errorf("update not supported") } + +func (c *CargoManager) Check(pkg string) error { + home, err := os.UserHomeDir() + if err != nil { + return err + } + cmd := shell.ExecCommand("ls", filepath.Join(home, ".cargo", "bin", pkg)) + return cmd.Run() +} diff --git a/packagemanager/choco.go b/packagemanager/choco.go index 71d4c8d..dc38249 100644 --- a/packagemanager/choco.go +++ b/packagemanager/choco.go @@ -64,3 +64,8 @@ func (c *ChocoManager) UpdateAllPackages() error { cmd := shell.ExecCommand("choco", "update") return cmd.Run() } + +func (c *ChocoManager) Check(pkg string) error { + cmd := shell.ExecCommand("choco", "search", "--local-only", pkg) + return cmd.Run() +} diff --git a/packagemanager/dnf.go b/packagemanager/dnf.go index 6c539b2..02be368 100644 --- a/packagemanager/dnf.go +++ b/packagemanager/dnf.go @@ -71,3 +71,8 @@ func (d *DnfManager) UpdateAllPackages() error { command.Stdin = strings.NewReader(d.SudoPassword + "\n") return command.Run() } + +func (d *DnfManager) Check(pkg string) error { + cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("dnf list installed | grep %s", pkg)) + return cmd.Run() +} diff --git a/packagemanager/flatpak.go b/packagemanager/flatpak.go index 2f4a72b..bfca427 100644 --- a/packagemanager/flatpak.go +++ b/packagemanager/flatpak.go @@ -126,3 +126,8 @@ func (f *FlatpakManager) UpdateAllPackages() error { cmd := shell.ExecCommand("flatpak", "update", "-y") return cmd.Run() } + +func (f *FlatpakManager) Check(pkg string) error { + cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("flatpak list | grep %s", pkg)) + return cmd.Run() +} diff --git a/packagemanager/golang.go b/packagemanager/golang.go index 87d779f..cfd25ab 100644 --- a/packagemanager/golang.go +++ b/packagemanager/golang.go @@ -2,6 +2,8 @@ package packagemanager import ( "fmt" + "os" + "path/filepath" "system_setup_tool/internal/shell" ) @@ -56,3 +58,12 @@ func (g *GolangManager) UpdatePackage(pkg string) error { func (g *GolangManager) UpdateAllPackages() error { return fmt.Errorf("update not supported") } + +func (g *GolangManager) Check(pkg string) error { + home, err := os.UserHomeDir() + if err != nil { + fmt.Printf("error: %v\n", err) + } + cmd := shell.ExecCommand("ls", filepath.Join(home, "go", "bin", pkg)) + return cmd.Run() +} diff --git a/packagemanager/homebrew.go b/packagemanager/homebrew.go index af72153..2cf3258 100644 --- a/packagemanager/homebrew.go +++ b/packagemanager/homebrew.go @@ -69,3 +69,8 @@ func (h *HomebrewManager) UpdateAllPackages() error { cmd := shell.ExecCommand("brew", "upgrade") return cmd.Run() } + +func (h *HomebrewManager) Check(pkg string) error { + cmd := shell.ExecCommand("brew", "list", pkg) + return cmd.Run() +} diff --git a/packagemanager/os.go b/packagemanager/os.go index 703e887..a1d6dff 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -127,6 +127,10 @@ func (o *OSManager) UpdateAllPackages() error { return o.pm.UpdateAllPackages() } +func (o *OSManager) Check(pkg string) error { + return o.pm.Check(pkg) +} + type OS struct { ID string Name string diff --git a/packagemanager/packagemanager.go b/packagemanager/packagemanager.go index 8350beb..55e5236 100644 --- a/packagemanager/packagemanager.go +++ b/packagemanager/packagemanager.go @@ -2,6 +2,7 @@ package packagemanager type PackageManager interface { Install(packages []string) error + Check(pkg string) error InstallPackage(pkg string) error InstallManager() error RemovePackage(pkg string) error diff --git a/packagemanager/pacman.go b/packagemanager/pacman.go index 94f018b..05cad0f 100644 --- a/packagemanager/pacman.go +++ b/packagemanager/pacman.go @@ -74,3 +74,8 @@ func (p *PacmanManager) UpdateAllPackages() error { command.Stdin = strings.NewReader(p.SudoPassword + "\n") return command.Run() } + +func (p *PacmanManager) Check(pkg string) error { + cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("paxman -Q | grep %s", pkg)) + return cmd.Run() +} diff --git a/packagemanager/pipx.go b/packagemanager/pipx.go index c8711ec..81d3c90 100644 --- a/packagemanager/pipx.go +++ b/packagemanager/pipx.go @@ -1,6 +1,9 @@ package packagemanager -import "system_setup_tool/internal/shell" +import ( + "fmt" + "system_setup_tool/internal/shell" +) type PipxManager struct{} @@ -56,3 +59,8 @@ func (p *PipxManager) UpdateAllPackages() error { cmd := shell.ExecCommand("pipx", "upgrade-all") return cmd.Run() } + +func (p *PipxManager) Check(pkg string) error { + cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("pipx list | grep %s", pkg)) + return cmd.Run() +} diff --git a/packagemanager/winget.go b/packagemanager/winget.go index 2d5d14b..bdfabad 100644 --- a/packagemanager/winget.go +++ b/packagemanager/winget.go @@ -64,3 +64,8 @@ func (w *WingetManager) UpdateAllPackages() error { cmd := shell.ExecCommand("winget", "update") return cmd.Run() } + +func (w *WingetManager) Check(pkg string) error { + cmd := shell.ExecCommand("wiget", "show", pkg) + return cmd.Run() +} From e49138fdd263c5857455661857e09479e85b4c53 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Tue, 4 Feb 2025 16:11:03 +0100 Subject: [PATCH 17/29] refactor(packagemanager,cli,tui): move packages in specific subfolders --- cmd/check_cmd.go | 4 ++-- cmd/cmd.go | 2 +- cmd/install_cmd.go | 4 ++-- cmd/package_commands.go | 2 +- cmd/remove_cmd.go | 4 ++-- cmd/search_cmd.go | 4 ++-- cmd/update_command.go | 4 ++-- {config => internal/config}/config.go | 4 ++-- {dotfiles => internal/dotfiles}/dotfiles.go | 0 {tui => internal/tui}/tui.go | 8 ++++---- {utils => internal/utils}/utils.go | 0 {utils => internal/utils}/utils_test.go | 0 {packagemanager => pkg/packagemanager}/apt.go | 0 {packagemanager => pkg/packagemanager}/cargo.go | 0 {packagemanager => pkg/packagemanager}/cargo_test.go | 0 {packagemanager => pkg/packagemanager}/choco.go | 0 {packagemanager => pkg/packagemanager}/dnf.go | 0 {packagemanager => pkg/packagemanager}/flatpak.go | 0 {packagemanager => pkg/packagemanager}/flatpak_test.go | 0 {packagemanager => pkg/packagemanager}/golang.go | 0 {packagemanager => pkg/packagemanager}/golang_test.go | 0 {packagemanager => pkg/packagemanager}/homebrew.go | 0 {packagemanager => pkg/packagemanager}/homebrew_test.go | 0 {packagemanager => pkg/packagemanager}/os.go | 0 {packagemanager => pkg/packagemanager}/os_test.go | 0 {packagemanager => pkg/packagemanager}/package.go | 0 {packagemanager => pkg/packagemanager}/packagemanager.go | 0 {packagemanager => pkg/packagemanager}/pacman.go | 0 {packagemanager => pkg/packagemanager}/pipx.go | 0 {packagemanager => pkg/packagemanager}/pipx_test.go | 0 {packagemanager => pkg/packagemanager}/utils.go | 0 {packagemanager => pkg/packagemanager}/win.go | 0 {packagemanager => pkg/packagemanager}/win_dummy.go | 0 {packagemanager => pkg/packagemanager}/winget.go | 0 34 files changed, 18 insertions(+), 18 deletions(-) rename {config => internal/config}/config.go (85%) rename {dotfiles => internal/dotfiles}/dotfiles.go (100%) rename {tui => internal/tui}/tui.go (94%) rename {utils => internal/utils}/utils.go (100%) rename {utils => internal/utils}/utils_test.go (100%) rename {packagemanager => pkg/packagemanager}/apt.go (100%) rename {packagemanager => pkg/packagemanager}/cargo.go (100%) rename {packagemanager => pkg/packagemanager}/cargo_test.go (100%) rename {packagemanager => pkg/packagemanager}/choco.go (100%) rename {packagemanager => pkg/packagemanager}/dnf.go (100%) rename {packagemanager => pkg/packagemanager}/flatpak.go (100%) rename {packagemanager => pkg/packagemanager}/flatpak_test.go (100%) rename {packagemanager => pkg/packagemanager}/golang.go (100%) rename {packagemanager => pkg/packagemanager}/golang_test.go (100%) rename {packagemanager => pkg/packagemanager}/homebrew.go (100%) rename {packagemanager => pkg/packagemanager}/homebrew_test.go (100%) rename {packagemanager => pkg/packagemanager}/os.go (100%) rename {packagemanager => pkg/packagemanager}/os_test.go (100%) rename {packagemanager => pkg/packagemanager}/package.go (100%) rename {packagemanager => pkg/packagemanager}/packagemanager.go (100%) rename {packagemanager => pkg/packagemanager}/pacman.go (100%) rename {packagemanager => pkg/packagemanager}/pipx.go (100%) rename {packagemanager => pkg/packagemanager}/pipx_test.go (100%) rename {packagemanager => pkg/packagemanager}/utils.go (100%) rename {packagemanager => pkg/packagemanager}/win.go (100%) rename {packagemanager => pkg/packagemanager}/win_dummy.go (100%) rename {packagemanager => pkg/packagemanager}/winget.go (100%) diff --git a/cmd/check_cmd.go b/cmd/check_cmd.go index aab0f87..d31efcd 100644 --- a/cmd/check_cmd.go +++ b/cmd/check_cmd.go @@ -4,8 +4,8 @@ import ( "fmt" "log" - pm "system_setup_tool/packagemanager" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" + pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/cmd.go b/cmd/cmd.go index 52b2f40..3fda9ce 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -5,7 +5,7 @@ import ( "log" "os" "path/filepath" - "system_setup_tool/tui" + "system_setup_tool/internal/tui" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index 7e4c7a7..73d179c 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -4,9 +4,9 @@ import ( "fmt" "log" "runtime" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" - pm "system_setup_tool/packagemanager" + pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/package_commands.go b/cmd/package_commands.go index 74aec53..d0f1da4 100644 --- a/cmd/package_commands.go +++ b/cmd/package_commands.go @@ -4,7 +4,7 @@ import ( "fmt" "os" "sort" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 36c4bff..00af703 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -4,9 +4,9 @@ import ( "fmt" "log" "runtime" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" - pm "system_setup_tool/packagemanager" + pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 3b9c28e..d076c94 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -7,8 +7,8 @@ import ( "strings" "sync" - pm "system_setup_tool/packagemanager" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" + pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/update_command.go b/cmd/update_command.go index 6f5ca15..1731c8c 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -5,8 +5,8 @@ import ( "log" "runtime" "sync" - pm "system_setup_tool/packagemanager" - "system_setup_tool/utils" + "system_setup_tool/internal/utils" + pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/config/config.go b/internal/config/config.go similarity index 85% rename from config/config.go rename to internal/config/config.go index fddb47a..9a8eb7e 100644 --- a/config/config.go +++ b/internal/config/config.go @@ -1,8 +1,8 @@ package config import ( - "system_setup_tool/dotfiles" - pm "system_setup_tool/packagemanager" + "system_setup_tool/internal/dotfiles" + pm "system_setup_tool/pkg/packagemanager" ) type PackageManagerConfig struct { diff --git a/dotfiles/dotfiles.go b/internal/dotfiles/dotfiles.go similarity index 100% rename from dotfiles/dotfiles.go rename to internal/dotfiles/dotfiles.go diff --git a/tui/tui.go b/internal/tui/tui.go similarity index 94% rename from tui/tui.go rename to internal/tui/tui.go index a51004e..a387915 100644 --- a/tui/tui.go +++ b/internal/tui/tui.go @@ -3,11 +3,11 @@ package tui import ( "fmt" "log" - "system_setup_tool/config" - "system_setup_tool/dotfiles" - "system_setup_tool/utils" + "system_setup_tool/internal/config" + "system_setup_tool/internal/dotfiles" + "system_setup_tool/internal/utils" - pm "system_setup_tool/packagemanager" + pm "system_setup_tool/pkg/packagemanager" "github.com/charmbracelet/huh" "github.com/mitchellh/mapstructure" diff --git a/utils/utils.go b/internal/utils/utils.go similarity index 100% rename from utils/utils.go rename to internal/utils/utils.go diff --git a/utils/utils_test.go b/internal/utils/utils_test.go similarity index 100% rename from utils/utils_test.go rename to internal/utils/utils_test.go diff --git a/packagemanager/apt.go b/pkg/packagemanager/apt.go similarity index 100% rename from packagemanager/apt.go rename to pkg/packagemanager/apt.go diff --git a/packagemanager/cargo.go b/pkg/packagemanager/cargo.go similarity index 100% rename from packagemanager/cargo.go rename to pkg/packagemanager/cargo.go diff --git a/packagemanager/cargo_test.go b/pkg/packagemanager/cargo_test.go similarity index 100% rename from packagemanager/cargo_test.go rename to pkg/packagemanager/cargo_test.go diff --git a/packagemanager/choco.go b/pkg/packagemanager/choco.go similarity index 100% rename from packagemanager/choco.go rename to pkg/packagemanager/choco.go diff --git a/packagemanager/dnf.go b/pkg/packagemanager/dnf.go similarity index 100% rename from packagemanager/dnf.go rename to pkg/packagemanager/dnf.go diff --git a/packagemanager/flatpak.go b/pkg/packagemanager/flatpak.go similarity index 100% rename from packagemanager/flatpak.go rename to pkg/packagemanager/flatpak.go diff --git a/packagemanager/flatpak_test.go b/pkg/packagemanager/flatpak_test.go similarity index 100% rename from packagemanager/flatpak_test.go rename to pkg/packagemanager/flatpak_test.go diff --git a/packagemanager/golang.go b/pkg/packagemanager/golang.go similarity index 100% rename from packagemanager/golang.go rename to pkg/packagemanager/golang.go diff --git a/packagemanager/golang_test.go b/pkg/packagemanager/golang_test.go similarity index 100% rename from packagemanager/golang_test.go rename to pkg/packagemanager/golang_test.go diff --git a/packagemanager/homebrew.go b/pkg/packagemanager/homebrew.go similarity index 100% rename from packagemanager/homebrew.go rename to pkg/packagemanager/homebrew.go diff --git a/packagemanager/homebrew_test.go b/pkg/packagemanager/homebrew_test.go similarity index 100% rename from packagemanager/homebrew_test.go rename to pkg/packagemanager/homebrew_test.go diff --git a/packagemanager/os.go b/pkg/packagemanager/os.go similarity index 100% rename from packagemanager/os.go rename to pkg/packagemanager/os.go diff --git a/packagemanager/os_test.go b/pkg/packagemanager/os_test.go similarity index 100% rename from packagemanager/os_test.go rename to pkg/packagemanager/os_test.go diff --git a/packagemanager/package.go b/pkg/packagemanager/package.go similarity index 100% rename from packagemanager/package.go rename to pkg/packagemanager/package.go diff --git a/packagemanager/packagemanager.go b/pkg/packagemanager/packagemanager.go similarity index 100% rename from packagemanager/packagemanager.go rename to pkg/packagemanager/packagemanager.go diff --git a/packagemanager/pacman.go b/pkg/packagemanager/pacman.go similarity index 100% rename from packagemanager/pacman.go rename to pkg/packagemanager/pacman.go diff --git a/packagemanager/pipx.go b/pkg/packagemanager/pipx.go similarity index 100% rename from packagemanager/pipx.go rename to pkg/packagemanager/pipx.go diff --git a/packagemanager/pipx_test.go b/pkg/packagemanager/pipx_test.go similarity index 100% rename from packagemanager/pipx_test.go rename to pkg/packagemanager/pipx_test.go diff --git a/packagemanager/utils.go b/pkg/packagemanager/utils.go similarity index 100% rename from packagemanager/utils.go rename to pkg/packagemanager/utils.go diff --git a/packagemanager/win.go b/pkg/packagemanager/win.go similarity index 100% rename from packagemanager/win.go rename to pkg/packagemanager/win.go diff --git a/packagemanager/win_dummy.go b/pkg/packagemanager/win_dummy.go similarity index 100% rename from packagemanager/win_dummy.go rename to pkg/packagemanager/win_dummy.go diff --git a/packagemanager/winget.go b/pkg/packagemanager/winget.go similarity index 100% rename from packagemanager/winget.go rename to pkg/packagemanager/winget.go From 0cc50e15c920f60e4dc808e3a2d3fc06ecf2408a Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Tue, 4 Feb 2025 16:11:55 +0100 Subject: [PATCH 18/29] docs(cli): update version --- cmd/cmd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 3fda9ce..796c07a 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -14,7 +14,7 @@ import ( var RootCmd = &cobra.Command{ Use: "system_setup_tool", Short: "Installs packages based on TOML configuration", - Version: "0.4.0", + Version: "0.6.0-alpha", Run: tui.Run, } From 179e2a6ec3b07e0ab571d5970d0cb77aa4f66d20 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Tue, 4 Feb 2025 16:16:18 +0100 Subject: [PATCH 19/29] chore(docs): prepare release --- changelog.md | 14 ++++++++++++++ cmd/cmd.go | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index a64bd84..ac3aeeb 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. +## [0.6.0] - 2025-02-04 + +### 🚀 Features + +- *(cli)* Add check command + +### 🚜 Refactor + +- *(packagemanager,cli,tui)* Move packages in specific subfolders + +### 📚 Documentation + +- *(cli)* Update version + ## [0.5.0] - 2025-01-24 ### 🚀 Features diff --git a/cmd/cmd.go b/cmd/cmd.go index 796c07a..92de0c4 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -14,7 +14,7 @@ import ( var RootCmd = &cobra.Command{ Use: "system_setup_tool", Short: "Installs packages based on TOML configuration", - Version: "0.6.0-alpha", + Version: "0.6.0", Run: tui.Run, } From 5a923820637425e4eb79f94833f38bc374e6be31 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Tue, 4 Feb 2025 16:23:38 +0100 Subject: [PATCH 20/29] chore(go.mod): update module name --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 396303f..95204c9 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module system_setup_tool +module codeberg.org/Pata1704/system_setup_tool go 1.23.4 From 594d7e48f5f9356cf7e763ba1f76fe78196bf953 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Tue, 4 Feb 2025 16:31:55 +0100 Subject: [PATCH 21/29] chore: update modul name and imports. --- cmd/check_cmd.go | 4 ++-- cmd/cmd.go | 2 +- cmd/install_cmd.go | 4 ++-- cmd/package_commands.go | 2 +- cmd/remove_cmd.go | 4 ++-- cmd/search_cmd.go | 4 ++-- cmd/update_command.go | 4 ++-- internal/config/config.go | 4 ++-- internal/dotfiles/dotfiles.go | 2 +- internal/tui/tui.go | 8 ++++---- internal/utils/utils_test.go | 2 +- main.go | 2 +- pkg/packagemanager/apt.go | 2 +- pkg/packagemanager/cargo.go | 2 +- pkg/packagemanager/cargo_test.go | 2 +- pkg/packagemanager/choco.go | 2 +- pkg/packagemanager/dnf.go | 2 +- pkg/packagemanager/flatpak.go | 2 +- pkg/packagemanager/flatpak_test.go | 2 +- pkg/packagemanager/golang.go | 2 +- pkg/packagemanager/golang_test.go | 2 +- pkg/packagemanager/homebrew.go | 2 +- pkg/packagemanager/homebrew_test.go | 2 +- pkg/packagemanager/os.go | 2 +- pkg/packagemanager/package.go | 2 +- pkg/packagemanager/pacman.go | 2 +- pkg/packagemanager/pipx.go | 2 +- pkg/packagemanager/pipx_test.go | 2 +- pkg/packagemanager/winget.go | 2 +- 29 files changed, 38 insertions(+), 38 deletions(-) diff --git a/cmd/check_cmd.go b/cmd/check_cmd.go index d31efcd..ef12674 100644 --- a/cmd/check_cmd.go +++ b/cmd/check_cmd.go @@ -4,8 +4,8 @@ import ( "fmt" "log" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/cmd.go b/cmd/cmd.go index 92de0c4..ad7f363 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1,11 +1,11 @@ package cmd import ( + "codeberg.org/Pata1704/system_setup_tool/internal/tui" "fmt" "log" "os" "path/filepath" - "system_setup_tool/internal/tui" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index 73d179c..dddc72d 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -1,12 +1,12 @@ package cmd import ( + "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "log" "runtime" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/package_commands.go b/cmd/package_commands.go index d0f1da4..09c60cb 100644 --- a/cmd/package_commands.go +++ b/cmd/package_commands.go @@ -1,10 +1,10 @@ package cmd import ( + "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "os" "sort" - "system_setup_tool/internal/utils" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 00af703..8db198c 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -1,12 +1,12 @@ package cmd import ( + "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "log" "runtime" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index d076c94..55fe51c 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -7,8 +7,8 @@ import ( "strings" "sync" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/cmd/update_command.go b/cmd/update_command.go index 1731c8c..babd4b1 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -1,12 +1,12 @@ package cmd import ( + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "fmt" "log" "runtime" "sync" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" ) diff --git a/internal/config/config.go b/internal/config/config.go index 9a8eb7e..680de28 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1,8 +1,8 @@ package config import ( - "system_setup_tool/internal/dotfiles" - pm "system_setup_tool/pkg/packagemanager" + "codeberg.org/Pata1704/system_setup_tool/internal/dotfiles" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" ) type PackageManagerConfig struct { diff --git a/internal/dotfiles/dotfiles.go b/internal/dotfiles/dotfiles.go index f6eea51..c5d09f3 100644 --- a/internal/dotfiles/dotfiles.go +++ b/internal/dotfiles/dotfiles.go @@ -1,11 +1,11 @@ package dotfiles import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "os" "path/filepath" - "system_setup_tool/internal/shell" ) type DotfilesConfig struct { diff --git a/internal/tui/tui.go b/internal/tui/tui.go index a387915..df3a39f 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -1,13 +1,13 @@ package tui import ( + "codeberg.org/Pata1704/system_setup_tool/internal/config" + "codeberg.org/Pata1704/system_setup_tool/internal/dotfiles" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "log" - "system_setup_tool/internal/config" - "system_setup_tool/internal/dotfiles" - "system_setup_tool/internal/utils" - pm "system_setup_tool/pkg/packagemanager" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/charmbracelet/huh" "github.com/mitchellh/mapstructure" diff --git a/internal/utils/utils_test.go b/internal/utils/utils_test.go index 243432e..df66fce 100644 --- a/internal/utils/utils_test.go +++ b/internal/utils/utils_test.go @@ -1,8 +1,8 @@ package utils import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/main.go b/main.go index 959f384..8e88cf8 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,9 @@ package main import ( + "codeberg.org/Pata1704/system_setup_tool/cmd" "log" "os" - "system_setup_tool/cmd" ) func main() { diff --git a/pkg/packagemanager/apt.go b/pkg/packagemanager/apt.go index 67df45b..3c748c0 100644 --- a/pkg/packagemanager/apt.go +++ b/pkg/packagemanager/apt.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type AptManager struct { diff --git a/pkg/packagemanager/cargo.go b/pkg/packagemanager/cargo.go index fe63d6e..6ebc89b 100644 --- a/pkg/packagemanager/cargo.go +++ b/pkg/packagemanager/cargo.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "os" "path/filepath" - "system_setup_tool/internal/shell" ) type CargoManager struct{} diff --git a/pkg/packagemanager/cargo_test.go b/pkg/packagemanager/cargo_test.go index ef491de..5cb383c 100644 --- a/pkg/packagemanager/cargo_test.go +++ b/pkg/packagemanager/cargo_test.go @@ -2,8 +2,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/pkg/packagemanager/choco.go b/pkg/packagemanager/choco.go index dc38249..ae286cd 100644 --- a/pkg/packagemanager/choco.go +++ b/pkg/packagemanager/choco.go @@ -1,9 +1,9 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "log" "strings" - "system_setup_tool/internal/shell" ) type ChocoManager struct{} diff --git a/pkg/packagemanager/dnf.go b/pkg/packagemanager/dnf.go index 02be368..526d2fe 100644 --- a/pkg/packagemanager/dnf.go +++ b/pkg/packagemanager/dnf.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type DnfManager struct { diff --git a/pkg/packagemanager/flatpak.go b/pkg/packagemanager/flatpak.go index bfca427..0e38ba4 100644 --- a/pkg/packagemanager/flatpak.go +++ b/pkg/packagemanager/flatpak.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type FlatpakManager struct { diff --git a/pkg/packagemanager/flatpak_test.go b/pkg/packagemanager/flatpak_test.go index 96fad8f..dbf0b98 100644 --- a/pkg/packagemanager/flatpak_test.go +++ b/pkg/packagemanager/flatpak_test.go @@ -1,8 +1,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/pkg/packagemanager/golang.go b/pkg/packagemanager/golang.go index cfd25ab..6bfb4cc 100644 --- a/pkg/packagemanager/golang.go +++ b/pkg/packagemanager/golang.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "os" "path/filepath" - "system_setup_tool/internal/shell" ) type GolangManager struct{} diff --git a/pkg/packagemanager/golang_test.go b/pkg/packagemanager/golang_test.go index 930fe0b..be7a19d 100644 --- a/pkg/packagemanager/golang_test.go +++ b/pkg/packagemanager/golang_test.go @@ -1,8 +1,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/pkg/packagemanager/homebrew.go b/pkg/packagemanager/homebrew.go index 2cf3258..3219ebd 100644 --- a/pkg/packagemanager/homebrew.go +++ b/pkg/packagemanager/homebrew.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type HomebrewManager struct{} diff --git a/pkg/packagemanager/homebrew_test.go b/pkg/packagemanager/homebrew_test.go index 14128f0..983cd8a 100644 --- a/pkg/packagemanager/homebrew_test.go +++ b/pkg/packagemanager/homebrew_test.go @@ -1,8 +1,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/pkg/packagemanager/os.go b/pkg/packagemanager/os.go index a1d6dff..d53f59a 100644 --- a/pkg/packagemanager/os.go +++ b/pkg/packagemanager/os.go @@ -1,12 +1,12 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "os" "runtime" "strings" - "system_setup_tool/internal/shell" ) type OSManager struct { diff --git a/pkg/packagemanager/package.go b/pkg/packagemanager/package.go index ca38da6..f45157e 100644 --- a/pkg/packagemanager/package.go +++ b/pkg/packagemanager/package.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type Packages struct { diff --git a/pkg/packagemanager/pacman.go b/pkg/packagemanager/pacman.go index 05cad0f..12a5211 100644 --- a/pkg/packagemanager/pacman.go +++ b/pkg/packagemanager/pacman.go @@ -1,10 +1,10 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" - "system_setup_tool/internal/shell" ) type PacmanManager struct { diff --git a/pkg/packagemanager/pipx.go b/pkg/packagemanager/pipx.go index 81d3c90..c2fd295 100644 --- a/pkg/packagemanager/pipx.go +++ b/pkg/packagemanager/pipx.go @@ -1,8 +1,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" - "system_setup_tool/internal/shell" ) type PipxManager struct{} diff --git a/pkg/packagemanager/pipx_test.go b/pkg/packagemanager/pipx_test.go index b87fb2c..870cce2 100644 --- a/pkg/packagemanager/pipx_test.go +++ b/pkg/packagemanager/pipx_test.go @@ -1,8 +1,8 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "os/exec" - "system_setup_tool/internal/shell" "testing" ) diff --git a/pkg/packagemanager/winget.go b/pkg/packagemanager/winget.go index bdfabad..777ec83 100644 --- a/pkg/packagemanager/winget.go +++ b/pkg/packagemanager/winget.go @@ -1,9 +1,9 @@ package packagemanager import ( + "codeberg.org/Pata1704/system_setup_tool/internal/shell" "log" "strings" - "system_setup_tool/internal/shell" ) type WingetManager struct{} From 2f5c05bea202799a67cfe363be28ad8f4d6b87e2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Jun 2025 10:48:25 +0000 Subject: [PATCH 22/29] Add renovate.json --- renovate.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..7190a60 --- /dev/null +++ b/renovate.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json" +} From 9c8b19405a5ff8c21f5d53d22819fce0392065a5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Jun 2025 18:03:41 +0000 Subject: [PATCH 23/29] chore(deps): update module github.com/charmbracelet/huh to v0.7.0 --- go.mod | 25 ++++++++++++++----------- go.sum | 28 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 95204c9..b47ca68 100644 --- a/go.mod +++ b/go.mod @@ -3,23 +3,25 @@ module codeberg.org/Pata1704/system_setup_tool go 1.23.4 require ( - github.com/charmbracelet/huh v0.6.0 + github.com/charmbracelet/huh v0.7.0 github.com/magefile/mage v1.15.0 github.com/mitchellh/mapstructure v1.5.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 - golang.org/x/sys v0.29.0 + golang.org/x/sys v0.31.0 ) require ( github.com/atotto/clipboard v0.1.4 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect - github.com/catppuccin/go v0.2.0 // indirect - github.com/charmbracelet/bubbles v0.20.0 // indirect - github.com/charmbracelet/bubbletea v1.2.4 // indirect - github.com/charmbracelet/lipgloss v1.0.0 // indirect - github.com/charmbracelet/x/ansi v0.4.5 // indirect + github.com/catppuccin/go v0.3.0 // indirect + github.com/charmbracelet/bubbles v0.21.0 // indirect + github.com/charmbracelet/bubbletea v1.3.4 // indirect + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/x/ansi v0.8.0 // indirect + github.com/charmbracelet/x/cellbuf v0.0.13 // indirect github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect github.com/charmbracelet/x/term v0.2.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -36,7 +38,7 @@ require ( github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect - github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect + github.com/muesli/termenv v0.16.0 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect @@ -47,12 +49,13 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/sync v0.12.0 // indirect golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.18.0 // indirect + golang.org/x/text v0.23.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 1146891..f5db0f6 100644 --- a/go.sum +++ b/go.sum @@ -6,16 +6,32 @@ github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiE github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/catppuccin/go v0.2.0 h1:ktBeIrIP42b/8FGiScP9sgrWOss3lw0Z5SktRoithGA= github.com/catppuccin/go v0.2.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= +github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY= +github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE= github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU= +github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= +github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE= github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM= +github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI= +github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= github.com/charmbracelet/huh v0.6.0 h1:mZM8VvZGuE0hoDXq6XLxRtgfWyTI3b2jZNKh0xWmax8= github.com/charmbracelet/huh v0.6.0/go.mod h1:GGNKeWCeNzKpEOh/OJD8WBwTQjV3prFAtQPpLv+AVwU= +github.com/charmbracelet/huh v0.7.0 h1:W8S1uyGETgj9Tuda3/JdVkc3x7DBLZYPZc4c+/rnRdc= +github.com/charmbracelet/huh v0.7.0/go.mod h1:UGC3DZHlgOKHvHC07a5vHag41zzhpPFj34U92sOmyuk= github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM= github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= +github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4= github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= @@ -72,6 +88,8 @@ github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELU github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -114,22 +132,32 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From fc2372e0b11f1dbc93eace76dc51196b61bfc1dd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Jun 2025 18:03:54 +0000 Subject: [PATCH 24/29] chore(deps): update module github.com/spf13/cobra to v1.9.1 --- go.mod | 4 ++-- go.sum | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 95204c9..705bc75 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/magefile/mage v1.15.0 github.com/mitchellh/mapstructure v1.5.0 github.com/schollz/progressbar/v3 v3.18.0 - github.com/spf13/cobra v1.8.1 + github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.19.0 golang.org/x/sys v0.29.0 ) @@ -44,7 +44,7 @@ require ( github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/atomic v1.9.0 // indirect diff --git a/go.sum b/go.sum index 1146891..027e013 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,7 @@ github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNE github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -97,8 +98,12 @@ github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= From 3cd218793285b629704f21b42fec98ea27463433 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Jun 2025 20:06:30 +0000 Subject: [PATCH 25/29] chore(deps): update module golang.org/x/sys to v0.33.0 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c16bd04..3081134 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/schollz/progressbar/v3 v3.18.0 github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.19.0 - golang.org/x/sys v0.31.0 + golang.org/x/sys v0.33.0 ) require ( diff --git a/go.sum b/go.sum index c10ffd4..3902b08 100644 --- a/go.sum +++ b/go.sum @@ -157,6 +157,8 @@ golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= From 9597007953548847544be4cddc366c2bf26000a3 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 20 Jun 2025 13:24:09 +0200 Subject: [PATCH 26/29] refactor: replace for loop over slice --- cmd/package_commands.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/package_commands.go b/cmd/package_commands.go index 09c60cb..7c8b44c 100644 --- a/cmd/package_commands.go +++ b/cmd/package_commands.go @@ -4,6 +4,7 @@ import ( "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "os" + "slices" "sort" "github.com/spf13/cobra" @@ -42,11 +43,9 @@ var addCmd = &cobra.Command{ } else { packages := viper.GetStringSlice(fmt.Sprintf("package_managers.%s.packages", manager)) - for _, pkg := range packages { - if pkg == name { - fmt.Printf("Package %s is already present in the configuration for %s\n", name, manager) - return - } + if slices.Contains(packages, name) { + fmt.Printf("Package %s is already present in the configuration for %s\n", name, manager) + return } packages = append(packages, name) From e5ef2f0b88fd65bdd802da7a409b74ee33b12b9c Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Wed, 25 Jun 2025 11:05:01 +0200 Subject: [PATCH 27/29] deps: update dependencies and supported go version --- cmd/cmd.go | 3 +- go.mod | 39 +++++++-------- go.sum | 136 ++++++++++++++++++++--------------------------------- main.go | 3 +- 4 files changed, 71 insertions(+), 110 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index ad7f363..354d440 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1,12 +1,13 @@ package cmd import ( - "codeberg.org/Pata1704/system_setup_tool/internal/tui" "fmt" "log" "os" "path/filepath" + "codeberg.org/Pata1704/system_setup_tool/internal/tui" + "github.com/spf13/cobra" "github.com/spf13/viper" ) diff --git a/go.mod b/go.mod index 3081134..aacf2ca 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module codeberg.org/Pata1704/system_setup_tool -go 1.23.4 +go 1.24.4 require ( github.com/charmbracelet/huh v0.7.0 @@ -8,7 +8,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/spf13/cobra v1.9.1 - github.com/spf13/viper v1.19.0 + github.com/spf13/viper v1.20.1 golang.org/x/sys v0.33.0 ) @@ -17,20 +17,19 @@ require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/catppuccin/go v0.3.0 // indirect github.com/charmbracelet/bubbles v0.21.0 // indirect - github.com/charmbracelet/bubbletea v1.3.4 // indirect - github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect + github.com/charmbracelet/bubbletea v1.3.5 // indirect + github.com/charmbracelet/colorprofile v0.3.1 // indirect github.com/charmbracelet/lipgloss v1.1.0 // indirect - github.com/charmbracelet/x/ansi v0.8.0 // indirect + github.com/charmbracelet/x/ansi v0.9.3 // indirect github.com/charmbracelet/x/cellbuf v0.0.13 // indirect - github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect + github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d // indirect github.com/charmbracelet/x/term v0.2.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/go-viper/mapstructure/v2 v2.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect @@ -39,24 +38,20 @@ require ( github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.16.0 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sagikazarmark/locafero v0.9.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/afero v1.14.0 // indirect + github.com/spf13/cast v1.9.2 // indirect github.com/spf13/pflag v1.0.6 // indirect - github.com/stretchr/testify v1.10.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.23.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect + golang.org/x/sync v0.15.0 // indirect + golang.org/x/term v0.32.0 // indirect + golang.org/x/text v0.26.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect - gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3902b08..44feacc 100644 --- a/go.sum +++ b/go.sum @@ -4,58 +4,57 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/catppuccin/go v0.2.0 h1:ktBeIrIP42b/8FGiScP9sgrWOss3lw0Z5SktRoithGA= -github.com/catppuccin/go v0.2.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= +github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= +github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY= github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= -github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE= -github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU= github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= -github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE= -github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM= -github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI= -github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo= -github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= -github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= -github.com/charmbracelet/huh v0.6.0 h1:mZM8VvZGuE0hoDXq6XLxRtgfWyTI3b2jZNKh0xWmax8= -github.com/charmbracelet/huh v0.6.0/go.mod h1:GGNKeWCeNzKpEOh/OJD8WBwTQjV3prFAtQPpLv+AVwU= +github.com/charmbracelet/bubbletea v1.3.5 h1:JAMNLTbqMOhSwoELIr0qyP4VidFq72/6E9j7HHmRKQc= +github.com/charmbracelet/bubbletea v1.3.5/go.mod h1:TkCnmH+aBd4LrXhXcqrKiYwRs7qyQx5rBgH5fVY3v54= +github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= +github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= github.com/charmbracelet/huh v0.7.0 h1:W8S1uyGETgj9Tuda3/JdVkc3x7DBLZYPZc4c+/rnRdc= github.com/charmbracelet/huh v0.7.0/go.mod h1:UGC3DZHlgOKHvHC07a5vHag41zzhpPFj34U92sOmyuk= -github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= -github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= -github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM= -github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= -github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= -github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0= +github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= -github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4= -github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ= +github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= +github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ= +github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= +github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0= +github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ= +github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= +github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d h1:fEsdno3tFo//l8pS4hlzH5hj6zGSaMzQcbyDLfToeJg= +github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d/go.mod h1:Rgw3/F+xlcUc5XygUtimVSxAqCOsqyvJjqF5UHRvc5k= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= +github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= +github.com/charmbracelet/x/xpty v0.1.2 h1:Pqmu4TEJ8KeA9uSkISKMU3f+C1F6OGBn8ABuGlqCbtI= +github.com/charmbracelet/x/xpty v0.1.2/go.mod h1:XK2Z0id5rtLWcpeNiMYBccNNBrP2IJnzHI0Lq13Xzq4= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= +github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -69,8 +68,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= @@ -87,89 +84,56 @@ github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= -github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= +github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA= github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= +github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= -github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 8e88cf8..0a40171 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,10 @@ package main import ( - "codeberg.org/Pata1704/system_setup_tool/cmd" "log" "os" + + "codeberg.org/Pata1704/system_setup_tool/cmd" ) func main() { From 0a7a1c43d9fe841c76d73381ffe49eaf9ac2a04e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Jul 2025 07:31:51 +0000 Subject: [PATCH 28/29] chore(deps): update module golang.org/x/sys to v0.34.0 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index aacf2ca..f4aa4ad 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/schollz/progressbar/v3 v3.18.0 github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.20.1 - golang.org/x/sys v0.33.0 + golang.org/x/sys v0.34.0 ) require ( diff --git a/go.sum b/go.sum index 44feacc..c799fa9 100644 --- a/go.sum +++ b/go.sum @@ -128,6 +128,8 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= From ea317efaa464a1bf412a38289254adeb7b084a67 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sat, 10 Jan 2026 17:10:38 +0100 Subject: [PATCH 29/29] chore(deps): update dependencies --- cmd/check_cmd.go | 5 ++-- cmd/cmd.go | 12 ++++++---- cmd/install_cmd.go | 8 ++++--- cmd/remove_cmd.go | 8 ++++--- cmd/search_cmd.go | 5 ++-- cmd/update_command.go | 11 +++++---- go.mod | 52 +++++++++++++++++++++------------------- go.sum | 56 +++++++++++++++++++++++++++++++++++++++++-- 8 files changed, 112 insertions(+), 45 deletions(-) diff --git a/cmd/check_cmd.go b/cmd/check_cmd.go index ef12674..1c91319 100644 --- a/cmd/check_cmd.go +++ b/cmd/check_cmd.go @@ -19,9 +19,10 @@ var checkCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager - if managerName == "os" { + switch managerName { + case "os": managerName = "OS Package Manager" - } else if managerName == "brew" { + case "brew": managerName = "homebrew" } switch managerName { diff --git a/cmd/cmd.go b/cmd/cmd.go index 354d440..e3f2e0b 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "log" + "log/slog" "os" "path/filepath" @@ -22,7 +23,10 @@ var RootCmd = &cobra.Command{ func init() { cobra.OnInitialize(initConfig) RootCmd.PersistentFlags().StringP("config", "c", "", "Path to the configuration file") - viper.BindPFlag("config", RootCmd.PersistentFlags().Lookup("config")) + err := viper.BindPFlag("config", RootCmd.PersistentFlags().Lookup("config")) + if err != nil { + slog.Error("could not bind config flag") + } addCmd.Flags().StringP("name", "n", "", "The name of the package you want to add") addCmd.Flags().StringP("manager", "m", "", "The package manager you want to add the package to (homebrew|cargo|flatpak|pipx|go)") @@ -81,8 +85,8 @@ func initConfig() { if err := viper.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { fmt.Println("no config file found, creating a new one...") - if err := createDefaultConfig(); err != nil { - log.Printf("error creating default config: %v\n", err) + if err = createDefaultConfig(); err != nil { + slog.Error(fmt.Sprintf("error creating default config: %v\n", err)) os.Exit(1) } } else { @@ -120,7 +124,7 @@ func createDefaultConfig() error { v.SetDefault("package_managers.os.packages", []string{}) configDir := filepath.Join(os.Getenv("HOME"), ".config", "sst") - if err := os.MkdirAll(configDir, 0755); err != nil { + if err := os.MkdirAll(configDir, 0o755); err != nil { return fmt.Errorf("error creating config dir: %w", err) } diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index dddc72d..5895509 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -1,11 +1,12 @@ package cmd import ( - "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "log" "runtime" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" @@ -20,9 +21,10 @@ var installCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager - if managerName == "os" { + switch managerName { + case "os": managerName = "OS Package Manager" - } else if managerName == "brew" { + case "brew": managerName = "homebrew" } switch managerName { diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 8db198c..c898268 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -1,11 +1,12 @@ package cmd import ( - "codeberg.org/Pata1704/system_setup_tool/internal/utils" "fmt" "log" "runtime" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "github.com/spf13/cobra" @@ -19,9 +20,10 @@ var removeCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager - if managerName == "os" { + switch managerName { + case "os": managerName = "OS Package Manager" - } else if managerName == "brew" { + case "brew": managerName = "homebrew" } switch managerName { diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 55fe51c..8aaf02d 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -21,9 +21,10 @@ var searchCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") - if managerName == "os" { + switch managerName { + case "os": managerName = "OS Package Manager" - } else if managerName == "brew" { + case "brew": managerName = "homebrew" } diff --git a/cmd/update_command.go b/cmd/update_command.go index babd4b1..69bee95 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -1,13 +1,14 @@ package cmd import ( - "codeberg.org/Pata1704/system_setup_tool/internal/utils" - pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" "fmt" "log" "runtime" "sync" + "codeberg.org/Pata1704/system_setup_tool/internal/utils" + pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager" + "github.com/spf13/cobra" ) @@ -21,9 +22,10 @@ var updateCmd = &cobra.Command{ packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager - if managerName == "os" { + switch managerName { + case "os": managerName = "OS Package Manager" - } else if managerName == "brew" { + case "brew": managerName = "homebrew" } @@ -74,7 +76,6 @@ var updateAllCmd = &cobra.Command{ Use: "update-all", Short: "update all packages with all package managers.", Run: func(cmd *cobra.Command, args []string) { - var managers []pm.PackageManager switch runtime.GOOS { case "linux": diff --git a/go.mod b/go.mod index f4aa4ad..2870739 100644 --- a/go.mod +++ b/go.mod @@ -1,38 +1,41 @@ module codeberg.org/Pata1704/system_setup_tool -go 1.24.4 +go 1.25.5 require ( - github.com/charmbracelet/huh v0.7.0 + github.com/charmbracelet/huh v0.8.0 github.com/magefile/mage v1.15.0 github.com/mitchellh/mapstructure v1.5.0 - github.com/schollz/progressbar/v3 v3.18.0 - github.com/spf13/cobra v1.9.1 - github.com/spf13/viper v1.20.1 - golang.org/x/sys v0.34.0 + github.com/schollz/progressbar/v3 v3.19.0 + github.com/spf13/cobra v1.10.2 + github.com/spf13/viper v1.21.0 + golang.org/x/sys v0.40.0 ) require ( github.com/atotto/clipboard v0.1.4 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/catppuccin/go v0.3.0 // indirect - github.com/charmbracelet/bubbles v0.21.0 // indirect - github.com/charmbracelet/bubbletea v1.3.5 // indirect - github.com/charmbracelet/colorprofile v0.3.1 // indirect + github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 // indirect + github.com/charmbracelet/bubbletea v1.3.10 // indirect + github.com/charmbracelet/colorprofile v0.4.1 // indirect github.com/charmbracelet/lipgloss v1.1.0 // indirect - github.com/charmbracelet/x/ansi v0.9.3 // indirect - github.com/charmbracelet/x/cellbuf v0.0.13 // indirect - github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d // indirect - github.com/charmbracelet/x/term v0.2.1 // indirect + github.com/charmbracelet/x/ansi v0.11.3 // indirect + github.com/charmbracelet/x/cellbuf v0.0.14 // indirect + github.com/charmbracelet/x/exp/strings v0.0.0-20260109001716-2fbdffcb221f // indirect + github.com/charmbracelet/x/term v0.2.2 // indirect + github.com/clipperhouse/displaywidth v0.6.2 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/go-viper/mapstructure/v2 v2.3.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.3.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect @@ -40,18 +43,19 @@ require ( github.com/muesli/termenv v0.16.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/sagikazarmark/locafero v0.9.0 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.14.0 // indirect - github.com/spf13/cast v1.9.2 // indirect - github.com/spf13/pflag v1.0.6 // indirect + github.com/sagikazarmark/locafero v0.12.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.uber.org/multierr v1.11.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/term v0.32.0 // indirect - golang.org/x/text v0.26.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/term v0.39.0 // indirect + golang.org/x/text v0.33.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index c799fa9..d016915 100644 --- a/go.sum +++ b/go.sum @@ -10,18 +10,30 @@ github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY= github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= +github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 h1:JFgG/xnwFfbezlUnFMJy0nusZvytYysV4SCS2cYbvws= +github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7/go.mod h1:ISC1gtLcVilLOf23wvTfoQuYbW2q0JevFxPfUzZ9Ybw= github.com/charmbracelet/bubbletea v1.3.5 h1:JAMNLTbqMOhSwoELIr0qyP4VidFq72/6E9j7HHmRKQc= github.com/charmbracelet/bubbletea v1.3.5/go.mod h1:TkCnmH+aBd4LrXhXcqrKiYwRs7qyQx5rBgH5fVY3v54= +github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= +github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= +github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk= +github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk= github.com/charmbracelet/huh v0.7.0 h1:W8S1uyGETgj9Tuda3/JdVkc3x7DBLZYPZc4c+/rnRdc= github.com/charmbracelet/huh v0.7.0/go.mod h1:UGC3DZHlgOKHvHC07a5vHag41zzhpPFj34U92sOmyuk= +github.com/charmbracelet/huh v0.8.0 h1:Xz/Pm2h64cXQZn/Jvele4J3r7DDiqFCNIVteYukxDvY= +github.com/charmbracelet/huh v0.8.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4= github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0= github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= +github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI= +github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI= github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/cellbuf v0.0.14 h1:iUEMryGyFTelKW3THW4+FfPgi4fkmKnnaLOXuc+/Kj4= +github.com/charmbracelet/x/cellbuf v0.0.14/go.mod h1:P447lJl49ywBbil/KjCk2HexGh4tEY9LH0/1QrZZ9rA= github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ= github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= @@ -30,14 +42,24 @@ github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payR github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d h1:fEsdno3tFo//l8pS4hlzH5hj6zGSaMzQcbyDLfToeJg= github.com/charmbracelet/x/exp/strings v0.0.0-20250623112707-45752038d08d/go.mod h1:Rgw3/F+xlcUc5XygUtimVSxAqCOsqyvJjqF5UHRvc5k= +github.com/charmbracelet/x/exp/strings v0.0.0-20260109001716-2fbdffcb221f h1:c0cKImYFPrOEEzMsYss56Q7Q69HD7H4ss3Yu9Mw9vqQ= +github.com/charmbracelet/x/exp/strings v0.0.0-20260109001716-2fbdffcb221f/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= github.com/charmbracelet/x/xpty v0.1.2 h1:Pqmu4TEJ8KeA9uSkISKMU3f+C1F6OGBn8ABuGlqCbtI= github.com/charmbracelet/x/xpty v0.1.2/go.mod h1:XK2Z0id5rtLWcpeNiMYBccNNBrP2IJnzHI0Lq13Xzq4= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= +github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= +github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= @@ -53,6 +75,8 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -66,6 +90,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -74,6 +100,8 @@ github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2J github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= @@ -98,20 +126,36 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= +github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= +github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA= github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= +github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= +github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -120,20 +164,28 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=