Skip to content

Commit 3b45220

Browse files
authored
Merge pull request #3300 from crazy-max/history-bootstrap
history: bootstrap builder
2 parents 0c74726 + af0090e commit 3b45220

10 files changed

Lines changed: 65 additions & 94 deletions

File tree

commands/history/export.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,11 @@ type exportOptions struct {
2828
}
2929

3030
func runExport(ctx context.Context, dockerCli command.Cli, opts exportOptions) error {
31-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
31+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
3232
if err != nil {
3333
return err
3434
}
3535

36-
nodes, err := b.LoadNodes(ctx, builder.WithData())
37-
if err != nil {
38-
return err
39-
}
40-
for _, node := range nodes {
41-
if node.Err != nil {
42-
return node.Err
43-
}
44-
}
45-
4636
if len(opts.refs) == 0 {
4737
opts.refs = []string{""}
4838
}

commands/history/inspect.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/containerd/containerd/v2/core/content/proxy"
2121
"github.com/containerd/containerd/v2/core/images"
2222
"github.com/containerd/platforms"
23-
"github.com/docker/buildx/builder"
2423
"github.com/docker/buildx/localstate"
2524
"github.com/docker/buildx/util/cobrautil/completion"
2625
"github.com/docker/buildx/util/confutil"
@@ -158,21 +157,11 @@ func readAttr[T any](attrs map[string]string, k string, dest *T, f func(v string
158157
}
159158

160159
func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) error {
161-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
160+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
162161
if err != nil {
163162
return err
164163
}
165164

166-
nodes, err := b.LoadNodes(ctx)
167-
if err != nil {
168-
return err
169-
}
170-
for _, node := range nodes {
171-
if node.Err != nil {
172-
return node.Err
173-
}
174-
}
175-
176165
recs, err := queryRecords(ctx, opts.ref, nodes, nil)
177166
if err != nil {
178167
return err

commands/history/inspect_attachment.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66

77
"github.com/containerd/containerd/v2/core/content/proxy"
88
"github.com/containerd/platforms"
9-
"github.com/docker/buildx/builder"
109
"github.com/docker/buildx/util/cobrautil/completion"
1110
"github.com/docker/cli/cli/command"
1211
intoto "github.com/in-toto/in-toto-golang/in_toto"
@@ -27,21 +26,11 @@ type attachmentOptions struct {
2726
}
2827

2928
func runAttachment(ctx context.Context, dockerCli command.Cli, opts attachmentOptions) error {
30-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
29+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
3130
if err != nil {
3231
return err
3332
}
3433

35-
nodes, err := b.LoadNodes(ctx)
36-
if err != nil {
37-
return err
38-
}
39-
for _, node := range nodes {
40-
if node.Err != nil {
41-
return node.Err
42-
}
43-
}
44-
4534
recs, err := queryRecords(ctx, opts.ref, nodes, nil)
4635
if err != nil {
4736
return err

commands/history/logs.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"io"
66
"os"
77

8-
"github.com/docker/buildx/builder"
98
"github.com/docker/buildx/util/cobrautil/completion"
109
"github.com/docker/buildx/util/progress"
1110
"github.com/docker/cli/cli/command"
@@ -23,21 +22,11 @@ type logsOptions struct {
2322
}
2423

2524
func runLogs(ctx context.Context, dockerCli command.Cli, opts logsOptions) error {
26-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
25+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
2726
if err != nil {
2827
return err
2928
}
3029

31-
nodes, err := b.LoadNodes(ctx)
32-
if err != nil {
33-
return err
34-
}
35-
for _, node := range nodes {
36-
if node.Err != nil {
37-
return node.Err
38-
}
39-
}
40-
4130
recs, err := queryRecords(ctx, opts.ref, nodes, nil)
4231
if err != nil {
4332
return err

commands/history/ls.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"time"
1111

1212
"github.com/containerd/console"
13-
"github.com/docker/buildx/builder"
1413
"github.com/docker/buildx/localstate"
1514
"github.com/docker/buildx/util/cobrautil/completion"
1615
"github.com/docker/buildx/util/confutil"
@@ -47,21 +46,11 @@ type lsOptions struct {
4746
}
4847

4948
func runLs(ctx context.Context, dockerCli command.Cli, opts lsOptions) error {
50-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
49+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
5150
if err != nil {
5251
return err
5352
}
5453

55-
nodes, err := b.LoadNodes(ctx)
56-
if err != nil {
57-
return err
58-
}
59-
for _, node := range nodes {
60-
if node.Err != nil {
61-
return node.Err
62-
}
63-
}
64-
6554
queryOptions := &queryOptions{}
6655

6756
if opts.local {

commands/history/open.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66

7-
"github.com/docker/buildx/builder"
87
"github.com/docker/buildx/util/cobrautil/completion"
98
"github.com/docker/buildx/util/desktop"
109
"github.com/docker/cli/cli/command"
@@ -19,21 +18,11 @@ type openOptions struct {
1918
}
2019

2120
func runOpen(ctx context.Context, dockerCli command.Cli, opts openOptions) error {
22-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
21+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
2322
if err != nil {
2423
return err
2524
}
2625

27-
nodes, err := b.LoadNodes(ctx)
28-
if err != nil {
29-
return err
30-
}
31-
for _, node := range nodes {
32-
if node.Err != nil {
33-
return node.Err
34-
}
35-
}
36-
3726
recs, err := queryRecords(ctx, opts.ref, nodes, nil)
3827
if err != nil {
3928
return err

commands/history/rm.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"io"
66

7-
"github.com/docker/buildx/builder"
87
"github.com/docker/buildx/util/cobrautil/completion"
98
"github.com/docker/cli/cli/command"
109
"github.com/hashicorp/go-multierror"
@@ -21,21 +20,11 @@ type rmOptions struct {
2120
}
2221

2322
func runRm(ctx context.Context, dockerCli command.Cli, opts rmOptions) error {
24-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
23+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
2524
if err != nil {
2625
return err
2726
}
2827

29-
nodes, err := b.LoadNodes(ctx)
30-
if err != nil {
31-
return err
32-
}
33-
for _, node := range nodes {
34-
if node.Err != nil {
35-
return node.Err
36-
}
37-
}
38-
3928
errs := make([][]error, len(opts.refs))
4029
for i := range errs {
4130
errs[i] = make([]error, len(nodes))

commands/history/trace.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,11 @@ func loadTrace(ctx context.Context, ref string, nodes []builder.Node) (string, [
120120
}
121121

122122
func runTrace(ctx context.Context, dockerCli command.Cli, opts traceOptions) error {
123-
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
123+
nodes, err := loadNodes(ctx, dockerCli, opts.builder)
124124
if err != nil {
125125
return err
126126
}
127127

128-
nodes, err := b.LoadNodes(ctx)
129-
if err != nil {
130-
return err
131-
}
132-
for _, node := range nodes {
133-
if node.Err != nil {
134-
return node.Err
135-
}
136-
}
137-
138128
traceID, data, err := loadTrace(ctx, opts.ref, nodes)
139129
if err != nil {
140130
return err

commands/history/utils.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/docker/buildx/build"
1717
"github.com/docker/buildx/builder"
1818
"github.com/docker/buildx/localstate"
19+
"github.com/docker/cli/cli/command"
1920
controlapi "github.com/moby/buildkit/api/services/control"
2021
"github.com/moby/buildkit/util/gitutil"
2122
"github.com/pkg/errors"
@@ -421,3 +422,28 @@ func cutAny(s string, seps ...string) (before, after, sep string, found bool) {
421422
}
422423
return s, "", "", false
423424
}
425+
426+
func loadNodes(ctx context.Context, dockerCli command.Cli, builderName string) ([]builder.Node, error) {
427+
b, err := builder.New(dockerCli, builder.WithName(builderName))
428+
if err != nil {
429+
return nil, err
430+
}
431+
nodes, err := b.LoadNodes(ctx, builder.WithData())
432+
if err != nil {
433+
return nil, err
434+
}
435+
if ok, err := b.Boot(ctx); err != nil {
436+
return nil, err
437+
} else if ok {
438+
nodes, err = b.LoadNodes(ctx, builder.WithData())
439+
if err != nil {
440+
return nil, err
441+
}
442+
}
443+
for _, node := range nodes {
444+
if node.Err != nil {
445+
return nil, node.Err
446+
}
447+
}
448+
return nodes, nil
449+
}

tests/history.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var historyTests = []func(t *testing.T, sb integration.Sandbox){
1919
testHistoryInspect,
2020
testHistoryLs,
2121
testHistoryRm,
22+
testHistoryLsStoppedBuilder,
2223
}
2324

2425
func testHistoryExport(t *testing.T, sb integration.Sandbox) {
@@ -105,6 +106,36 @@ func testHistoryRm(t *testing.T, sb integration.Sandbox) {
105106
require.NoError(t, err, string(out))
106107
}
107108

109+
func testHistoryLsStoppedBuilder(t *testing.T, sb integration.Sandbox) {
110+
if !isDockerContainerWorker(sb) {
111+
t.Skip("only testing with docker-container worker")
112+
}
113+
114+
var builderName string
115+
t.Cleanup(func() {
116+
if builderName == "" {
117+
return
118+
}
119+
out, err := rmCmd(sb, withArgs(builderName))
120+
require.NoError(t, err, out)
121+
})
122+
123+
out, err := createCmd(sb, withArgs("--driver", "docker-container"))
124+
require.NoError(t, err, out)
125+
builderName = strings.TrimSpace(out)
126+
127+
ref := buildTestProject(t, sb)
128+
require.NotEmpty(t, ref.Ref)
129+
130+
cmd := buildxCmd(sb, withArgs("stop", builderName))
131+
bout, err := cmd.CombinedOutput()
132+
require.NoError(t, err, string(bout))
133+
134+
cmd = buildxCmd(sb, withArgs("history", "ls", "--builder="+builderName, "--filter=ref="+ref.Ref, "--format=json"))
135+
bout, err = cmd.CombinedOutput()
136+
require.NoError(t, err, string(bout))
137+
}
138+
108139
type buildRef struct {
109140
Builder string
110141
Node string

0 commit comments

Comments
 (0)