From cbf5b8b1e7b4c6de1eed70af5a12955c91638e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=9B=B8=E8=BD=A9?= <9570112+nauxliu@users.noreply.github.com> Date: Thu, 12 Sep 2019 16:58:16 +0800 Subject: [PATCH] Fix helm2 lock file does not get updated (#847) Ref: https://github.com/helm/helm/issues/2731 --- go.mod | 1 + go.sum | 3 ++- pkg/state/chart_dependency.go | 25 ++++++++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 5350184a..ba922cb2 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/huandu/xstrings v1.2.0 // indirect github.com/imdario/mergo v0.3.6 github.com/pkg/errors v0.8.1 // indirect + github.com/r3labs/diff v0.0.0-20190801153147-a71de73c46ad github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939 github.com/urfave/cli v0.0.0-20160620154522-6011f165dc28 go.uber.org/atomic v1.3.2 // indirect diff --git a/go.sum b/go.sum index bddd8bc8..8673da10 100644 --- a/go.sum +++ b/go.sum @@ -6,7 +6,6 @@ dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= @@ -107,6 +106,8 @@ github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/r3labs/diff v0.0.0-20190801153147-a71de73c46ad h1:j5pg/OewZJyE6i3hIG4v3eQUvUyFdQkC8Nd/mjaEkxE= +github.com/r3labs/diff v0.0.0-20190801153147-a71de73c46ad/go.mod h1:ozniNEFS3j1qCwHKdvraMn1WJOsUxHd7lYfukEIS4cs= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= diff --git a/pkg/state/chart_dependency.go b/pkg/state/chart_dependency.go index c489d75e..7b564b06 100644 --- a/pkg/state/chart_dependency.go +++ b/pkg/state/chart_dependency.go @@ -3,6 +3,7 @@ package state import ( "fmt" "github.com/Masterminds/semver" + "github.com/r3labs/diff" "github.com/roboll/helmfile/pkg/helmexec" "go.uber.org/zap" "gopkg.in/yaml.v2" @@ -323,13 +324,13 @@ func (m *chartDependencyManager) doUpdate(chartLockFile string, unresolved *Unre // Generate `requirements.lock` of the temporary local chart by coping `.lock` lockFile := m.lockFileName() - lockFileContent, err := m.readBytes(lockFile) + originalLockFileContent, err := m.readBytes(lockFile) if err != nil && !os.IsNotExist(err) { return nil, err } - if lockFileContent != nil { - if err := m.writeBytes(filepath.Join(wd, chartLockFile), lockFileContent); err != nil { + if isHelm3() && originalLockFileContent != nil { + if err := m.writeBytes(filepath.Join(wd, chartLockFile), originalLockFileContent); err != nil { return nil, err } } @@ -354,6 +355,24 @@ func (m *chartDependencyManager) doUpdate(chartLockFile string, unresolved *Unre return lockedReqs.ResolvedDependencies[i].ChartName < lockedReqs.ResolvedDependencies[j].ChartName }) + // Don't update lock file if no dependency updated. + if !isHelm3() && originalLockFileContent != nil { + originalLockedReqs := &ChartLockedRequirements{} + if err := yaml.Unmarshal(originalLockFileContent, originalLockedReqs); err != nil { + return nil, err + } + + changes, err := diff.Diff(originalLockedReqs.ResolvedDependencies, lockedReqs.ResolvedDependencies) + + if err != nil { + return nil, err + } + + if len(changes) == 0 { + lockedReqs.Generated = originalLockedReqs.Generated + } + } + updatedLockFileContent, err = yaml.Marshal(lockedReqs) if err != nil {