| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3,6 +3,7 @@ package bake
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import (
 | 
					 | 
					 | 
					 | 
					import (
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"context"
 | 
					 | 
					 | 
					 | 
						"context"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"os"
 | 
					 | 
					 | 
					 | 
						"os"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						"sort"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"testing"
 | 
					 | 
					 | 
					 | 
						"testing"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						"github.com/stretchr/testify/require"
 | 
					 | 
					 | 
					 | 
						"github.com/stretchr/testify/require"
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -34,7 +35,7 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t.Run("NoOverrides", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
						t.Run("NoOverrides", func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, nil, nil)
 | 
					 | 
					 | 
					 | 
							m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, nil, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(m))
 | 
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -43,6 +44,9 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
					 | 
					 | 
					 | 
							require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, true, *m["webapp"].NoCache)
 | 
					 | 
					 | 
					 | 
							require.Equal(t, true, *m["webapp"].NoCache)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Nil(t, m["webapp"].Pull)
 | 
					 | 
					 | 
					 | 
							require.Nil(t, m["webapp"].Pull)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t.Run("InvalidTargetOverrides", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
						t.Run("InvalidTargetOverrides", func(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -56,7 +60,7 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								os.Setenv("VAR_FROMENV"+t.Name(), "fromEnv")
 | 
					 | 
					 | 
					 | 
								os.Setenv("VAR_FROMENV"+t.Name(), "fromEnv")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								defer os.Unsetenv("VAR_FROM_ENV" + t.Name())
 | 
					 | 
					 | 
					 | 
								defer os.Unsetenv("VAR_FROM_ENV" + t.Name())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
 | 
					 | 
					 | 
					 | 
								m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									"webapp.args.VAR_UNSET",
 | 
					 | 
					 | 
					 | 
									"webapp.args.VAR_UNSET",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									"webapp.args.VAR_EMPTY=",
 | 
					 | 
					 | 
					 | 
									"webapp.args.VAR_EMPTY=",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									"webapp.args.VAR_SET=bananas",
 | 
					 | 
					 | 
					 | 
									"webapp.args.VAR_SET=bananas",
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -81,17 +85,23 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_BOTH"], "webapp")
 | 
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_BOTH"], "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_INHERITED"], "override")
 | 
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_INHERITED"], "override")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							})
 | 
					 | 
					 | 
					 | 
							})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							// building leaf but overriding parent fields
 | 
					 | 
					 | 
					 | 
							// building leaf but overriding parent fields
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							t.Run("parent", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
							t.Run("parent", func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
 | 
					 | 
					 | 
					 | 
								m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									"webDEP.args.VAR_INHERITED=override",
 | 
					 | 
					 | 
					 | 
									"webDEP.args.VAR_INHERITED=override",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									"webDEP.args.VAR_BOTH=override",
 | 
					 | 
					 | 
					 | 
									"webDEP.args.VAR_BOTH=override",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}, nil)
 | 
					 | 
					 | 
					 | 
								}, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
								require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_INHERITED"], "override")
 | 
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_INHERITED"], "override")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_BOTH"], "webapp")
 | 
					 | 
					 | 
					 | 
								require.Equal(t, m["webapp"].Args["VAR_BOTH"], "webapp")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							})
 | 
					 | 
					 | 
					 | 
							})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -99,40 +109,48 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							_, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context"}, nil)
 | 
					 | 
					 | 
					 | 
							_, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context"}, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.NotNil(t, err)
 | 
					 | 
					 | 
					 | 
							require.NotNil(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context=foo"}, nil)
 | 
					 | 
					 | 
					 | 
							m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context=foo"}, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, "foo", *m["webapp"].Context)
 | 
					 | 
					 | 
					 | 
							require.Equal(t, "foo", *m["webapp"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t.Run("NoCacheOverride", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
						t.Run("NoCacheOverride", func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.no-cache=false"}, nil)
 | 
					 | 
					 | 
					 | 
							m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.no-cache=false"}, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, false, *m["webapp"].NoCache)
 | 
					 | 
					 | 
					 | 
							require.Equal(t, false, *m["webapp"].NoCache)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t.Run("PullOverride", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
						t.Run("PullOverride", func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.pull=false"}, nil)
 | 
					 | 
					 | 
					 | 
							m, g, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.pull=false"}, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
							require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							require.Equal(t, false, *m["webapp"].Pull)
 | 
					 | 
					 | 
					 | 
							require.Equal(t, false, *m["webapp"].Pull)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t.Run("PatternOverride", func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
						t.Run("PatternOverride", func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							// same check for two cases
 | 
					 | 
					 | 
					 | 
							// same check for two cases
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							multiTargetCheck := func(t *testing.T, m map[string]*Target, err error) {
 | 
					 | 
					 | 
					 | 
							multiTargetCheck := func(t *testing.T, m map[string]*Target, g []*Group, err error) {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
								require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, 2, len(m))
 | 
					 | 
					 | 
					 | 
								require.Equal(t, 2, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
					 | 
					 | 
					 | 
								require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
					 | 
					 | 
					 | 
								require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, "foo", *m["webDEP"].Dockerfile)
 | 
					 | 
					 | 
					 | 
								require.Equal(t, "foo", *m["webDEP"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								require.Equal(t, "webDEP", m["webDEP"].Args["VAR_INHERITED"])
 | 
					 | 
					 | 
					 | 
								require.Equal(t, "webDEP", m["webDEP"].Args["VAR_INHERITED"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								sort.Strings(g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								require.Equal(t, []string{"webDEP", "webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							cases := []struct {
 | 
					 | 
					 | 
					 | 
							cases := []struct {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								name      string
 | 
					 | 
					 | 
					 | 
								name      string
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								targets   []string
 | 
					 | 
					 | 
					 | 
								targets   []string
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								overrides []string
 | 
					 | 
					 | 
					 | 
								overrides []string
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								check     func(*testing.T, map[string]*Target, error)
 | 
					 | 
					 | 
					 | 
								check     func(*testing.T, map[string]*Target, []*Group, error)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}{
 | 
					 | 
					 | 
					 | 
							}{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								{
 | 
					 | 
					 | 
					 | 
								{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									name:      "multi target single pattern",
 | 
					 | 
					 | 
					 | 
									name:      "multi target single pattern",
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -150,18 +168,20 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									name:      "single target",
 | 
					 | 
					 | 
					 | 
									name:      "single target",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									targets:   []string{"webapp"},
 | 
					 | 
					 | 
					 | 
									targets:   []string{"webapp"},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									overrides: []string{"web*.dockerfile=foo"},
 | 
					 | 
					 | 
					 | 
									overrides: []string{"web*.dockerfile=foo"},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									check: func(t *testing.T, m map[string]*Target, err error) {
 | 
					 | 
					 | 
					 | 
									check: func(t *testing.T, m map[string]*Target, g []*Group, err error) {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
										require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										require.Equal(t, 1, len(m))
 | 
					 | 
					 | 
					 | 
										require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
					 | 
					 | 
					 | 
										require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
					 | 
					 | 
					 | 
										require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
										require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
										require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									},
 | 
					 | 
					 | 
					 | 
									},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								},
 | 
					 | 
					 | 
					 | 
								},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								{
 | 
					 | 
					 | 
					 | 
								{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									name:      "nomatch",
 | 
					 | 
					 | 
					 | 
									name:      "nomatch",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									targets:   []string{"webapp"},
 | 
					 | 
					 | 
					 | 
									targets:   []string{"webapp"},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									overrides: []string{"nomatch*.dockerfile=foo"},
 | 
					 | 
					 | 
					 | 
									overrides: []string{"nomatch*.dockerfile=foo"},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									check: func(t *testing.T, m map[string]*Target, err error) {
 | 
					 | 
					 | 
					 | 
									check: func(t *testing.T, m map[string]*Target, g []*Group, err error) {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										// NOTE: I am unsure whether failing to match should always error out
 | 
					 | 
					 | 
					 | 
										// NOTE: I am unsure whether failing to match should always error out
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										// instead of simply skipping that override.
 | 
					 | 
					 | 
					 | 
										// instead of simply skipping that override.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										// Let's enforce the error and we can relax it later if users complain.
 | 
					 | 
					 | 
					 | 
										// Let's enforce the error and we can relax it later if users complain.
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -172,8 +192,8 @@ target "webapp" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							for _, test := range cases {
 | 
					 | 
					 | 
					 | 
							for _, test := range cases {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								t.Run(test.name, func(t *testing.T) {
 | 
					 | 
					 | 
					 | 
								t.Run(test.name, func(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									m, _, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
 | 
					 | 
					 | 
					 | 
									m, g, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									test.check(t, m, err)
 | 
					 | 
					 | 
					 | 
									test.check(t, m, g, err)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								})
 | 
					 | 
					 | 
					 | 
								})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						})
 | 
					 | 
					 | 
					 | 
						})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -260,16 +280,21 @@ services:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						m, _, err := ReadTargets(ctx, []File{fp, fp2}, []string{"default"}, nil, nil)
 | 
					 | 
					 | 
					 | 
						m, g, err := ReadTargets(ctx, []File{fp, fp2}, []string{"default"}, nil, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 3, len(m))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 3, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						_, ok := m["newservice"]
 | 
					 | 
					 | 
					 | 
						_, ok := m["newservice"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.True(t, ok)
 | 
					 | 
					 | 
					 | 
						require.True(t, ok)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["webapp"].Context)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["webapp"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "1", m["webapp"].Args["buildno"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "1", m["webapp"].Args["buildno"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "12", m["webapp"].Args["buildno2"])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "12", m["webapp"].Args["buildno2"])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						sort.Strings(g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"db", "newservice", "webapp"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestHCLCwdPrefix(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestHCLCwdPrefix(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -282,7 +307,7 @@ func TestHCLCwdPrefix(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}`),
 | 
					 | 
					 | 
					 | 
								}`),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						m, _, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
 | 
					 | 
					 | 
					 | 
						m, g, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -294,6 +319,9 @@ func TestHCLCwdPrefix(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "test", *m["app"].Dockerfile)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "test", *m["app"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "foo", *m["app"].Context)
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "foo", *m["app"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"app"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func TestOverrideMerge(t *testing.T) {
 | 
					 | 
					 | 
					 | 
					func TestOverrideMerge(t *testing.T) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -324,3 +352,177 @@ func TestOverrideMerge(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m["app"].Outputs))
 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m["app"].Outputs))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						require.Equal(t, "type=registry", m["app"].Outputs[0])
 | 
					 | 
					 | 
					 | 
						require.Equal(t, "type=registry", m["app"].Outputs[0])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func TestReadTargetsMixed(t *testing.T) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						t.Parallel()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						fTargetDefault := File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Name: "docker-bake2.hcl",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Data: []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					target "default" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  dockerfile = "test"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}`)}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						fTargetImage := File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Name: "docker-bake3.hcl",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Data: []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					target "image" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  dockerfile = "test"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}`)}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						fpHCL := File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Name: "docker-bake.hcl",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Data: []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					group "default" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  targets = ["image"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					target "nocache" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  no-cache = true
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					group "release" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  targets = ["image-release"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					target "image" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  inherits = ["nocache"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  output = ["type=docker"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					target "image-release" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  inherits = ["image"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  output = ["type=image,push=true"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  tags = ["user/app:latest"]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}`)}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						fpYML := File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Name: "docker-compose.yml",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Data: []byte(`
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					services:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  addon:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    build:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      context: .
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      dockerfile: ./Dockerfile
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      args:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CT_ECR: foo
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CT_TAG: bar
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    image: ct-addon:bar
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    environment:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      - NODE_ENV=test
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      - AWS_ACCESS_KEY_ID=dummy
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      - AWS_SECRET_ACCESS_KEY=dummy
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  aws:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    build:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      dockerfile: ./aws.Dockerfile
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      args:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CT_ECR: foo
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CT_TAG: bar
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    image: ct-fake-aws:bar`)}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						fpJSON := File{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Name: "docker-bake.json",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Data: []byte(`{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						 "group": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						   "default": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     "targets": [
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						       "image"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     ]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						   }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						 },
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						 "target": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						   "image": {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     "context": ".",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     "dockerfile": "Dockerfile",
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     "output": [
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						       "type=docker"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						     ]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						   }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						 }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}`)}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ctx := context.TODO()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err := ReadTargets(ctx, []File{fTargetDefault}, []string{"default"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 0, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "test", *m["default"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						_, _, err = ReadTargets(ctx, []File{fTargetImage}, []string{"default"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Error(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fTargetImage}, []string{"image"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "test", *m["image"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fTargetImage}, []string{"image"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "test", *m["image"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpHCL}, []string{"image-release"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image-release"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m["image-release"].Outputs))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "type=image,push=true", m["image-release"].Outputs[0])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpHCL}, []string{"image", "image-release"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image", "image-release"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["image"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m["image-release"].Outputs))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "type=image,push=true", m["image-release"].Outputs[0])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpYML, fpHCL}, []string{"default"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["image"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpJSON}, []string{"default"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"image"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["image"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpYML}, []string{"default"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						sort.Strings(g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"addon", "aws"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./Dockerfile", *m["addon"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./aws.Dockerfile", *m["aws"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpYML, fpHCL}, []string{"addon", "aws"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						sort.Strings(g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"addon", "aws"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 2, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./Dockerfile", *m["addon"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./aws.Dockerfile", *m["aws"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m, g, err = ReadTargets(ctx, []File{fpYML, fpHCL}, []string{"addon", "aws", "image"}, nil, nil)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.NoError(t, err)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 1, len(g))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						sort.Strings(g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, []string{"addon", "aws", "image"}, g[0].Targets)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, 3, len(m))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, ".", *m["image"].Context)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./Dockerfile", *m["addon"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						require.Equal(t, "./aws.Dockerfile", *m["aws"].Dockerfile)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
 
 |