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  }