From ca822b5f38fb566a9a8b57332e3be793de7ffec8 Mon Sep 17 00:00:00 2001 From: wheelchairy Date: Tue, 4 Feb 2025 18:57:51 +0300 Subject: [PATCH] mehh --- .gitignore | 1 + pkg/installer/installer.go | 60 +++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index d267807..4c591e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ installed* repo train +pkg/*/*.save diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index e0f4f74..3ed708e 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -17,7 +17,6 @@ import ( "runtime" "strings" -// "train/pkg/config" "train/pkg/manifest" "train/pkg/paths" ) @@ -27,6 +26,10 @@ var ( buildInstallDir = filepath.Join(paths.BaseDir(), "installed_packages") ) +func logMessage(msg string) { + fmt.Println(msg) +} + func computeChecksum(filePath string) (string, error) { data, err := ioutil.ReadFile(filePath) if err != nil { @@ -37,6 +40,7 @@ func computeChecksum(filePath string) (string, error) { } func downloadFile(url string) (string, error) { + logMessage("Downloading " + url + "...") resp, err := http.Get(url) if err != nil { return "", err @@ -51,11 +55,13 @@ func downloadFile(url string) (string, error) { return "", err } tmpFile.Close() + logMessage("File downloaded to temporary location") return tmpFile.Name(), nil } func unpackPackage(filePath, packageName string) error { destDir := filepath.Join(buildInstallDir, packageName) + logMessage("Unpacking package into " + destDir) if err := os.MkdirAll(destDir, os.ModePerm); err != nil { return err } @@ -96,24 +102,28 @@ func unpackPackage(filePath, packageName string) error { outFile.Close() } } + logMessage("Unpacking completed") return nil } func executeBuildCommands(commands []string, packageName string) error { packagePath := filepath.Join(buildInstallDir, packageName) for _, commandStr := range commands { + logMessage("Executing build command: " + commandStr) cmd := exec.Command("sh", "-c", commandStr) cmd.Dir = packagePath output, err := cmd.CombinedOutput() if err != nil { - return fmt.Errorf("команда '%s' завершилась с ошибкой: %s", commandStr, string(output)) + return fmt.Errorf("command '%s' failed: %s", commandStr, string(output)) } + logMessage("Command output: " + string(output)) } return nil } func saveInstalledPackage(name string, m *manifest.Manifest) error { packagePath := filepath.Join(buildInstallDir, name) + logMessage("Saving manifest to " + packagePath) if err := os.MkdirAll(packagePath, os.ModePerm); err != nil { return err } @@ -124,31 +134,30 @@ func saveInstalledPackage(name string, m *manifest.Manifest) error { return ioutil.WriteFile(filepath.Join(packagePath, "manifest.json"), jsonData, 0644) } -func removeInstalledPackageRecord(name string) { -} - func InstallPackage(name string) error { + logMessage("Fetching manifest for package " + name) m, err := manifest.FetchManifest(name) if err != nil { - return fmt.Errorf("не удалось получить манифест: %w", err) + return fmt.Errorf("failed to fetch manifest: %w", err) } if strings.ToLower(m.Mode) == "bin" { + logMessage("Installing in binary mode") platformKey := runtime.GOOS + "_" + runtime.GOARCH binaryURL, ok := m.Binaries[platformKey] if !ok { - return fmt.Errorf("нет бинарного файла для платформы %s", platformKey) + return fmt.Errorf("no binary available for platform %s", platformKey) } packageFile, err := downloadFile(binaryURL) if err != nil { - return fmt.Errorf("не удалось скачать бинарник: %w", err) + return fmt.Errorf("failed to download binary: %w", err) } defer os.Remove(packageFile) checksum, err := computeChecksum(packageFile) if err != nil { - return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err) + return fmt.Errorf("failed to compute checksum: %w", err) } if checksum != m.Checksum { - return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum) + return fmt.Errorf("checksum mismatch: expected %s, got %s", m.Checksum, checksum) } if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil { return err @@ -161,56 +170,61 @@ func InstallPackage(name string) error { if err := ioutil.WriteFile(destPath, data, 0755); err != nil { return err } - fmt.Printf("Бинарный пакет %s установлен в %s\n", m.Name, destPath) + logMessage("Binary package " + m.Name + " installed to " + destPath) return nil } else if strings.ToLower(m.Mode) == "build" { + logMessage("Installing in build mode") packageFile, err := downloadFile(m.Source) if err != nil { - return fmt.Errorf("не удалось скачать пакет: %w", err) + return fmt.Errorf("failed to download package: %w", err) } defer os.Remove(packageFile) checksum, err := computeChecksum(packageFile) if err != nil { - return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err) + return fmt.Errorf("failed to compute checksum: %w", err) } if checksum != m.Checksum { - return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum) + return fmt.Errorf("checksum mismatch: expected %s, got %s", m.Checksum, checksum) } if err := unpackPackage(packageFile, name); err != nil { - return fmt.Errorf("не удалось распаковать пакет: %w", err) + return fmt.Errorf("failed to unpack package: %w", err) } if len(m.Build) > 0 { if err := executeBuildCommands(m.Build, name); err != nil { - return fmt.Errorf("ошибка выполнения команд сборки: %w", err) + return fmt.Errorf("build command error: %w", err) } } if err := saveInstalledPackage(name, m); err != nil { - return fmt.Errorf("не удалось сохранить информацию об установленном пакете: %w", err) + return fmt.Errorf("failed to save manifest: %w", err) } + logMessage("Build package " + m.Name + " installed successfully") return nil } - return errors.New("неизвестный режим пакета") + return errors.New("unknown package mode") } func RemovePackage(name string) error { packagePath := filepath.Join(buildInstallDir, name) + logMessage("Removing package " + name + " from " + packagePath) if _, err := os.Stat(packagePath); os.IsNotExist(err) { - return errors.New("пакет не найден") + return errors.New("package not found") } if err := os.RemoveAll(packagePath); err != nil { - return fmt.Errorf("не удалось удалить пакет: %w", err) + return fmt.Errorf("failed to remove package: %w", err) } - removeInstalledPackageRecord(name) + logMessage("Package " + name + " removed successfully") return nil } func UpdatePackage(name string) error { + logMessage("Updating package " + name) if err := RemovePackage(name); err != nil { - return fmt.Errorf("не удалось удалить пакет для обновления: %w", err) + return fmt.Errorf("failed to remove package for update: %w", err) } if err := InstallPackage(name); err != nil { - return fmt.Errorf("не удалось установить пакет: %w", err) + return fmt.Errorf("failed to install package during update: %w", err) } + logMessage("Package " + name + " updated successfully") return nil }