feat(cli): add update and update-all command

This commit is contained in:
Patryk Hegenberg 2025-01-19 22:21:28 +01:00
parent 3b1799397e
commit f39051f93d
12 changed files with 192 additions and 8 deletions

View file

@ -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")
}

View file

@ -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()
}

View file

@ -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")
}

View file

@ -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()
}

View file

@ -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 {

View file

@ -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
}

View file

@ -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()
}