110 lines
2.2 KiB
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
|
|
}
|