This commit is contained in:
wheelchairy 2025-02-04 18:45:52 +03:00
parent 074ef32802
commit bb704c4705
6 changed files with 43 additions and 31 deletions

View File

@ -1,9 +1,7 @@
package main
import (
"train/cmd"
)
import "train/cmd"
func main() {
cmd.Execute()
}
}

4
pkg/cache/cache.go vendored
View File

@ -6,9 +6,11 @@ import (
"net/http"
"os"
"path/filepath"
"train/pkg/paths"
)
var cacheDir = "./cache"
var cacheDir = filepath.Join(paths.BaseDir(), "cache")
func GetCachedFile(url string) (string, error) {
if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {

View File

@ -5,15 +5,27 @@ import (
"errors"
"io/ioutil"
"os"
"path/filepath"
"train/pkg/paths"
)
var configFile string
func init() {
railsConfig := filepath.Join(paths.BaseDir(), "config", "config.json")
if _, err := os.Stat(railsConfig); err == nil {
configFile = railsConfig
} else {
configFile = "./config.json"
}
}
type Config struct {
Repositories []string `json:"repositories"`
Packages map[string]string `json:"packages"`
}
var configFile = "./config.json"
func LoadConfig() (*Config, error) {
if _, err := os.Stat(configFile); os.IsNotExist(err) {
cfg := &Config{

View File

@ -17,13 +17,14 @@ import (
"runtime"
"strings"
// "train/pkg/config"
"train/pkg/manifest"
"train/pkg/paths"
)
var (
binInstallDir = "./installed_bins" // for binary
buildInstallDir = "./installed_packages" // for build"
installDir = buildInstallDir // for func
binInstallDir = filepath.Join(paths.BaseDir(), "installed_bins")
buildInstallDir = filepath.Join(paths.BaseDir(), "installed_packages")
)
func computeChecksum(filePath string) (string, error) {
@ -41,7 +42,6 @@ func downloadFile(url string) (string, error) {
return "", err
}
defer resp.Body.Close()
tmpFile, err := ioutil.TempFile("", "package_")
if err != nil {
return "", err
@ -59,32 +59,26 @@ func unpackPackage(filePath, packageName string) error {
if err := os.MkdirAll(destDir, os.ModePerm); err != nil {
return err
}
f, err := os.Open(filePath)
if err != nil {
return err
}
defer f.Close()
gzr, err := gzip.NewReader(f)
if err != nil {
return err
}
defer gzr.Close()
tr := tar.NewReader(gzr)
for {
header, err := tr.Next()
if err == io.EOF {
break
break
}
if err != nil {
return err
}
target := filepath.Join(destDir, header.Name)
switch header.Typeflag {
case tar.TypeDir:
if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil {
@ -100,8 +94,6 @@ func unpackPackage(filePath, packageName string) error {
return err
}
outFile.Close()
default:
}
}
return nil
@ -133,6 +125,7 @@ func saveInstalledPackage(name string, m *manifest.Manifest) error {
}
func removeInstalledPackageRecord(name string) {
// Здесь можно удалить запись из базы или файла
}
func InstallPackage(name string) error {
@ -140,7 +133,6 @@ func InstallPackage(name string) error {
if err != nil {
return fmt.Errorf("не удалось получить манифест: %w", err)
}
if strings.ToLower(m.Mode) == "bin" {
platformKey := runtime.GOOS + "_" + runtime.GOARCH
binaryURL, ok := m.Binaries[platformKey]
@ -152,7 +144,6 @@ func InstallPackage(name string) error {
return fmt.Errorf("не удалось скачать бинарник: %w", err)
}
defer os.Remove(packageFile)
checksum, err := computeChecksum(packageFile)
if err != nil {
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
@ -160,7 +151,6 @@ func InstallPackage(name string) error {
if checksum != m.Checksum {
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
}
if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil {
return err
}
@ -180,7 +170,6 @@ func InstallPackage(name string) error {
return fmt.Errorf("не удалось скачать пакет: %w", err)
}
defer os.Remove(packageFile)
checksum, err := computeChecksum(packageFile)
if err != nil {
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
@ -188,23 +177,19 @@ func InstallPackage(name string) error {
if checksum != m.Checksum {
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
}
if err := unpackPackage(packageFile, name); err != nil {
return fmt.Errorf("не удалось распаковать пакет: %w", err)
}
if len(m.Build) > 0 {
if err := executeBuildCommands(m.Build, name); err != nil {
return fmt.Errorf("ошибка выполнения команд сборки: %w", err)
}
}
if err := saveInstalledPackage(name, m); err != nil {
return fmt.Errorf("не удалось сохранить информацию об установленном пакете: %w", err)
}
return nil
}
return errors.New("неизвестный режим пакета")
}
@ -251,4 +236,4 @@ func GetPackageInfo(name string) (string, error) {
return "", err
}
return string(data), nil
}
}

14
pkg/paths/paths.go Normal file
View File

@ -0,0 +1,14 @@
package paths
import (
"os"
"path/filepath"
)
func BaseDir() string {
home, err := os.UserHomeDir()
if err != nil {
return "."
}
return filepath.Join(home, ".rails")
}

View File

@ -2,10 +2,11 @@ package version
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"train/pkg/paths"
)
type VersionInfo struct {
@ -13,7 +14,7 @@ type VersionInfo struct {
Version string `json:"version"`
}
var versionDir = "./versions"
var versionDir = filepath.Join(paths.BaseDir(), "versions")
func SaveVersionInfo(pkgName, ver string) error {
if err := os.MkdirAll(versionDir, os.ModePerm); err != nil {