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) }