Compare commits

...

2 Commits

Author SHA1 Message Date
wheelchairy
a606043450 mehh 2025-02-04 21:38:46 +03:00
wheelchairy
9b4e21691c mehh 2025-02-04 21:38:28 +03:00

View File

@ -56,8 +56,7 @@ func downloadFile(url string) (string, error) {
func unpackPackage(filePath, packageName string) error { func unpackPackage(filePath, packageName string) error {
destDir := filepath.Join(buildInstallDir, packageName) destDir := filepath.Join(buildInstallDir, packageName)
err := os.MkdirAll(destDir, os.ModePerm) if err := os.MkdirAll(destDir, os.ModePerm); err != nil {
if err != nil {
return err return err
} }
f, err := os.Open(filePath) f, err := os.Open(filePath)
@ -82,8 +81,7 @@ func unpackPackage(filePath, packageName string) error {
target := filepath.Join(destDir, header.Name) target := filepath.Join(destDir, header.Name)
switch header.Typeflag { switch header.Typeflag {
case tar.TypeDir: case tar.TypeDir:
err := os.MkdirAll(target, os.FileMode(header.Mode)) if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil {
if err != nil {
return err return err
} }
case tar.TypeReg: case tar.TypeReg:
@ -91,8 +89,7 @@ func unpackPackage(filePath, packageName string) error {
if err != nil { if err != nil {
return err return err
} }
_, err = io.Copy(outFile, tr) if _, err := io.Copy(outFile, tr); err != nil {
if err != nil {
outFile.Close() outFile.Close()
return err return err
} }
@ -117,8 +114,7 @@ func executeBuildCommands(commands []string, packageName string) error {
func saveInstalledPackage(name string, m *manifest.Manifest) error { func saveInstalledPackage(name string, m *manifest.Manifest) error {
packagePath := filepath.Join(buildInstallDir, name) packagePath := filepath.Join(buildInstallDir, name)
err := os.MkdirAll(packagePath, os.ModePerm) if err := os.MkdirAll(packagePath, os.ModePerm); err != nil {
if err != nil {
return err return err
} }
jsonData, err := json.MarshalIndent(m, "", " ") jsonData, err := json.MarshalIndent(m, "", " ")
@ -151,8 +147,7 @@ func InstallPackage(name string) error {
if computedChecksum != binaryInfo.Checksum { if computedChecksum != binaryInfo.Checksum {
return fmt.Errorf("checksum mismatch: expected %s, got %s", binaryInfo.Checksum, computedChecksum) return fmt.Errorf("checksum mismatch: expected %s, got %s", binaryInfo.Checksum, computedChecksum)
} }
err = os.MkdirAll(binInstallDir, os.ModePerm) if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil {
if err != nil {
return err return err
} }
destPath := filepath.Join(binInstallDir, m.Name) destPath := filepath.Join(binInstallDir, m.Name)
@ -160,8 +155,7 @@ func InstallPackage(name string) error {
if err != nil { if err != nil {
return err return err
} }
err = ioutil.WriteFile(destPath, data, 0755) if err := ioutil.WriteFile(destPath, data, 0755); err != nil {
if err != nil {
return err return err
} }
fmt.Printf("Binary package %s installed in %s\n", m.Name, destPath) fmt.Printf("Binary package %s installed in %s\n", m.Name, destPath)
@ -179,38 +173,17 @@ func InstallPackage(name string) error {
if computedChecksum != m.Checksum { if computedChecksum != m.Checksum {
return fmt.Errorf("checksum mismatch: expected %s, got %s", m.Checksum, computedChecksum) return fmt.Errorf("checksum mismatch: expected %s, got %s", m.Checksum, computedChecksum)
} }
err = unpackPackage(packageFile, name) if err := unpackPackage(packageFile, name); err != nil {
if err != nil {
return fmt.Errorf("failed to unpack package: %w", err) return fmt.Errorf("failed to unpack package: %w", err)
} }
if len(m.Build) > 0 { if len(m.Build) > 0 {
err = executeBuildCommands(m.Build, name) if err := executeBuildCommands(m.Build, name); err != nil {
if err != nil {
return fmt.Errorf("build command error: %w", err) return fmt.Errorf("build command error: %w", err)
} }
} }
err = saveInstalledPackage(name, m) if err := saveInstalledPackage(name, m); err != nil {
if err != nil {
return fmt.Errorf("failed to save manifest: %w", err) return fmt.Errorf("failed to save manifest: %w", err)
} }
if name == "choochoo-build" {
destDir := filepath.Join(paths.BaseDir(), "bin")
err = os.MkdirAll(destDir, os.ModePerm)
if err != nil {
return err
}
srcBinary := filepath.Join(buildInstallDir, name, "choochoo")
targetBinary := filepath.Join(destDir, "choochoo")
data, err := ioutil.ReadFile(srcBinary)
if err != nil {
return fmt.Errorf("failed to read built binary: %w", err)
}
err = ioutil.WriteFile(targetBinary, data, 0755)
if err != nil {
return fmt.Errorf("failed to write binary to %s: %w", targetBinary, err)
}
fmt.Printf("Binary choochoo installed in %s\n", targetBinary)
}
fmt.Printf("Build package %s installed successfully\n", m.Name) fmt.Printf("Build package %s installed successfully\n", m.Name)
return nil return nil
} }
@ -222,20 +195,17 @@ func RemovePackage(name string) error {
if _, err := os.Stat(packagePath); os.IsNotExist(err) { if _, err := os.Stat(packagePath); os.IsNotExist(err) {
return errors.New("package not found") return errors.New("package not found")
} }
err := os.RemoveAll(packagePath) if err := os.RemoveAll(packagePath); err != nil {
if err != nil {
return fmt.Errorf("failed to remove package: %w", err) return fmt.Errorf("failed to remove package: %w", err)
} }
return nil return nil
} }
func UpdatePackage(name string) error { func UpdatePackage(name string) error {
err := RemovePackage(name) if err := RemovePackage(name); err != nil {
if err != nil {
return fmt.Errorf("failed to remove package for update: %w", err) return fmt.Errorf("failed to remove package for update: %w", err)
} }
err = InstallPackage(name) if err := InstallPackage(name); err != nil {
if err != nil {
return fmt.Errorf("failed to install package: %w", err) return fmt.Errorf("failed to install package: %w", err)
} }
return nil return nil