train-osource/pkg/manifest/manifest.go
wheelchairy 0fe28fc047 init
2025-02-04 15:49:54 +03:00

59 lines
1.4 KiB
Go

package manifest
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"train/pkg/config"
)
type Manifest struct {
Name string `json:"name"`
Version string `json:"version"`
Mode string `json:"mode"`
Source string `json:"source"`
Checksum string `json:"checksum"`
Dependencies []string `json:"dependencies"`
Build []string `json:"build"`
Binaries map[string]string `json:"binaries"`
runtime.GOOS+"_"+runtime.GOARCH
}
func FetchManifest(name string) (*Manifest, error) {
cfg, err := config.LoadConfig()
if err != nil {
return nil, err
}
var lastErr error
for _, repo := range cfg.Repositories {
url := fmt.Sprintf("%s/%s/manifest.json", repo, name)
resp, err := http.Get(url)
if err != nil {
lastErr = err
continue
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
lastErr = errors.New("пакет не найден в репозитории " + repo)
continue
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
lastErr = err
continue
}
var m Manifest
if err := json.Unmarshal(data, &m); err != nil {
lastErr = err
continue
}
return &m, nil
}
if lastErr == nil {
lastErr = errors.New("не найден ни один репозиторий")
}
return nil, lastErr
}