github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/build_repos.go (about) 1 package plan 2 3 import ( 4 "os" 5 6 "github.com/helmwave/helmwave/pkg/release" 7 "github.com/helmwave/helmwave/pkg/repo" 8 log "github.com/sirupsen/logrus" 9 "helm.sh/helm/v3/pkg/registry" 10 ) 11 12 func (p *Plan) buildRepositories() (out []repo.Config, err error) { 13 return buildRepositories( 14 buildRepoMapTop(p.body.Releases), 15 p.body.Repositories, 16 ) 17 } 18 19 func buildRepositories(m map[string][]release.Config, in []repo.Config) (out []repo.Config, err error) { 20 for rep, releases := range m { 21 rm := releaseNames(releases) 22 23 l := log.WithField("repository", rep) 24 l.WithField("releases", rm).Debug("🗄 found releases that depend on repository") 25 26 if index, found := repo.IndexOfName(in, rep); found { 27 out = append(out, in[index]) 28 l.Info("🗄 repo has been added to the plan") 29 } else if repoIsLocal(rep) { 30 l.Info("🗄 it is local repo") 31 } else { 32 l.WithField("releases", rm).Warn("🗄 some releases depend on repository that is not defined") 33 34 return nil, repo.NewNotFoundError(rep) 35 } 36 } 37 38 return out, nil 39 } 40 41 func buildRepoMapTop(releases []release.Config) map[string][]release.Config { 42 m := make(map[string][]release.Config) 43 for _, rel := range releases { 44 // Added to map if is not OCI 45 if registry.IsOCI(rel.Chart().Name) { 46 continue 47 } 48 49 m[rel.Repo()] = append(m[rel.Repo()], rel) 50 } 51 52 return m 53 } 54 55 // repoIsLocal returns true if repo is a dir. 56 func repoIsLocal(repoString string) bool { 57 if repoString == "" { 58 return true 59 } 60 61 stat, err := os.Stat(repoString) 62 if (err == nil || !os.IsNotExist(err)) && stat.IsDir() { 63 return true 64 } 65 66 return false 67 }