From c4748062f8b4d912d3664d76578271ea0e3cbcc0 Mon Sep 17 00:00:00 2001 From: Alik Khilazhev <7482065+alikhil@users.noreply.github.com> Date: Sun, 2 Nov 2025 15:26:57 +0100 Subject: [PATCH] fix recursive build Signed-off-by: Alik Khilazhev <7482065+alikhil@users.noreply.github.com> --- pkg/downloader/manager.go | 50 +++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 1213c48a0..beeaf4626 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -81,12 +81,47 @@ type Manager struct { ContentCache string } +func (m *Manager) clone() *Manager { + return &Manager{ + Out: m.Out, + ChartPath: m.ChartPath, + Verify: m.Verify, + Debug: m.Debug, + Keyring: m.Keyring, + SkipUpdate: m.SkipUpdate, + Getters: m.Getters, + RegistryClient: m.RegistryClient, + RepositoryConfig: m.RepositoryConfig, + RepositoryCache: m.RepositoryCache, + ContentCache: m.ContentCache, + } +} + // Build rebuilds a local charts directory from a lockfile. // // If the lockfile is not present, this will run a Manager.Update() // // If SkipUpdate is set, this will not update the repository. func (m *Manager) Build(recursive bool) error { + if recursive { + depChartPaths, err := m.locateLocalDependencies(m.ChartPath, false) + + if err != nil { + return err + } + + for _, depChartPath := range depChartPaths { + subManager := m.clone() + subManager.ChartPath = depChartPath + if err := subManager.Build(recursive); err != nil { + return err + } + } + } + return m.doBuild(recursive) +} + +func (m *Manager) doBuild(recursive bool) error { c, err := m.loadChartDir(m.ChartPath) if err != nil { return err @@ -165,19 +200,8 @@ func (m *Manager) Update(recursive bool) error { } for _, depChartPath := range depChartPaths { - subManager := &Manager{ - Out: m.Out, - ChartPath: depChartPath, - Verify: m.Verify, - Debug: m.Debug, - Keyring: m.Keyring, - SkipUpdate: m.SkipUpdate, - Getters: m.Getters, - RegistryClient: m.RegistryClient, - RepositoryConfig: m.RepositoryConfig, - RepositoryCache: m.RepositoryCache, - ContentCache: m.ContentCache, - } + subManager := m.clone() + subManager.ChartPath = depChartPath if err := subManager.Update(recursive); err != nil { return err }