Compare commits
2 Commits
00a56fa985
...
bf5a670f80
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bf5a670f80 | ||
![]() |
b9fe96e56c |
@ -1,5 +1,5 @@
|
||||
{
|
||||
"repositories": [
|
||||
"https://xn--80abmlgju2eo3byb.xn--p1ai/repo"
|
||||
]
|
||||
"repo": "https://xn--80abmlgju2eo3byb.xn--p1ai/repo.json",
|
||||
"repositories": [],
|
||||
"packages": {}
|
||||
}
|
||||
|
@ -43,10 +43,8 @@ func BuildNewBinary(tarballURL string) (buildDir string, newBinPath string, err
|
||||
return "", "", fmt.Errorf("failed to unpack tarball: %w", err)
|
||||
}
|
||||
|
||||
// Пытаемся найти go.mod в корне распакованного архива
|
||||
goModPath := filepath.Join(tmpDir, "go.mod")
|
||||
if _, err := os.Stat(goModPath); os.IsNotExist(err) {
|
||||
// Если не найден, проверяем, есть ли ровно один подкаталог
|
||||
entries, err := ioutil.ReadDir(tmpDir)
|
||||
if err != nil {
|
||||
os.RemoveAll(tmpDir)
|
||||
|
@ -2,33 +2,35 @@ package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"train/pkg/paths"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Repo string `json:"repo"`
|
||||
Repositories []string `json:"repositories"`
|
||||
Packages map[string]string `json:"packages"`
|
||||
}
|
||||
|
||||
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"
|
||||
home, err := os.UserHomeDir()
|
||||
if err == nil {
|
||||
railsConfig := filepath.Join(home, ".rails", "config", "config.json")
|
||||
if _, err := os.Stat(railsConfig); err == nil {
|
||||
configFile = railsConfig
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Repositories []string `json:"repositories"`
|
||||
Packages map[string]string `json:"packages"`
|
||||
configFile = "./config.json"
|
||||
}
|
||||
|
||||
func LoadConfig() (*Config, error) {
|
||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||
cfg := &Config{
|
||||
Repo: "",
|
||||
Repositories: []string{},
|
||||
Packages: make(map[string]string),
|
||||
}
|
||||
@ -63,7 +65,7 @@ func AddRepository(repo string) error {
|
||||
}
|
||||
for _, r := range cfg.Repositories {
|
||||
if r == repo {
|
||||
return errors.New("репозиторий уже добавлен")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
cfg.Repositories = append(cfg.Repositories, repo)
|
||||
@ -76,16 +78,10 @@ func RemoveRepository(repo string) error {
|
||||
return err
|
||||
}
|
||||
newRepos := []string{}
|
||||
found := false
|
||||
for _, r := range cfg.Repositories {
|
||||
if r == repo {
|
||||
found = true
|
||||
continue
|
||||
if r != repo {
|
||||
newRepos = append(newRepos, r)
|
||||
}
|
||||
newRepos = append(newRepos, r)
|
||||
}
|
||||
if !found {
|
||||
return errors.New("репозиторий не найден")
|
||||
}
|
||||
cfg.Repositories = newRepos
|
||||
return SaveConfig(cfg)
|
||||
|
@ -249,4 +249,4 @@ func GetPackageInfo(name string) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
return string(data), nil
|
||||
}
|
||||
}
|
@ -31,6 +31,12 @@ func FetchManifest(name string) (*Manifest, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if cfg.Repo != "" {
|
||||
m, err := FetchManifestFromRepo(cfg.Repo, name)
|
||||
if err == nil {
|
||||
return m, nil
|
||||
}
|
||||
}
|
||||
if url, ok := cfg.Packages[name]; ok {
|
||||
return fetchManifestFromURL(url)
|
||||
}
|
||||
@ -44,7 +50,7 @@ func FetchManifest(name string) (*Manifest, error) {
|
||||
lastErr = err
|
||||
}
|
||||
if lastErr == nil {
|
||||
lastErr = errors.New("не найден ни один репозиторий")
|
||||
lastErr = errors.New("no repository found")
|
||||
}
|
||||
return nil, lastErr
|
||||
}
|
||||
@ -56,7 +62,7 @@ func fetchManifestFromURL(url string) (*Manifest, error) {
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, errors.New("манифест пакета не найден по ссылке " + url)
|
||||
return nil, errors.New("manifest not found at " + url)
|
||||
}
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
@ -67,4 +73,4 @@ func fetchManifestFromURL(url string) (*Manifest, error) {
|
||||
return nil, err
|
||||
}
|
||||
return &m, nil
|
||||
}
|
||||
}
|
42
pkg/manifest/repo.go
Normal file
42
pkg/manifest/repo.go
Normal file
@ -0,0 +1,42 @@
|
||||
package manifest
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type RepoPackage struct {
|
||||
Name string `json:"name"`
|
||||
Manifest string `json:"manifest"`
|
||||
}
|
||||
|
||||
type RepoFile struct {
|
||||
Packages []RepoPackage `json:"packages"`
|
||||
}
|
||||
|
||||
func FetchManifestFromRepo(repoURL, pkgName string) (*Manifest, error) {
|
||||
resp, err := http.Get(repoURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, fmt.Errorf("repo file not found at %s", repoURL)
|
||||
}
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var rf RepoFile
|
||||
if err := json.Unmarshal(data, &rf); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, rp := range rf.Packages {
|
||||
if rp.Name == pkgName {
|
||||
return fetchManifestFromURL(rp.Manifest)
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("package %s not found in repo", pkgName)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user