mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-05 02:57:41 +08:00
bake: merge vars from multiple JSON files
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
c317ca1e95
commit
cad7ed68be
@ -621,7 +621,7 @@ func TestHCLBuiltinVars(t *testing.T) {
|
|||||||
require.Equal(t, "test", *c.Targets[0].Dockerfile)
|
require.Equal(t, "test", *c.Targets[0].Dockerfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCombineHCLAndJSON(t *testing.T) {
|
func TestCombineHCLAndJSONTargets(t *testing.T) {
|
||||||
c, err := ParseFiles([]File{
|
c, err := ParseFiles([]File{
|
||||||
{
|
{
|
||||||
Name: "docker-bake.hcl",
|
Name: "docker-bake.hcl",
|
||||||
@ -696,3 +696,52 @@ target "b" {
|
|||||||
require.Equal(t, ".", *c.Targets[3].Context)
|
require.Equal(t, ".", *c.Targets[3].Context)
|
||||||
require.Equal(t, "b", *c.Targets[3].Target)
|
require.Equal(t, "b", *c.Targets[3].Target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCombineHCLAndJSONVars(t *testing.T) {
|
||||||
|
c, err := ParseFiles([]File{
|
||||||
|
{
|
||||||
|
Name: "docker-bake.hcl",
|
||||||
|
Data: []byte(`
|
||||||
|
variable "ABC" {
|
||||||
|
default = "foo"
|
||||||
|
}
|
||||||
|
variable "DEF" {
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
group "default" {
|
||||||
|
targets = ["one"]
|
||||||
|
}
|
||||||
|
target "one" {
|
||||||
|
args = {
|
||||||
|
a = "pre-${ABC}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
target "two" {
|
||||||
|
args = {
|
||||||
|
b = "pre-${DEF}"
|
||||||
|
}
|
||||||
|
}`),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "foo.json",
|
||||||
|
Data: []byte(`{"variable": {"DEF": {"default": "bar"}}, "target": { "one": { "args": {"a": "pre-${ABC}-${DEF}"}} } }`),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "bar.json",
|
||||||
|
Data: []byte(`{"ABC": "ghi", "DEF": "jkl"}`),
|
||||||
|
},
|
||||||
|
}, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, 1, len(c.Groups))
|
||||||
|
require.Equal(t, "default", c.Groups[0].Name)
|
||||||
|
require.Equal(t, []string{"one"}, c.Groups[0].Targets)
|
||||||
|
|
||||||
|
require.Equal(t, 2, len(c.Targets))
|
||||||
|
|
||||||
|
require.Equal(t, c.Targets[0].Name, "one")
|
||||||
|
require.Equal(t, map[string]string{"a": "pre-ghi-jkl"}, c.Targets[0].Args)
|
||||||
|
|
||||||
|
require.Equal(t, c.Targets[1].Name, "two")
|
||||||
|
require.Equal(t, map[string]string{"b": "pre-jkl"}, c.Targets[1].Args)
|
||||||
|
}
|
||||||
|
@ -302,7 +302,7 @@ func Parse(b hcl.Body, opt Opt, val interface{}) hcl.Diagnostics {
|
|||||||
|
|
||||||
attrs, diags := b.JustAttributes()
|
attrs, diags := b.JustAttributes()
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
if d := removeAttributesDiags(diags, reserved); len(d) > 0 {
|
if d := removeAttributesDiags(diags, reserved, p.vars); len(d) > 0 {
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -513,7 +513,7 @@ func setLabel(v reflect.Value, lbl string) int {
|
|||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{}) hcl.Diagnostics {
|
func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{}, vars map[string]*variable) hcl.Diagnostics {
|
||||||
var fdiags hcl.Diagnostics
|
var fdiags hcl.Diagnostics
|
||||||
for _, d := range diags {
|
for _, d := range diags {
|
||||||
if fout := func(d *hcl.Diagnostic) bool {
|
if fout := func(d *hcl.Diagnostic) bool {
|
||||||
@ -529,6 +529,12 @@ func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{})
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for v := range vars {
|
||||||
|
// Do the same for global variables
|
||||||
|
if strings.HasPrefix(d.Detail, fmt.Sprintf(`Argument "%s" was already set at `, v)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}(d); !fout {
|
}(d); !fout {
|
||||||
fdiags = append(fdiags, d)
|
fdiags = append(fdiags, d)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user