cli/bpcatalog/tf.go (54 lines of code) (raw):

package bpcatalog import ( "fmt" "strings" "github.com/google/go-github/v71/github" ) // sortOption defines the set of sort options for catalog. type sortOption string func (s *sortOption) String() string { return string(*s) } func (s *sortOption) Empty() bool { return s.String() == "" } func (s *sortOption) Set(v string) error { f, err := sortOptionFromString(v) if err != nil { return err } *s = f return nil } func sortOptionFromString(s string) (sortOption, error) { format := sortOption(s) for _, stage := range sortOptions { if format == stage { return format, nil } } return "", fmt.Errorf("one of %+v expected. unknown sort option: %s", sortOptions, s) } func (r *sortOption) Type() string { return "sortOption" } const ( sortStars sortOption = "stars" sortCreated sortOption = "created" sortName sortOption = "name" ) var ( sortOptions = []sortOption{sortStars, sortCreated, sortName} ) // fetchSortedTFRepos returns a slice of repos sorted by sortOpt. func fetchSortedTFRepos(gh *ghService, sortOpt sortOption) (repos, error) { repos, err := gh.fetchRepos() if err != nil { return nil, fmt.Errorf("error fetching repos: %w", err) } repos = repos.filter(func(r *github.Repository) bool { if r.GetArchived() { return false } return repoAllowList[r.GetName()] || (strings.HasPrefix(r.GetName(), "terraform-google") && !repoIgnoreList[r.GetName()]) }) return repos.sort(sortOpt) }