From 8dabc7357b8fc6f911f3d0ab5d407c92d57d2cab Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 19 Jan 2025 22:54:49 +0100 Subject: [PATCH] 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() +}