Skip to content

Commit 7884339

Browse files
authored
Merge pull request #2333 from tonistiigi/v0.13.1-picks
[v0.13] cherry-picks for v0.13.1
2 parents 37b7ad1 + 7e24604 commit 7884339

9 files changed

Lines changed: 106 additions & 12 deletions

File tree

bake/bake_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,25 @@ func TestPushOverride(t *testing.T) {
259259

260260
require.Equal(t, 1, len(m["app"].Outputs))
261261
require.Equal(t, "type=image,push=true", m["app"].Outputs[0])
262+
263+
fp = File{
264+
Name: "docker-bake.hcl",
265+
Data: []byte(
266+
`target "foo" {
267+
output = [ "type=local,dest=out" ]
268+
}
269+
target "bar" {
270+
}`),
271+
}
272+
ctx = context.TODO()
273+
m, _, err = ReadTargets(ctx, []File{fp}, []string{"foo", "bar"}, []string{"*.push=true"}, nil)
274+
require.NoError(t, err)
275+
276+
require.Equal(t, 2, len(m))
277+
require.Equal(t, 1, len(m["foo"].Outputs))
278+
require.Equal(t, []string{"type=local,dest=out"}, m["foo"].Outputs)
279+
require.Equal(t, 1, len(m["bar"].Outputs))
280+
require.Equal(t, []string{"type=image,push=true"}, m["bar"].Outputs)
262281
}
263282

264283
func TestReadTargetsCompose(t *testing.T) {

builder/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func (b *Builder) LoadNodes(ctx context.Context, opts ...LoadNodesOption) (_ []N
142142
}
143143
}
144144

145-
d, err := driver.GetDriver(ctx, "buildx_buildkit_"+n.Name, factory, n.Endpoint, dockerapi, imageopt.Auth, kcc, n.BuildkitdFlags, n.Files, n.DriverOpts, n.Platforms, b.opts.contextPathHash, lno.dialMeta)
145+
d, err := driver.GetDriver(ctx, driver.BuilderName(n.Name), factory, n.Endpoint, dockerapi, imageopt.Auth, kcc, n.BuildkitdFlags, n.Files, n.DriverOpts, n.Platforms, b.opts.contextPathHash, lno.dialMeta)
146146
if err != nil {
147147
node.Err = err
148148
return nil

commands/bake.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba
7272

7373
overrides := in.overrides
7474
if in.exportPush {
75-
overrides = append(overrides, "*.output=type=registry")
75+
overrides = append(overrides, "*.push=true")
7676
}
7777
if in.exportLoad {
7878
overrides = append(overrides, "*.output=type=docker")

driver/driver.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"io"
66
"net"
7+
"strings"
78

89
"github.com/docker/buildx/store"
910
"github.com/docker/buildx/util/progress"
@@ -67,6 +68,19 @@ type Driver interface {
6768
Config() InitConfig
6869
}
6970

71+
const builderNamePrefix = "buildx_buildkit_"
72+
73+
func BuilderName(name string) string {
74+
return builderNamePrefix + name
75+
}
76+
77+
func ParseBuilderName(name string) (string, error) {
78+
if !strings.HasPrefix(name, builderNamePrefix) {
79+
return "", errors.Errorf("invalid builder name %q, must have %q prefix", name, builderNamePrefix)
80+
}
81+
return strings.TrimPrefix(name, builderNamePrefix), nil
82+
}
83+
7084
func Boot(ctx, clientContext context.Context, d *DriverHandle, pw progress.Writer) (*client.Client, error) {
7185
try := 0
7286
for {

driver/kubernetes/factory.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,10 @@ func (f *factory) AllowsInstances() bool {
244244
// eg. "buildx_buildkit_loving_mendeleev0" -> "loving-mendeleev0"
245245
func buildxNameToDeploymentName(bx string) (string, error) {
246246
// TODO: commands.util.go should not pass "buildx_buildkit_" prefix to drivers
247-
if !strings.HasPrefix(bx, "buildx_buildkit_") {
248-
return "", errors.Errorf("expected a string with \"buildx_buildkit_\", got %q", bx)
247+
s, err := driver.ParseBuilderName(bx)
248+
if err != nil {
249+
return "", err
249250
}
250-
s := strings.TrimPrefix(bx, "buildx_buildkit_")
251251
s = strings.ReplaceAll(s, "_", "-")
252252
return s, nil
253253
}

driver/kubernetes/factory_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestFactory_processDriverOpts(t *testing.T) {
2929
}
3030

3131
cfg := driver.InitConfig{
32-
Name: "buildx_buildkit_test",
32+
Name: driver.BuilderName("test"),
3333
KubeClientConfig: &kcc,
3434
}
3535
f := factory{}

driver/remote/driver.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
util "github.com/docker/buildx/driver/remote/util"
1414
"github.com/docker/buildx/util/progress"
1515
"github.com/moby/buildkit/client"
16+
"github.com/moby/buildkit/client/connhelper"
1617
"github.com/moby/buildkit/util/tracing/detect"
1718
"github.com/pkg/errors"
1819
)
@@ -95,7 +96,16 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) {
9596
}
9697

9798
func (d *Driver) Dial(ctx context.Context) (net.Conn, error) {
98-
network, addr, ok := strings.Cut(d.InitConfig.EndpointAddr, "://")
99+
addr := d.InitConfig.EndpointAddr
100+
ch, err := connhelper.GetConnectionHelper(addr)
101+
if err != nil {
102+
return nil, err
103+
}
104+
if ch != nil {
105+
return ch.ContextDialer(ctx, addr)
106+
}
107+
108+
network, addr, ok := strings.Cut(addr, "://")
99109
if !ok {
100110
return nil, errors.Errorf("invalid endpoint address: %s", d.InitConfig.EndpointAddr)
101111
}

tests/bake.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -778,11 +778,11 @@ target "default" {
778778
outb, err := cmd.CombinedOutput()
779779
require.NoError(t, err, string(outb))
780780

781-
// test registry
782-
desc, provider, err := contentutil.ProviderFromRef(target)
783-
require.NoError(t, err)
784-
_, err = testutil.ReadImages(sb.Context(), provider, desc)
785-
require.NoError(t, err)
781+
// TODO: test registry when --load case fixed for bake (currently overrides --push)
782+
//desc, provider, err := contentutil.ProviderFromRef(target)
783+
//require.NoError(t, err)
784+
//_, err = testutil.ReadImages(sb.Context(), provider, desc)
785+
//require.NoError(t, err)
786786

787787
// test docker store
788788
cmd = dockerCmd(sb, withArgs("image", "inspect", target))

tests/create.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package tests
22

33
import (
4+
"fmt"
5+
"os"
46
"strings"
57
"testing"
68

9+
"github.com/docker/buildx/driver"
10+
"github.com/moby/buildkit/identity"
711
"github.com/moby/buildkit/util/testutil/integration"
812
"github.com/stretchr/testify/require"
913
)
@@ -18,6 +22,7 @@ func createCmd(sb integration.Sandbox, opts ...cmdOpt) (string, error) {
1822
var createTests = []func(t *testing.T, sb integration.Sandbox){
1923
testCreateMemoryLimit,
2024
testCreateRestartAlways,
25+
testCreateRemoteContainer,
2126
}
2227

2328
func testCreateMemoryLimit(t *testing.T, sb integration.Sandbox) {
@@ -57,3 +62,49 @@ func testCreateRestartAlways(t *testing.T, sb integration.Sandbox) {
5762
require.NoError(t, err, out)
5863
builderName = strings.TrimSpace(out)
5964
}
65+
66+
func testCreateRemoteContainer(t *testing.T, sb integration.Sandbox) {
67+
if sb.Name() != "docker" {
68+
t.Skip("skipping test for non-docker workers")
69+
}
70+
71+
ctnBuilderName := "ctn-builder-" + identity.NewID()
72+
remoteBuilderName := "remote-builder-" + identity.NewID()
73+
var hasCtnBuilder, hasRemoteBuilder bool
74+
t.Cleanup(func() {
75+
if hasCtnBuilder {
76+
out, err := rmCmd(sb, withArgs(ctnBuilderName))
77+
require.NoError(t, err, out)
78+
}
79+
if hasRemoteBuilder {
80+
out, err := rmCmd(sb, withArgs(remoteBuilderName))
81+
require.NoError(t, err, out)
82+
}
83+
})
84+
85+
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--name", ctnBuilderName))
86+
require.NoError(t, err, out)
87+
hasCtnBuilder = true
88+
89+
out, err = inspectCmd(sb, withArgs("--bootstrap", ctnBuilderName))
90+
require.NoError(t, err, out)
91+
92+
cmd := dockerCmd(sb, withArgs("container", "inspect", fmt.Sprintf("%s0", driver.BuilderName(ctnBuilderName))))
93+
cmd.Stderr = os.Stderr
94+
require.NoError(t, cmd.Run())
95+
96+
out, err = createCmd(sb, withArgs("--driver", "remote", "--name", remoteBuilderName, fmt.Sprintf("docker-container://%s0", driver.BuilderName(ctnBuilderName))))
97+
require.NoError(t, err, out)
98+
hasRemoteBuilder = true
99+
100+
out, err = inspectCmd(sb, withArgs(remoteBuilderName))
101+
require.NoError(t, err, out)
102+
103+
for _, line := range strings.Split(out, "\n") {
104+
if v, ok := strings.CutPrefix(line, "Status:"); ok {
105+
require.Equal(t, strings.TrimSpace(v), "running")
106+
return
107+
}
108+
}
109+
require.Fail(t, "remote builder is not running")
110+
}

0 commit comments

Comments
 (0)