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  }