From 77ddee9314c59de0a29ee4779d8a642776540adf Mon Sep 17 00:00:00 2001 From: Tibor Vass Date: Thu, 30 Apr 2020 13:44:32 -0700 Subject: [PATCH] bake: fix pull and no-cache overrides Signed-off-by: Tibor Vass --- bake/bake.go | 27 +++++++++++++++++++++------ bake/bake_test.go | 15 +++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/bake/bake.go b/bake/bake.go index 9608eed6..26c0e0f2 100644 --- a/bake/bake.go +++ b/bake/bake.go @@ -227,13 +227,13 @@ func (c Config) newOverrides(v []string) (map[string]*Target, error) { if err != nil { return nil, errors.Errorf("invalid value %s for boolean key no-cache", parts[1]) } - t.NoCache = noCache + t.NoCache = &noCache case "pull": pull, err := strconv.ParseBool(parts[1]) if err != nil { return nil, errors.Errorf("invalid value %s for boolean key pull", parts[1]) } - t.Pull = pull + t.Pull = &pull default: return nil, errors.Errorf("unknown key: %s", keys[1]) } @@ -348,8 +348,8 @@ type Target struct { SSH []string `json:"ssh,omitempty" hcl:"ssh,optional"` Platforms []string `json:"platforms,omitempty" hcl:"platforms,optional"` Outputs []string `json:"output,omitempty" hcl:"output,optional"` - Pull bool `json:"pull,omitempty" hcl:"pull,optional"` - NoCache bool `json:"no-cache,omitempty" hcl:"no-cache,optional"` + Pull *bool `json:"pull,omitempty" hcl:"pull,optional"` + NoCache *bool `json:"no-cache,omitempty" hcl:"no-cache,optional"` // IMPORTANT: if you add more fields here, do not forget to update newOverrides and README. } @@ -396,6 +396,15 @@ func toBuildOpt(t *Target) (*build.Options, error) { dockerfilePath = path.Join(contextPath, dockerfilePath) } + noCache := false + if t.NoCache != nil { + noCache = *t.NoCache + } + pull := false + if t.Pull != nil { + pull = *t.Pull + } + bo := &build.Options{ Inputs: build.Inputs{ ContextPath: contextPath, @@ -404,8 +413,8 @@ func toBuildOpt(t *Target) (*build.Options, error) { Tags: t.Tags, BuildArgs: t.Args, Labels: t.Labels, - NoCache: t.NoCache, - Pull: t.Pull, + NoCache: noCache, + Pull: pull, } platforms, err := platformutil.Parse(t.Platforms) @@ -500,6 +509,12 @@ func merge(t1, t2 *Target) *Target { if t2.Outputs != nil { // no merge t1.Outputs = t2.Outputs } + if t2.Pull != nil { + t1.Pull = t2.Pull + } + if t2.NoCache != nil { + t1.NoCache = t2.NoCache + } t1.Inherits = append(t1.Inherits, t2.Inherits...) return t1 } diff --git a/bake/bake_test.go b/bake/bake_test.go index 7c296756..49d64981 100644 --- a/bake/bake_test.go +++ b/bake/bake_test.go @@ -23,6 +23,7 @@ target "webDEP" { VAR_INHERITED = "webDEP" VAR_BOTH = "webDEP" } + no-cache = true } target "webapp" { @@ -44,6 +45,8 @@ target "webapp" { require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile) require.Equal(t, ".", *m["webapp"].Context) require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"]) + require.Equal(t, true, *m["webapp"].NoCache) + require.Nil(t, m["webapp"].Pull) }) t.Run("InvalidTargetOverrides", func(t *testing.T) { @@ -106,6 +109,18 @@ target "webapp" { require.Equal(t, "foo", *m["webapp"].Context) }) + t.Run("NoCacheOverride", func(t *testing.T) { + m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, []string{"webapp.no-cache=false"}) + require.NoError(t, err) + require.Equal(t, false, *m["webapp"].NoCache) + }) + + t.Run("PullOverride", func(t *testing.T) { + m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, []string{"webapp.pull=false"}) + require.NoError(t, err) + require.Equal(t, false, *m["webapp"].Pull) + }) + t.Run("PatternOverride", func(t *testing.T) { // same check for two cases multiTargetCheck := func(t *testing.T, m map[string]*Target, err error) {