mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	build: read body response to check for erroneous image export to docker
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		| @@ -46,17 +46,24 @@ func (c *Client) LoadImage(ctx context.Context, name string, status progress.Wri | ||||
| 	w = &waitingWriter{ | ||||
| 		PipeWriter: pw, | ||||
| 		f: func() { | ||||
| 			resp, err := dapi.ImageLoad(ctx, pr, false) | ||||
| 			defer close(done) | ||||
| 			if err != nil { | ||||
| 			handleErr := func(err error) { | ||||
| 				pr.CloseWithError(err) | ||||
| 				w.mu.Lock() | ||||
| 				w.err = err | ||||
| 				w.mu.Unlock() | ||||
| 			} | ||||
|  | ||||
| 			resp, err := dapi.ImageLoad(ctx, pr, false) | ||||
| 			defer close(done) | ||||
| 			if err != nil { | ||||
| 				handleErr(err) | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| 			prog := progress.WithPrefix(status, "", false) | ||||
| 			progress.FromReader(prog, "importing to docker", resp.Body) | ||||
| 			if err := fromReader(prog, "importing to docker", resp.Body); err != nil { | ||||
| 				handleErr(err) | ||||
| 			} | ||||
| 		}, | ||||
| 		done:   done, | ||||
| 		cancel: cancel, | ||||
|   | ||||
							
								
								
									
										47
									
								
								util/dockerutil/progress.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								util/dockerutil/progress.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| package dockerutil | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"io" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/docker/buildx/util/progress" | ||||
| 	"github.com/docker/cli/cli/streams" | ||||
| 	"github.com/docker/docker/pkg/jsonmessage" | ||||
| 	"github.com/moby/buildkit/client" | ||||
| 	"github.com/moby/buildkit/identity" | ||||
| 	"github.com/opencontainers/go-digest" | ||||
| ) | ||||
|  | ||||
| func fromReader(w progress.Writer, name string, rc io.ReadCloser) error { | ||||
| 	dgst := digest.FromBytes([]byte(identity.NewID())) | ||||
| 	tm := time.Now() | ||||
|  | ||||
| 	vtx := client.Vertex{ | ||||
| 		Digest:  dgst, | ||||
| 		Name:    name, | ||||
| 		Started: &tm, | ||||
| 	} | ||||
|  | ||||
| 	w.Write(&client.SolveStatus{ | ||||
| 		Vertexes: []*client.Vertex{&vtx}, | ||||
| 	}) | ||||
|  | ||||
| 	err := jsonmessage.DisplayJSONMessagesToStream(rc, streams.NewOut(io.Discard), nil) | ||||
| 	if err != nil { | ||||
| 		if jerr, ok := err.(*jsonmessage.JSONError); ok { | ||||
| 			err = errors.New(jerr.Message) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	tm2 := time.Now() | ||||
| 	vtx2 := vtx | ||||
| 	vtx2.Completed = &tm2 | ||||
| 	if err != nil { | ||||
| 		vtx2.Error = err.Error() | ||||
| 	} | ||||
| 	w.Write(&client.SolveStatus{ | ||||
| 		Vertexes: []*client.Vertex{&vtx2}, | ||||
| 	}) | ||||
| 	return err | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 CrazyMax
					CrazyMax