This repository has been archived on 2024-02-15. You can view files and clone it, but cannot push or open issues or pull requests.
config-mapper/internal/pkgs.go

110 lines
2.2 KiB
Go

package mapper
import (
"errors"
"log"
"os"
"os/exec"
"github.com/pterm/pterm"
)
var (
errLogger = log.New(os.Stderr, "", 0)
ErrFailedInstallation = errors.New("failed to installed some packages. Please, checkout STDERR for more information")
)
func LoadPkgs(c PkgManagers) error {
for _, pkg := range c.InstallationOrder {
switch pkg {
case "homebrew":
if err := installBrewPkgs(c.Homebrew); err != nil {
return ErrFailedInstallation
}
case "apt":
if err := installAptPkgs(c.Aptitude); err != nil {
return ErrFailedInstallation
}
}
}
return nil
}
func installBrewPkgs(pkgs []string) error {
if _, err := exec.LookPath("brew"); err != nil {
errLogger.Println(pterm.Red("Homebrew is not installed on your system"))
return nil
}
if len(pkgs) == 0 {
pterm.Println(pterm.Blue("homebrew: nothing to do"))
return nil
}
cmd := exec.Command("brew", "install")
cmd.Args = append(cmd.Args, pkgs...)
introSpinner, _ := pterm.DefaultSpinner.WithShowTimer(true).WithRemoveWhenDone(false).Start("Installing homebrew packages")
chErr := make(chan error)
defer close(chErr)
go func(chErr chan error) {
if err := cmd.Run(); err != nil {
chErr <- err
return
}
chErr <- nil
}(chErr)
err := <-chErr
introSpinner.Stop()
if err != nil {
return err
}
introSpinner.Success("Packages intalled succesfully")
return nil
}
func installAptPkgs(pkgs []string) error {
if _, err := exec.LookPath("apt-get"); err != nil {
errLogger.Println(pterm.Red("aptitude is not available on your system"))
return nil
}
if len(pkgs) == 0 {
pterm.Println(pterm.Blue("aptitude: nothing to do"))
return nil
}
cmd := exec.Command("sudo", "apt-get", "install")
cmd.Args = append(cmd.Args, pkgs...)
introSpinner, _ := pterm.DefaultSpinner.WithShowTimer(true).WithRemoveWhenDone(false).Start("Installing aptitude packages")
chErr := make(chan error)
defer close(chErr)
go func(chErr chan error) {
if err := cmd.Run(); err != nil {
chErr <- err
return
}
chErr <- nil
}(chErr)
err := <-chErr
introSpinner.Stop()
if err != nil {
return err
}
introSpinner.Success("Packages intalled succesfully")
return nil
}