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

84 lines
1.8 KiB
Go

package mapper
import (
"fmt"
"os"
"os/exec"
"github.com/datahearth/config-mapper/internal/configuration"
"github.com/fatih/color"
"github.com/gernest/wow"
"github.com/gernest/wow/spin"
"github.com/spf13/viper"
)
// InstallPackages install all packages from the configuration file by installation order
func InstallPackages(c configuration.PkgManagers) error {
color.Blue("\n# Installing packages")
for _, pkgManager := range c.InstallationOrder {
var pkgs []string
switch pkgManager {
case "brew":
pkgs = c.Brew
case "apt":
pkgs = c.Apt
case "cargo":
pkgs = c.Cargo
case "npm":
pkgs = c.Npm
case "pip":
pkgs = c.Pip
case "go":
pkgs = c.Go
default:
PrintError("package manager not supported: %s", pkgManager)
continue
}
if _, err := exec.LookPath(pkgManager); err != nil {
if pkgManager == "pip" {
if _, err := exec.LookPath("pip3"); err != nil {
return fmt.Errorf("%s and pip3 are not available on your system", pkgManager)
}
pkgManager = "pip3"
} else {
return fmt.Errorf("%s is not available on your system", pkgManager)
}
}
if len(pkgs) == 0 {
fmt.Printf("%s: nothing to do\n", pkgManager)
return nil
}
cmd := exec.Command(pkgManager, "install")
cmd.Args = append(cmd.Args, pkgs...)
color.Blue("\n## Installing %s packages", pkgManager)
spinner := wow.New(os.Stdout, spin.Get(spin.Dots3), " Running...")
v := viper.GetBool("verbose")
if v {
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
} else {
spinner.Start()
}
if err := cmd.Run(); err != nil {
spinner.Stop()
PrintError("\n%s command failed: %v", pkgManager, err)
return err
}
if v {
// todo: find a way to clear spinner when done
spinner.Stop()
}
color.Green("\n%s Packages intalled succesfully !", pkgManager)
}
return nil
}