diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index 710833e..a33aa61 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -26,6 +26,16 @@ var ( buildInstallDir = filepath.Join(paths.BaseDir(), "installed_packages") ) +func logInfo(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + fmt.Printf("\033[32m==>\033[0m %s\n", msg) +} + +func logTrain(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + fmt.Printf("\U0001F682 %s\n", msg) +} + func computeChecksum(filePath string) (string, error) { data, err := ioutil.ReadFile(filePath) if err != nil { @@ -36,6 +46,7 @@ func computeChecksum(filePath string) (string, error) { } func downloadFile(url string) (string, error) { + logInfo("Downloading %s", url) resp, err := http.Get(url) if err != nil { return "", err @@ -51,10 +62,12 @@ func downloadFile(url string) (string, error) { return "", err } tmpFile.Close() + logInfo("File downloaded to temporary location") return tmpFile.Name(), nil } func unpackPackage(filePath, packageName string) error { + logInfo("Unpacking package into %s", filepath.Join(buildInstallDir, packageName)) destDir := filepath.Join(buildInstallDir, packageName) if err := os.MkdirAll(destDir, os.ModePerm); err != nil { return err @@ -96,12 +109,14 @@ func unpackPackage(filePath, packageName string) error { outFile.Close() } } + logInfo("Unpacking completed") return nil } func executeBuildCommands(commands []string, packageName string) error { packagePath := filepath.Join(buildInstallDir, packageName) for _, commandStr := range commands { + logInfo("Executing build command: %s", commandStr) cmd := exec.Command("sh", "-c", commandStr) cmd.Dir = packagePath output, err := cmd.CombinedOutput() @@ -113,6 +128,7 @@ func executeBuildCommands(commands []string, packageName string) error { } func saveInstalledPackage(name string, m *manifest.Manifest) error { + logInfo("Saving manifest to %s", filepath.Join(buildInstallDir, name)) packagePath := filepath.Join(buildInstallDir, name) if err := os.MkdirAll(packagePath, os.ModePerm); err != nil { return err @@ -125,11 +141,13 @@ func saveInstalledPackage(name string, m *manifest.Manifest) error { } func InstallPackage(name string) error { + logTrain("Installing package: %s", name) m, err := manifest.FetchManifest(name) if err != nil { return fmt.Errorf("failed to fetch manifest: %w", err) } if strings.ToLower(m.Mode) == "bin" { + logInfo("Installing in binary mode") platformKey := runtime.GOOS + "_" + runtime.GOARCH binaryInfo, ok := m.Binaries[platformKey] if !ok { @@ -158,9 +176,11 @@ func InstallPackage(name string) error { if err := ioutil.WriteFile(destPath, data, 0755); err != nil { return err } - fmt.Printf("Binary package %s installed in %s\n", m.Name, destPath) + logInfo("Binary package %s installed in %s", m.Name, destPath) + logTrain("Package %s successfully installed.", m.Name) return nil } else if strings.ToLower(m.Mode) == "build" { + logInfo("Installing in build mode") packageFile, err := downloadFile(m.Source) if err != nil { return fmt.Errorf("failed to download package: %w", err) @@ -184,13 +204,14 @@ func InstallPackage(name string) error { if err := saveInstalledPackage(name, m); err != nil { return fmt.Errorf("failed to save manifest: %w", err) } - fmt.Printf("Build package %s installed successfully\n", m.Name) + logTrain("Build package %s installed successfully.", m.Name) return nil } return errors.New("unknown package mode") } func RemovePackage(name string) error { + logTrain("Removing package: %s", name) packagePath := filepath.Join(buildInstallDir, name) if _, err := os.Stat(packagePath); os.IsNotExist(err) { return errors.New("package not found") @@ -202,6 +223,7 @@ func RemovePackage(name string) error { if err := json.Unmarshal(data, &m); err == nil { if len(m.Uninstall) > 0 { for _, cmdStr := range m.Uninstall { + logInfo("Executing uninstall command: %s", cmdStr) cmd := exec.Command("sh", "-c", cmdStr) cmd.Dir = packagePath output, err := cmd.CombinedOutput() @@ -212,19 +234,23 @@ func RemovePackage(name string) error { } } } + logInfo("Removing directory %s", packagePath) if err := os.RemoveAll(packagePath); err != nil { return fmt.Errorf("failed to remove package: %w", err) } + logTrain("Package %s removed.", name) return nil } func UpdatePackage(name string) error { + logTrain("Updating package: %s", name) if err := RemovePackage(name); err != nil { return fmt.Errorf("failed to remove package for update: %w", err) } if err := InstallPackage(name); err != nil { return fmt.Errorf("failed to install package: %w", err) } + logTrain("Package %s updated successfully.", name) return nil }