From 3f7231f035ef0807238c6fe75602465f29f592d3 Mon Sep 17 00:00:00 2001 From: "l.aminov" Date: Tue, 17 Jul 2018 18:01:50 +0500 Subject: [PATCH] Fail on failed chart repository update --- cmd/helm/repo_update.go | 18 ++++++++++++------ pkg/downloader/manager.go | 9 ++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/cmd/helm/repo_update.go b/cmd/helm/repo_update.go index 51e5c0868..9cf48d224 100644 --- a/cmd/helm/repo_update.go +++ b/cmd/helm/repo_update.go @@ -40,7 +40,7 @@ future releases. var errNoRepositories = errors.New("no repositories found. You must add one before updating") type repoUpdateCmd struct { - update func([]*repo.ChartRepository, io.Writer, helmpath.Home) + update func([]*repo.ChartRepository, io.Writer, helmpath.Home) error home helmpath.Home out io.Writer } @@ -80,14 +80,15 @@ func (u *repoUpdateCmd) run() error { } repos = append(repos, r) } - - u.update(repos, u.out, u.home) - return nil + return u.update(repos, u.out, u.home) } -func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Home) { +func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Home) error { fmt.Fprintln(out, "Hang tight while we grab the latest from your chart repositories...") - var wg sync.WaitGroup + var ( + errorCounter int + wg sync.WaitGroup + ) for _, re := range repos { wg.Add(1) go func(re *repo.ChartRepository) { @@ -98,6 +99,7 @@ func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Ho } err := re.DownloadIndexFile(home.Cache()) if err != nil { + errorCounter++ fmt.Fprintf(out, "...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err) } else { fmt.Fprintf(out, "...Successfully got an update from the %q chart repository\n", re.Config.Name) @@ -105,5 +107,9 @@ func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Ho }(re) } wg.Wait() + if errorCounter != 0 { + return errors.New("Update Failed. Check log for details") + } fmt.Fprintln(out, "Update Complete. ⎈ Happy Helming!⎈ ") + return nil } diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 9ee1f6f6d..e94c4042c 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -445,7 +445,10 @@ func (m *Manager) UpdateRepositories() error { func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error { out := m.Out fmt.Fprintln(out, "Hang tight while we grab the latest from your chart repositories...") - var wg sync.WaitGroup + var ( + errorCounter int + wg sync.WaitGroup + ) for _, c := range repos { r, err := repo.NewChartRepository(c, m.Getters) if err != nil { @@ -454,6 +457,7 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error { wg.Add(1) go func(r *repo.ChartRepository) { if err := r.DownloadIndexFile(m.HelmHome.Cache()); err != nil { + errorCounter++ fmt.Fprintf(out, "...Unable to get an update from the %q chart repository (%s):\n\t%s\n", r.Config.Name, r.Config.URL, err) } else { fmt.Fprintf(out, "...Successfully got an update from the %q chart repository\n", r.Config.Name) @@ -462,6 +466,9 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error { }(r) } wg.Wait() + if errorCounter != 0 { + return errors.New("Update Failed. Check log for details") + } fmt.Fprintln(out, "Update Complete. ⎈Happy Helming!⎈") return nil }