github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/scripts/charmhub/locate-series-less-charms.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "context" 8 "fmt" 9 "log" 10 11 "github.com/juju/loggo" 12 "gopkg.in/yaml.v3" 13 14 "github.com/juju/juju/charmhub" 15 ) 16 17 // The following program attempts to locate series-less charms on charmhub. 18 // These charms will not have a series or a map of containers. 19 func main() { 20 client, err := charmhub.NewClient(charmhub.Config{ 21 Logger: loggo.GetLogger("series"), 22 }) 23 if err != nil { 24 log.Fatal(err) 25 } 26 results, err := client.Find(context.TODO(), "") 27 if err != nil { 28 log.Fatal(err) 29 } 30 31 type metadata struct { 32 Series []string `yaml:"series"` 33 Containers map[string]interface{} `yaml:"containers"` 34 } 35 36 for _, result := range results { 37 if result.Type == "bundle" { 38 continue 39 } 40 41 info, err := client.Info(context.TODO(), result.Name) 42 if err != nil { 43 log.Fatal(err) 44 } 45 46 var meta metadata 47 if err := yaml.Unmarshal([]byte(info.DefaultRelease.Revision.MetadataYAML), &meta); err != nil { 48 log.Fatal(err) 49 } 50 51 if len(meta.Series) == 0 && len(meta.Containers) == 0 { 52 fmt.Println(result.Name) 53 } 54 } 55 }