github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/build_manifests.go (about)

     1  package plan
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"sync"
     7  
     8  	"github.com/helmwave/helmwave/pkg/parallel"
     9  	"github.com/helmwave/helmwave/pkg/release"
    10  )
    11  
    12  func (p *Plan) buildManifest(ctx context.Context) error {
    13  	wg := parallel.NewWaitGroup()
    14  	wg.Add(len(p.body.Releases))
    15  
    16  	mu := &sync.Mutex{}
    17  
    18  	for _, rel := range p.body.Releases {
    19  		go p.buildReleaseManifest(ctx, wg, rel, mu)
    20  	}
    21  
    22  	return wg.Wait()
    23  }
    24  
    25  func (p *Plan) buildReleaseManifest(ctx context.Context, wg *parallel.WaitGroup, rel release.Config, mu *sync.Mutex) {
    26  	defer wg.Done()
    27  
    28  	l := rel.Logger()
    29  
    30  	if err := rel.ChartDepsUpd(); err != nil {
    31  		l.WithError(err).Warn("❌ can't get dependencies")
    32  	}
    33  
    34  	r, err := rel.SyncDryRun(ctx, true)
    35  	if err != nil || r == nil {
    36  		l.Errorf("❌ can't get manifests: %v", err)
    37  		wg.ErrChan() <- err
    38  
    39  		return
    40  	}
    41  
    42  	hm := ""
    43  	if !rel.HooksDisabled() {
    44  		for _, h := range r.Hooks {
    45  			hm += fmt.Sprintf("---\n# Source: %s\n%s\n", h.Path, h.Manifest)
    46  		}
    47  	}
    48  
    49  	document := r.Manifest
    50  	if len(r.Hooks) > 0 {
    51  		document += hm
    52  	}
    53  
    54  	l.Trace(document)
    55  
    56  	mu.Lock()
    57  	p.manifests[rel.Uniq()] = document
    58  	mu.Unlock()
    59  
    60  	l.Info("✅  manifest done")
    61  }