| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -3,6 +3,7 @@ package bake
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"context"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"os"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"sort"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"testing"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"github.com/stretchr/testify/require"
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -34,7 +35,7 @@ target "webapp" {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					ctx := context.TODO()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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.Equal(t, 1, len(m))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -43,6 +44,9 @@ target "webapp" {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						require.Equal(t, true, *m["webapp"].NoCache)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						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) {
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -56,7 +60,7 @@ target "webapp" {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							os.Setenv("VAR_FROMENV"+t.Name(), "fromEnv")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							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_EMPTY=",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"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_INHERITED"], "override")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, 1, len(g))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, []string{"webapp"}, g[0].Targets)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						})
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// building leaf but overriding parent fields
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						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_BOTH=override",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}, nil)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.NoError(t, err)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, m["webapp"].Args["VAR_INHERITED"], "override")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							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)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						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.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) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						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.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) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						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.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) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// 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.Equal(t, 2, len(m))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, "webDEP", m["webapp"].Args["VAR_INHERITED"])
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							require.Equal(t, "foo", *m["webDEP"].Dockerfile)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							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 {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							name      string
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							targets   []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",
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -150,18 +168,20 @@ target "webapp" {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								name:      "single target",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								targets:   []string{"webapp"},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								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.Equal(t, 1, len(m))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									require.Equal(t, "foo", *m["webapp"].Dockerfile)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									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",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								targets:   []string{"webapp"},
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									// instead of simply skipping that override.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									// Let's enforce the error and we can relax it later if users complain.
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -172,8 +192,8 @@ target "webapp" {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						for _, test := range cases {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							t.Run(test.name, func(t *testing.T) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								m, _, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								test.check(t, m, err)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								m, g, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								test.check(t, m, g, err)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							})
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					})
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -260,16 +280,21 @@ services:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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.Equal(t, 3, len(m))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					_, ok := m["newservice"]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.True(t, ok)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.Equal(t, "Dockerfile.webapp", *m["webapp"].Dockerfile)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.Equal(t, ".", *m["webapp"].Context)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.Equal(t, "1", m["webapp"].Args["buildno"])
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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) {
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -282,7 +307,7 @@ func TestHCLCwdPrefix(t *testing.T) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}`),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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.Equal(t, 1, len(m))
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -294,6 +319,9 @@ func TestHCLCwdPrefix(t *testing.T) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.Equal(t, "test", *m["app"].Dockerfile)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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) {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -324,3 +352,177 @@ func TestOverrideMerge(t *testing.T) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					require.Equal(t, 1, len(m["app"].Outputs))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					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)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |