| 
						
						
						
					 | 
					 | 
					@ -1,7 +1,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					package bake
 | 
					 | 
					 | 
					 | 
					package bake
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import (
 | 
					 | 
					 | 
					 | 
					import (
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"os"
 | 
					 | 
					 | 
					 | 
						"reflect"
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"testing"
 | 
					 | 
					 | 
					 | 
						"testing"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"github.com/stretchr/testify/require"
 | 
					 | 
					 | 
					 | 
						"github.com/stretchr/testify/require"
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -54,7 +54,7 @@ func TestHCLBasic(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[1].Args))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[1].Args))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "123", c.Targets[1].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("123"), c.Targets[1].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[2].Name, "cross")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[2].Name, "cross")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets[2].Platforms))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets[2].Platforms))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -62,7 +62,7 @@ func TestHCLBasic(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[3].Name, "webapp-plus")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[3].Name, "webapp-plus")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[3].Args))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[3].Args))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, map[string]string{"IAMCROSS": "true"}, c.Targets[3].Args)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, map[string]*string{"IAMCROSS": ptrstr("true")}, c.Targets[3].Args)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLBasicInJSON(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLBasicInJSON(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -114,7 +114,7 @@ func TestHCLBasicInJSON(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[1].Args))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[1].Args))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "123", c.Targets[1].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("123"), c.Targets[1].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[2].Name, "cross")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[2].Name, "cross")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets[2].Platforms))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets[2].Platforms))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -122,7 +122,7 @@ func TestHCLBasicInJSON(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[3].Name, "webapp-plus")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[3].Name, "webapp-plus")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[3].Args))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets[3].Args))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, map[string]string{"IAMCROSS": "true"}, c.Targets[3].Args)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, map[string]*string{"IAMCROSS": ptrstr("true")}, c.Targets[3].Args)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLWithFunctions(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLWithFunctions(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -147,7 +147,7 @@ func TestHCLWithFunctions(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "124", c.Targets[0].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("124"), c.Targets[0].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLWithUserDefinedFunctions(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLWithUserDefinedFunctions(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -177,7 +177,7 @@ func TestHCLWithUserDefinedFunctions(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "124", c.Targets[0].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("124"), c.Targets[0].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLWithVariables(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLWithVariables(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -206,9 +206,9 @@ func TestHCLWithVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "123", c.Targets[0].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("123"), c.Targets[0].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("BUILD_NUMBER", "456")
 | 
					 | 
					 | 
					 | 
						t.Setenv("BUILD_NUMBER", "456")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -219,7 +219,7 @@ func TestHCLWithVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "456", c.Targets[0].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("456"), c.Targets[0].Args["buildno"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLWithVariablesInFunctions(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLWithVariablesInFunctions(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -244,7 +244,7 @@ func TestHCLWithVariablesInFunctions(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, []string{"user/repo:v1"}, c.Targets[0].Tags)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"user/repo:v1"}, c.Targets[0].Tags)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("REPO", "docker/buildx")
 | 
					 | 
					 | 
					 | 
						t.Setenv("REPO", "docker/buildx")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -280,10 +280,10 @@ func TestHCLMultiFileSharedVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-abc", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-abc"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "abc-post", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("abc-post"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "def")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "def")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -293,12 +293,11 @@ func TestHCLMultiFileSharedVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-def", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-def"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "def-post", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("def-post"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLVarsWithVars(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLVarsWithVars(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Unsetenv("FOO")
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								default = upper("${BASE}def")
 | 
					 | 
					 | 
					 | 
								default = upper("${BASE}def")
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -330,10 +329,10 @@ func TestHCLVarsWithVars(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre--ABCDEF-", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre--ABCDEF-"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "ABCDEF-post", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("ABCDEF-post"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("BASE", "new")
 | 
					 | 
					 | 
					 | 
						t.Setenv("BASE", "new")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -343,12 +342,11 @@ func TestHCLVarsWithVars(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre--NEWDEF-", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre--NEWDEF-"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "NEWDEF-post", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("NEWDEF-post"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLTypedVariables(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLTypedVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Unsetenv("FOO")
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								default = 3
 | 
					 | 
					 | 
					 | 
								default = 3
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -369,33 +367,80 @@ func TestHCLTypedVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "lower", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("lower"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "yes", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("yes"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "5.1")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "5.1")
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("IS_FOO", "0")
 | 
					 | 
					 | 
					 | 
						t.Setenv("IS_FOO", "0")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "higher", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("higher"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "no", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("no"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "NaN")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "NaN")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						_, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						_, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Contains(t, err.Error(), "failed to parse FOO as number")
 | 
					 | 
					 | 
					 | 
						require.Contains(t, err.Error(), "failed to parse FOO as number")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "0")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "0")
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("IS_FOO", "maybe")
 | 
					 | 
					 | 
					 | 
						t.Setenv("IS_FOO", "maybe")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						_, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						_, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Contains(t, err.Error(), "failed to parse IS_FOO as bool")
 | 
					 | 
					 | 
					 | 
						require.Contains(t, err.Error(), "failed to parse IS_FOO as bool")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func TestHCLNullVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								default = null
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							target "default" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								args = {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									foo = FOO
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							}`)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						c, err := ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr(nil), c.Targets[0].Args["foo"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "bar")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("bar"), c.Targets[0].Args["foo"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func TestJSONNullVariables(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						dt := []byte(`{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							"variable": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								"FOO": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									"default": null
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							"target": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								"default": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									"args": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
										"foo": "${FOO}"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}`)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						c, err := ParseFile(dt, "docker-bake.json")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr(nil), c.Targets[0].Args["foo"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "bar")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.json")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("bar"), c.Targets[0].Args["foo"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLVariableCycle(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLVariableCycle(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -431,16 +476,16 @@ func TestHCLAttrs(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "attr-abcdef", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("attr-abcdef"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// env does not apply if no variable
 | 
					 | 
					 | 
					 | 
						// env does not apply if no variable
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "bar")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "bar")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						c, err = ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "attr-abcdef", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("attr-abcdef"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// attr-multifile
 | 
					 | 
					 | 
					 | 
						// attr-multifile
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -549,11 +594,10 @@ func TestHCLAttrsCustomType(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, []string{"linux/arm64", "linux/amd64"}, c.Targets[0].Platforms)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"linux/arm64", "linux/amd64"}, c.Targets[0].Platforms)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "linux/arm64", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("linux/arm64"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLMultiFileAttrs(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLMultiFileAttrs(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Unsetenv("FOO")
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
					 | 
					 | 
					 | 
						dt := []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
					 | 
					 | 
					 | 
							variable "FOO" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								default = "abc"
 | 
					 | 
					 | 
					 | 
								default = "abc"
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -575,9 +619,9 @@ func TestHCLMultiFileAttrs(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-def", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-def"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						os.Setenv("FOO", "ghi")
 | 
					 | 
					 | 
					 | 
						t.Setenv("FOO", "ghi")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
					 | 
					 | 
					 | 
						c, err = ParseFiles([]File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
					 | 
					 | 
					 | 
							{Data: dt, Name: "c1.hcl"},
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -587,7 +631,7 @@ func TestHCLMultiFileAttrs(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-ghi", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-ghi"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestJSONAttributes(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestJSONAttributes(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -598,7 +642,7 @@ func TestJSONAttributes(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-abc-def", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-abc-def"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestJSONFunctions(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestJSONFunctions(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -623,7 +667,7 @@ func TestJSONFunctions(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "pre-<FOO-abc>", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("pre-<FOO-abc>"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLFunctionInAttr(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLFunctionInAttr(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -651,7 +695,7 @@ func TestHCLFunctionInAttr(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "FOO <> [baz]", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("FOO <> [baz]"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLCombineCompose(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLCombineCompose(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -682,8 +726,8 @@ services:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "app")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "foo", c.Targets[0].Args["v1"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("foo"), c.Targets[0].Args["v1"])
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "bar", c.Targets[0].Args["v2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ptrstr("bar"), c.Targets[0].Args["v2"])
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "dir", *c.Targets[0].Context)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "dir", *c.Targets[0].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "Dockerfile-alternate", *c.Targets[0].Dockerfile)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "Dockerfile-alternate", *c.Targets[0].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -828,10 +872,10 @@ target "two" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(c.Targets))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[0].Name, "one")
 | 
					 | 
					 | 
					 | 
						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, map[string]*string{"a": ptrstr("pre-ghi-jkl")}, c.Targets[0].Args)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "two")
 | 
					 | 
					 | 
					 | 
						require.Equal(t, c.Targets[1].Name, "two")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, map[string]string{"b": "pre-jkl"}, c.Targets[1].Args)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, map[string]*string{"b": ptrstr("pre-jkl")}, c.Targets[1].Args)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestEmptyVariableJSON(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestEmptyVariableJSON(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -882,3 +926,12 @@ func TestVarUnsupportedType(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						_, err := ParseFile(dt, "docker-bake.hcl")
 | 
					 | 
					 | 
					 | 
						_, err := ParseFile(dt, "docker-bake.hcl")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func ptrstr(s interface{}) *string {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						var n *string = nil
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if reflect.ValueOf(s).Kind() == reflect.String {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							ss := s.(string)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							n = &ss
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						return n
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
 
 |