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

139 lines
2.9 KiB
Go
Raw Normal View History

2022-02-25 00:17:02 +01:00
package mapper
import (
"errors"
2022-02-27 18:13:27 +01:00
"fmt"
2022-02-25 00:17:02 +01:00
"log"
"os"
"os/exec"
2022-02-27 18:13:27 +01:00
"strings"
2022-02-25 00:17:02 +01:00
2022-04-07 21:42:57 +02:00
"github.com/fatih/color"
2022-02-27 18:13:27 +01:00
"github.com/spf13/viper"
"gopkg.in/yaml.v3"
2022-02-25 00:17:02 +01:00
)
var (
errLogger = log.New(os.Stderr, "", 0)
2022-02-27 18:13:27 +01:00
ErrFailedInstallation = errors.New("failed to install some packages. Please, checkout STDERR for more information")
ErrFailedSaving = errors.New("failed to save some packages. Please, checkout STDERR for more information")
ErrBrewNotAvailable = errors.New("homebrew is not available on your system")
ErrAptNotAvailable = errors.New("aptitude is not available on your system")
2022-02-25 00:17:02 +01:00
)
func LoadPkgs(c PkgManagers) error {
2022-04-07 21:42:57 +02:00
color.Blue("# Load folders into saved location")
2022-02-27 18:13:27 +01:00
for _, pkg := range c.InstallationOrder {
2022-02-25 00:17:02 +01:00
switch pkg {
case "homebrew":
if err := installBrewPkgs(c.Homebrew); err != nil {
2022-04-07 21:42:57 +02:00
PrintError(err.Error())
2022-02-25 00:17:02 +01:00
return ErrFailedInstallation
}
case "apt":
if err := installAptPkgs(c.Aptitude); err != nil {
2022-04-07 21:42:57 +02:00
PrintError(err.Error())
2022-02-25 00:17:02 +01:00
return ErrFailedInstallation
}
}
}
return nil
}
2022-02-27 18:13:27 +01:00
func SavePkgs(cfg Configuration) error {
2022-04-07 21:42:57 +02:00
color.Blue("# Save user installed packages")
2022-02-27 18:13:27 +01:00
for _, pkg := range cfg.PackageManagers.InstallationOrder {
switch pkg {
case "homebrew":
if err := SaveBrewPkgs(cfg); err != nil {
2022-04-07 21:42:57 +02:00
PrintError(err.Error())
2022-02-27 18:13:27 +01:00
return ErrFailedSaving
}
case "apt":
fmt.Println("implemented soon!")
}
}
return nil
}
func SaveBrewPkgs(cfg Configuration) error {
if _, err := exec.LookPath("brew"); err != nil {
return err
}
2022-04-07 21:42:57 +02:00
color.Blue("## Saving Homebrew packages")
2022-02-27 18:13:27 +01:00
o, err := exec.Command("brew", "leaves", "--installed-on-request").Output()
if err != nil {
return err
}
pkgs := strings.Split(string(o), "\n")
cfg.PackageManagers.Homebrew = append([]string{}, pkgs[:len(pkgs)-1]...)
b, err := yaml.Marshal(cfg)
if err != nil {
return err
}
if err := os.WriteFile(viper.GetString("configuration-file"), b, 0755); err != nil {
return err
}
2022-04-07 21:42:57 +02:00
color.Green("Packages saved succesfully !")
2022-02-27 18:13:27 +01:00
return nil
}
func installBrewPkgs(pkgs []string) error {
2022-02-25 00:17:02 +01:00
if _, err := exec.LookPath("brew"); err != nil {
2022-02-27 18:13:27 +01:00
return ErrBrewNotAvailable
2022-02-25 00:17:02 +01:00
}
if len(pkgs) == 0 {
2022-04-07 21:42:57 +02:00
fmt.Println("homebrew: nothing to do")
2022-02-25 00:17:02 +01:00
return nil
}
cmd := exec.Command("brew", "install")
cmd.Args = append(cmd.Args, pkgs...)
2022-04-07 21:42:57 +02:00
color.Blue("## Installing Homebrew packages")
2022-02-25 00:17:02 +01:00
2022-02-27 18:13:27 +01:00
if err := cmd.Run(); err != nil {
2022-04-07 21:42:57 +02:00
PrintError("brew command failed: %v", err)
2022-02-25 00:17:02 +01:00
return err
}
2022-04-07 21:42:57 +02:00
color.Green("Packages intalled succesfully !")
2022-02-25 00:17:02 +01:00
return nil
}
func installAptPkgs(pkgs []string) error {
2022-02-25 00:17:02 +01:00
if _, err := exec.LookPath("apt-get"); err != nil {
2022-02-27 18:13:27 +01:00
return ErrAptNotAvailable
2022-02-25 00:17:02 +01:00
}
if len(pkgs) == 0 {
2022-04-07 21:42:57 +02:00
fmt.Println("aptitude: nothing to do")
2022-02-25 00:17:02 +01:00
return nil
}
cmd := exec.Command("sudo", "apt-get", "install")
cmd.Args = append(cmd.Args, pkgs...)
2022-04-07 21:42:57 +02:00
color.Blue("## Installing aptitude packages")
2022-02-25 00:17:02 +01:00
2022-04-07 21:42:57 +02:00
if err := cmd.Run(); err != nil {
PrintError("aptitude command failed: %v", err)
2022-02-25 00:17:02 +01:00
return err
}
2022-04-07 21:42:57 +02:00
color.Green("Packages intalled succesfully !")
2022-02-25 00:17:02 +01:00
return nil
}