mirror of https://github.com/docker/buildx.git
				
				
				
			bake: fix groups print
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									202e99695b
								
							
						
					
					
						commit
						4466a24f9e
					
				
							
								
								
									
										31
									
								
								bake/bake.go
								
								
								
								
							
							
						
						
									
										31
									
								
								bake/bake.go
								
								
								
								
							|  | @ -108,12 +108,41 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string, | |||
| 			g = []*Group{{Targets: group.Targets}} | ||||
| 		} | ||||
| 	} else { | ||||
| 		g = []*Group{{Targets: targets}} | ||||
| 		var gt []string | ||||
| 		for _, target := range targets { | ||||
| 			isGroup := false | ||||
| 			for _, group := range c.Groups { | ||||
| 				if target == group.Name { | ||||
| 					gt = append(gt, group.Targets...) | ||||
| 					isGroup = true | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if !isGroup { | ||||
| 				gt = append(gt, target) | ||||
| 			} | ||||
| 		} | ||||
| 		g = []*Group{{Targets: dedupString(gt)}} | ||||
| 	} | ||||
| 
 | ||||
| 	return m, g, nil | ||||
| } | ||||
| 
 | ||||
| func dedupString(s []string) []string { | ||||
| 	if len(s) == 0 { | ||||
| 		return s | ||||
| 	} | ||||
| 	var res []string | ||||
| 	seen := make(map[string]struct{}) | ||||
| 	for _, val := range s { | ||||
| 		if _, ok := seen[val]; !ok { | ||||
| 			res = append(res, val) | ||||
| 			seen[val] = struct{}{} | ||||
| 		} | ||||
| 	} | ||||
| 	return res | ||||
| } | ||||
| 
 | ||||
| func ParseFiles(files []File, defaults map[string]string) (_ *Config, err error) { | ||||
| 	defer func() { | ||||
| 		err = formatHCLError(err, files) | ||||
|  |  | |||
|  | @ -203,7 +203,7 @@ func TestPushOverride(t *testing.T) { | |||
| 	t.Parallel() | ||||
| 
 | ||||
| 	fp := File{ | ||||
| 		Name: "docker-bake.hc", | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte( | ||||
| 			`target "app" { | ||||
| 				output = ["type=image,compression=zstd"] | ||||
|  | @ -217,7 +217,7 @@ func TestPushOverride(t *testing.T) { | |||
| 	require.Equal(t, "type=image,compression=zstd,push=true", m["app"].Outputs[0]) | ||||
| 
 | ||||
| 	fp = File{ | ||||
| 		Name: "docker-bake.hc", | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte( | ||||
| 			`target "app" { | ||||
| 				output = ["type=image,compression=zstd"] | ||||
|  | @ -231,7 +231,7 @@ func TestPushOverride(t *testing.T) { | |||
| 	require.Equal(t, "type=image,compression=zstd,push=false", m["app"].Outputs[0]) | ||||
| 
 | ||||
| 	fp = File{ | ||||
| 		Name: "docker-bake.hc", | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte( | ||||
| 			`target "app" { | ||||
| 			}`), | ||||
|  | @ -353,50 +353,127 @@ func TestOverrideMerge(t *testing.T) { | |||
| 	require.Equal(t, "type=registry", m["app"].Outputs[0]) | ||||
| } | ||||
| 
 | ||||
| func TestReadTargetsMixed(t *testing.T) { | ||||
| func TestReadTargetsDefault(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	ctx := context.TODO() | ||||
| 
 | ||||
| 	fTargetDefault := File{ | ||||
| 		Name: "docker-bake2.hcl", | ||||
| 	f := File{ | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte(` | ||||
| target "default" { | ||||
|   dockerfile = "test" | ||||
| }`)} | ||||
| 
 | ||||
| 	fTargetImage := File{ | ||||
| 		Name: "docker-bake3.hcl", | ||||
| 	m, g, err := ReadTargets(ctx, []File{f}, []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) | ||||
| } | ||||
| 
 | ||||
| func TestReadTargetsSpecified(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	ctx := context.TODO() | ||||
| 
 | ||||
| 	f := File{ | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte(` | ||||
| target "image" { | ||||
|   dockerfile = "test" | ||||
| }`)} | ||||
| 
 | ||||
| 	fpHCL := File{ | ||||
| 	_, _, err := ReadTargets(ctx, []File{f}, []string{"default"}, nil, nil) | ||||
| 	require.Error(t, err) | ||||
| 
 | ||||
| 	m, g, err := ReadTargets(ctx, []File{f}, []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) | ||||
| } | ||||
| 
 | ||||
| func TestReadTargetsGroup(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	ctx := context.TODO() | ||||
| 
 | ||||
| 	f := File{ | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte(` | ||||
| group "foo" { | ||||
|   targets = ["image"] | ||||
| } | ||||
| target "image" { | ||||
|   dockerfile = "test" | ||||
| }`)} | ||||
| 
 | ||||
| 	m, g, err := ReadTargets(ctx, []File{f}, []string{"foo"}, 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) | ||||
| } | ||||
| 
 | ||||
| func TestReadTargetsGroupAndTarget(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	ctx := context.TODO() | ||||
| 
 | ||||
| 	f := File{ | ||||
| 		Name: "docker-bake.hcl", | ||||
| 		Data: []byte(` | ||||
| group "foo" { | ||||
|   targets = ["image"] | ||||
| } | ||||
| target "foo" { | ||||
|   dockerfile = "bar" | ||||
| } | ||||
| target "image" { | ||||
|   dockerfile = "test" | ||||
| }`)} | ||||
| 
 | ||||
| 	m, g, err := ReadTargets(ctx, []File{f}, []string{"foo"}, 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{f}, []string{"foo", "foo"}, 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) | ||||
| } | ||||
| 
 | ||||
| func TestReadTargetsMixed(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	ctx := context.TODO() | ||||
| 
 | ||||
| 	fhcl := 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{ | ||||
| 	fyml := File{ | ||||
| 		Name: "docker-compose.yml", | ||||
| 		Data: []byte(` | ||||
| services: | ||||
|  | @ -412,7 +489,6 @@ services: | |||
|       - NODE_ENV=test | ||||
|       - AWS_ACCESS_KEY_ID=dummy | ||||
|       - AWS_SECRET_ACCESS_KEY=dummy | ||||
| 
 | ||||
|   aws: | ||||
|     build: | ||||
|       dockerfile: ./aws.Dockerfile | ||||
|  | @ -421,7 +497,7 @@ services: | |||
|         CT_TAG: bar | ||||
|     image: ct-fake-aws:bar`)} | ||||
| 
 | ||||
| 	fpJSON := File{ | ||||
| 	fjson := File{ | ||||
| 		Name: "docker-bake.json", | ||||
| 		Data: []byte(`{ | ||||
| 	 "group": { | ||||
|  | @ -442,32 +518,15 @@ services: | |||
| 	 } | ||||
| 	}`)} | ||||
| 
 | ||||
| 	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) | ||||
| 	m, g, err := ReadTargets(ctx, []File{fhcl}, []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, "test", *m["image"].Dockerfile) | ||||
| 	require.Equal(t, 1, len(m["image"].Outputs)) | ||||
| 	require.Equal(t, "type=docker", m["image"].Outputs[0]) | ||||
| 
 | ||||
| 	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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fhcl}, []string{"image-release"}, nil, nil) | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, 1, len(g)) | ||||
| 	require.Equal(t, []string{"image-release"}, g[0].Targets) | ||||
|  | @ -475,7 +534,7 @@ services: | |||
| 	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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fhcl}, []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) | ||||
|  | @ -484,21 +543,21 @@ services: | |||
| 	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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fyml, fhcl}, []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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fjson}, []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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fyml}, []string{"default"}, nil, nil) | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, 1, len(g)) | ||||
| 	sort.Strings(g[0].Targets) | ||||
|  | @ -507,7 +566,7 @@ services: | |||
| 	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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fyml, fhcl}, []string{"addon", "aws"}, nil, nil) | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, 1, len(g)) | ||||
| 	sort.Strings(g[0].Targets) | ||||
|  | @ -516,7 +575,7 @@ services: | |||
| 	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) | ||||
| 	m, g, err = ReadTargets(ctx, []File{fyml, fhcl}, []string{"addon", "aws", "image"}, nil, nil) | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, 1, len(g)) | ||||
| 	sort.Strings(g[0].Targets) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue