feat(cli): add check command

This commit is contained in:
Patryk Hegenberg 2025-01-31 17:56:02 +01:00
parent 3519efeccc
commit 11b8541630
14 changed files with 123 additions and 1 deletions

49
cmd/check_cmd.go Normal file
View file

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

View file

@ -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)") 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( packageCmd.AddCommand(
addCmd, addCmd,
deleteCmd, deleteCmd,
@ -57,6 +59,7 @@ func init() {
updateCmd, updateCmd,
updateAllCmd, updateAllCmd,
historyCmd, historyCmd,
checkCmd,
) )
} }

View file

@ -74,3 +74,8 @@ func (a *AptManager) UpdateAllPackages() error {
command.Stdin = strings.NewReader(a.SudoPassword + "\n") command.Stdin = strings.NewReader(a.SudoPassword + "\n")
return command.Run() 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()
}

View file

@ -2,6 +2,8 @@ package packagemanager
import ( import (
"fmt" "fmt"
"os"
"path/filepath"
"system_setup_tool/internal/shell" "system_setup_tool/internal/shell"
) )
@ -56,3 +58,12 @@ func (c *CargoManager) UpdatePackage(pkg string) error {
func (c *CargoManager) UpdateAllPackages() error { func (c *CargoManager) UpdateAllPackages() error {
return fmt.Errorf("update not supported") 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()
}

View file

@ -64,3 +64,8 @@ func (c *ChocoManager) UpdateAllPackages() error {
cmd := shell.ExecCommand("choco", "update") cmd := shell.ExecCommand("choco", "update")
return cmd.Run() return cmd.Run()
} }
func (c *ChocoManager) Check(pkg string) error {
cmd := shell.ExecCommand("choco", "search", "--local-only", pkg)
return cmd.Run()
}

View file

@ -71,3 +71,8 @@ func (d *DnfManager) UpdateAllPackages() error {
command.Stdin = strings.NewReader(d.SudoPassword + "\n") command.Stdin = strings.NewReader(d.SudoPassword + "\n")
return command.Run() 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()
}

View file

@ -126,3 +126,8 @@ func (f *FlatpakManager) UpdateAllPackages() error {
cmd := shell.ExecCommand("flatpak", "update", "-y") cmd := shell.ExecCommand("flatpak", "update", "-y")
return cmd.Run() 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()
}

View file

@ -2,6 +2,8 @@ package packagemanager
import ( import (
"fmt" "fmt"
"os"
"path/filepath"
"system_setup_tool/internal/shell" "system_setup_tool/internal/shell"
) )
@ -56,3 +58,12 @@ func (g *GolangManager) UpdatePackage(pkg string) error {
func (g *GolangManager) UpdateAllPackages() error { func (g *GolangManager) UpdateAllPackages() error {
return fmt.Errorf("update not supported") 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()
}

View file

@ -69,3 +69,8 @@ func (h *HomebrewManager) UpdateAllPackages() error {
cmd := shell.ExecCommand("brew", "upgrade") cmd := shell.ExecCommand("brew", "upgrade")
return cmd.Run() return cmd.Run()
} }
func (h *HomebrewManager) Check(pkg string) error {
cmd := shell.ExecCommand("brew", "list", pkg)
return cmd.Run()
}

View file

@ -127,6 +127,10 @@ func (o *OSManager) UpdateAllPackages() error {
return o.pm.UpdateAllPackages() return o.pm.UpdateAllPackages()
} }
func (o *OSManager) Check(pkg string) error {
return o.pm.Check(pkg)
}
type OS struct { type OS struct {
ID string ID string
Name string Name string

View file

@ -2,6 +2,7 @@ package packagemanager
type PackageManager interface { type PackageManager interface {
Install(packages []string) error Install(packages []string) error
Check(pkg string) error
InstallPackage(pkg string) error InstallPackage(pkg string) error
InstallManager() error InstallManager() error
RemovePackage(pkg string) error RemovePackage(pkg string) error

View file

@ -74,3 +74,8 @@ func (p *PacmanManager) UpdateAllPackages() error {
command.Stdin = strings.NewReader(p.SudoPassword + "\n") command.Stdin = strings.NewReader(p.SudoPassword + "\n")
return command.Run() 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()
}

View file

@ -1,6 +1,9 @@
package packagemanager package packagemanager
import "system_setup_tool/internal/shell" import (
"fmt"
"system_setup_tool/internal/shell"
)
type PipxManager struct{} type PipxManager struct{}
@ -56,3 +59,8 @@ func (p *PipxManager) UpdateAllPackages() error {
cmd := shell.ExecCommand("pipx", "upgrade-all") cmd := shell.ExecCommand("pipx", "upgrade-all")
return cmd.Run() 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()
}

View file

@ -64,3 +64,8 @@ func (w *WingetManager) UpdateAllPackages() error {
cmd := shell.ExecCommand("winget", "update") cmd := shell.ExecCommand("winget", "update")
return cmd.Run() return cmd.Run()
} }
func (w *WingetManager) Check(pkg string) error {
cmd := shell.ExecCommand("wiget", "show", pkg)
return cmd.Run()
}