mehh
This commit is contained in:
parent
074ef32802
commit
bb704c4705
4
main.go
4
main.go
@ -1,8 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import "train/cmd"
|
||||||
"train/cmd"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cmd.Execute()
|
cmd.Execute()
|
||||||
|
4
pkg/cache/cache.go
vendored
4
pkg/cache/cache.go
vendored
@ -6,9 +6,11 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"train/pkg/paths"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cacheDir = "./cache"
|
var cacheDir = filepath.Join(paths.BaseDir(), "cache")
|
||||||
|
|
||||||
func GetCachedFile(url string) (string, error) {
|
func GetCachedFile(url string) (string, error) {
|
||||||
if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {
|
if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {
|
||||||
|
@ -5,15 +5,27 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"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 {
|
type Config struct {
|
||||||
Repositories []string `json:"repositories"`
|
Repositories []string `json:"repositories"`
|
||||||
Packages map[string]string `json:"packages"`
|
Packages map[string]string `json:"packages"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var configFile = "./config.json"
|
|
||||||
|
|
||||||
func LoadConfig() (*Config, error) {
|
func LoadConfig() (*Config, error) {
|
||||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||||
cfg := &Config{
|
cfg := &Config{
|
||||||
|
@ -17,13 +17,14 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
// "train/pkg/config"
|
||||||
"train/pkg/manifest"
|
"train/pkg/manifest"
|
||||||
|
"train/pkg/paths"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
binInstallDir = "./installed_bins" // for binary
|
binInstallDir = filepath.Join(paths.BaseDir(), "installed_bins")
|
||||||
buildInstallDir = "./installed_packages" // for build"
|
buildInstallDir = filepath.Join(paths.BaseDir(), "installed_packages")
|
||||||
installDir = buildInstallDir // for func
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func computeChecksum(filePath string) (string, error) {
|
func computeChecksum(filePath string) (string, error) {
|
||||||
@ -41,7 +42,6 @@ func downloadFile(url string) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
tmpFile, err := ioutil.TempFile("", "package_")
|
tmpFile, err := ioutil.TempFile("", "package_")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@ -59,21 +59,17 @@ func unpackPackage(filePath, packageName string) error {
|
|||||||
if err := os.MkdirAll(destDir, os.ModePerm); err != nil {
|
if err := os.MkdirAll(destDir, os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := os.Open(filePath)
|
f, err := os.Open(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
gzr, err := gzip.NewReader(f)
|
gzr, err := gzip.NewReader(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer gzr.Close()
|
defer gzr.Close()
|
||||||
|
|
||||||
tr := tar.NewReader(gzr)
|
tr := tar.NewReader(gzr)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
header, err := tr.Next()
|
header, err := tr.Next()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
@ -82,9 +78,7 @@ func unpackPackage(filePath, packageName string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
target := filepath.Join(destDir, header.Name)
|
target := filepath.Join(destDir, header.Name)
|
||||||
|
|
||||||
switch header.Typeflag {
|
switch header.Typeflag {
|
||||||
case tar.TypeDir:
|
case tar.TypeDir:
|
||||||
if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil {
|
if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil {
|
||||||
@ -100,8 +94,6 @@ func unpackPackage(filePath, packageName string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
outFile.Close()
|
outFile.Close()
|
||||||
default:
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -133,6 +125,7 @@ func saveInstalledPackage(name string, m *manifest.Manifest) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeInstalledPackageRecord(name string) {
|
func removeInstalledPackageRecord(name string) {
|
||||||
|
// Здесь можно удалить запись из базы или файла
|
||||||
}
|
}
|
||||||
|
|
||||||
func InstallPackage(name string) error {
|
func InstallPackage(name string) error {
|
||||||
@ -140,7 +133,6 @@ func InstallPackage(name string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("не удалось получить манифест: %w", err)
|
return fmt.Errorf("не удалось получить манифест: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.ToLower(m.Mode) == "bin" {
|
if strings.ToLower(m.Mode) == "bin" {
|
||||||
platformKey := runtime.GOOS + "_" + runtime.GOARCH
|
platformKey := runtime.GOOS + "_" + runtime.GOARCH
|
||||||
binaryURL, ok := m.Binaries[platformKey]
|
binaryURL, ok := m.Binaries[platformKey]
|
||||||
@ -152,7 +144,6 @@ func InstallPackage(name string) error {
|
|||||||
return fmt.Errorf("не удалось скачать бинарник: %w", err)
|
return fmt.Errorf("не удалось скачать бинарник: %w", err)
|
||||||
}
|
}
|
||||||
defer os.Remove(packageFile)
|
defer os.Remove(packageFile)
|
||||||
|
|
||||||
checksum, err := computeChecksum(packageFile)
|
checksum, err := computeChecksum(packageFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
|
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
|
||||||
@ -160,7 +151,6 @@ func InstallPackage(name string) error {
|
|||||||
if checksum != m.Checksum {
|
if checksum != m.Checksum {
|
||||||
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
|
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil {
|
if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -180,7 +170,6 @@ func InstallPackage(name string) error {
|
|||||||
return fmt.Errorf("не удалось скачать пакет: %w", err)
|
return fmt.Errorf("не удалось скачать пакет: %w", err)
|
||||||
}
|
}
|
||||||
defer os.Remove(packageFile)
|
defer os.Remove(packageFile)
|
||||||
|
|
||||||
checksum, err := computeChecksum(packageFile)
|
checksum, err := computeChecksum(packageFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
|
return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err)
|
||||||
@ -188,23 +177,19 @@ func InstallPackage(name string) error {
|
|||||||
if checksum != m.Checksum {
|
if checksum != m.Checksum {
|
||||||
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
|
return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := unpackPackage(packageFile, name); err != nil {
|
if err := unpackPackage(packageFile, name); err != nil {
|
||||||
return fmt.Errorf("не удалось распаковать пакет: %w", err)
|
return fmt.Errorf("не удалось распаковать пакет: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(m.Build) > 0 {
|
if len(m.Build) > 0 {
|
||||||
if err := executeBuildCommands(m.Build, name); err != nil {
|
if err := executeBuildCommands(m.Build, name); err != nil {
|
||||||
return fmt.Errorf("ошибка выполнения команд сборки: %w", err)
|
return fmt.Errorf("ошибка выполнения команд сборки: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := saveInstalledPackage(name, m); err != nil {
|
if err := saveInstalledPackage(name, m); err != nil {
|
||||||
return fmt.Errorf("не удалось сохранить информацию об установленном пакете: %w", err)
|
return fmt.Errorf("не удалось сохранить информацию об установленном пакете: %w", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.New("неизвестный режим пакета")
|
return errors.New("неизвестный режим пакета")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
pkg/paths/paths.go
Normal file
14
pkg/paths/paths.go
Normal 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")
|
||||||
|
}
|
@ -2,10 +2,11 @@ package version
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"train/pkg/paths"
|
||||||
)
|
)
|
||||||
|
|
||||||
type VersionInfo struct {
|
type VersionInfo struct {
|
||||||
@ -13,7 +14,7 @@ type VersionInfo struct {
|
|||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var versionDir = "./versions"
|
var versionDir = filepath.Join(paths.BaseDir(), "versions")
|
||||||
|
|
||||||
func SaveVersionInfo(pkgName, ver string) error {
|
func SaveVersionInfo(pkgName, ver string) error {
|
||||||
if err := os.MkdirAll(versionDir, os.ModePerm); err != nil {
|
if err := os.MkdirAll(versionDir, os.ModePerm); err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user