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 }