Skip to content

Commit f5c2673

Browse files
authored
Merge pull request #184 from cpuguy83/bake_args_from_env
Support reading from env on bake --set <t>.args
2 parents 8e92bfc + 6634f1e commit f5c2673

File tree

2 files changed

+55
-8
lines changed

2 files changed

+55
-8
lines changed

bake/bake.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,17 @@ func mergeConfig(c1, c2 Config) Config {
107107

108108
func (c Config) setOverrides(v []string) error {
109109
for _, v := range v {
110+
110111
parts := strings.SplitN(v, "=", 2)
111-
if len(parts) != 2 {
112-
return errors.Errorf("invalid override %s, expected target.name=value", v)
113-
}
114112
keys := strings.SplitN(parts[0], ".", 3)
115113
if len(keys) < 2 {
116114
return errors.Errorf("invalid override key %s, expected target.name", parts[0])
117115
}
118116

119117
name := keys[0]
118+
if len(parts) != 2 && keys[1] != "args" {
119+
return errors.Errorf("invalid override %s, expected target.name=value", v)
120+
}
120121

121122
t, ok := c.Target[name]
122123
if !ok {
@@ -135,7 +136,14 @@ func (c Config) setOverrides(v []string) error {
135136
if t.Args == nil {
136137
t.Args = map[string]string{}
137138
}
138-
t.Args[keys[2]] = parts[1]
139+
if len(parts) < 2 {
140+
v, ok := os.LookupEnv(keys[2])
141+
if ok {
142+
t.Args[keys[2]] = v
143+
}
144+
} else {
145+
t.Args[keys[2]] = parts[1]
146+
}
139147
case "labels":
140148
if len(keys) != 3 {
141149
return errors.Errorf("invalid key %s, lanels requires name", parts[0])

bake/bake_test.go

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,50 @@ target "webapp" {
2929

3030
ctx := context.TODO()
3131

32-
m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, nil)
33-
require.NoError(t, err)
32+
t.Run("NoOverrides", func(t *testing.T) {
33+
m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, nil)
34+
require.NoError(t, err)
35+
36+
require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
37+
require.Equal(t, ".", *m["webapp"].Context)
38+
})
39+
40+
t.Run("ArgsOverrides", func(t *testing.T) {
41+
os.Setenv("VAR_FROMENV"+t.Name(), "fromEnv")
42+
defer os.Unsetenv("VAR_FROM_ENV" + t.Name())
43+
44+
m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, []string{
45+
"webapp.args.VAR_UNSET",
46+
"webapp.args.VAR_EMPTY=",
47+
"webapp.args.VAR_SET=bananas",
48+
"webapp.args.VAR_FROMENV" + t.Name(),
49+
})
50+
require.NoError(t, err)
51+
52+
require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
53+
require.Equal(t, ".", *m["webapp"].Context)
54+
55+
_, isSet := m["webapp"].Args["VAR_UNSET"]
56+
require.False(t, isSet, m["webapp"].Args["VAR_UNSET"])
57+
58+
_, isSet = m["webapp"].Args["VAR_EMPTY"]
59+
require.True(t, isSet, m["webapp"].Args["VAR_EMPTY"])
60+
61+
require.Equal(t, m["webapp"].Args["VAR_SET"], "bananas")
62+
63+
require.Equal(t, m["webapp"].Args["VAR_FROMENV"+t.Name()], "fromEnv")
64+
})
65+
66+
t.Run("ContextOverride", func(t *testing.T) {
67+
_, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, []string{"webapp.context"})
68+
require.NotNil(t, err)
69+
70+
m, err := ReadTargets(ctx, []string{fp}, []string{"webapp"}, []string{"webapp.context=foo"})
71+
require.NoError(t, err)
72+
73+
require.Equal(t, "foo", *m["webapp"].Context)
74+
})
3475

35-
require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
36-
require.Equal(t, ".", *m["webapp"].Context)
3776
}
3877

3978
func TestReadTargetsCompose(t *testing.T) {

0 commit comments

Comments
 (0)