mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 08:03:43 +08:00 
			
		
		
		
	mutualize builder logic
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		| @@ -16,6 +16,7 @@ import ( | ||||
|  | ||||
| 	"github.com/containerd/console" | ||||
| 	"github.com/docker/buildx/build" | ||||
| 	"github.com/docker/buildx/builder" | ||||
| 	"github.com/docker/buildx/monitor" | ||||
| 	"github.com/docker/buildx/util/buildflags" | ||||
| 	"github.com/docker/buildx/util/confutil" | ||||
| @@ -238,7 +239,19 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) { | ||||
| 		contextPathHash = in.contextPath | ||||
| 	} | ||||
|  | ||||
| 	imageID, res, err := buildTargets(ctx, dockerCli, map[string]build.Options{defaultTargetName: opts}, in.progress, contextPathHash, in.builder, in.metadataFile, in.invoke != "") | ||||
| 	b, err := builder.New(dockerCli, | ||||
| 		builder.WithName(in.builder), | ||||
| 		builder.WithContextPathHash(contextPathHash), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	nodes, err := b.LoadNodes(ctx, false) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	imageID, res, err := buildTargets(ctx, dockerCli, nodes, map[string]build.Options{defaultTargetName: opts}, in.progress, in.metadataFile, in.invoke != "") | ||||
| 	err = wrapBuildError(err, false) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @@ -255,7 +268,7 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) { | ||||
| 			return errors.Errorf("failed to configure terminal: %v", err) | ||||
| 		} | ||||
| 		err = monitor.RunMonitor(ctx, cfg, func(ctx context.Context) (*build.ResultContext, error) { | ||||
| 			_, rr, err := buildTargets(ctx, dockerCli, map[string]build.Options{defaultTargetName: opts}, in.progress, contextPathHash, in.builder, in.metadataFile, true) | ||||
| 			_, rr, err := buildTargets(ctx, dockerCli, nodes, map[string]build.Options{defaultTargetName: opts}, in.progress, in.metadataFile, true) | ||||
| 			return rr, err | ||||
| 		}, io.NopCloser(os.Stdin), nopCloser{os.Stdout}, nopCloser{os.Stderr}) | ||||
| 		if err != nil { | ||||
| @@ -276,12 +289,7 @@ type nopCloser struct { | ||||
|  | ||||
| func (c nopCloser) Close() error { return nil } | ||||
|  | ||||
| func buildTargets(ctx context.Context, dockerCli command.Cli, opts map[string]build.Options, progressMode, contextPathHash, instance string, metadataFile string, allowNoOutput bool) (imageID string, res *build.ResultContext, err error) { | ||||
| 	dis, err := getInstanceOrDefault(ctx, dockerCli, instance, contextPathHash) | ||||
| 	if err != nil { | ||||
| 		return "", nil, err | ||||
| 	} | ||||
|  | ||||
| func buildTargets(ctx context.Context, dockerCli command.Cli, nodes []builder.Node, opts map[string]build.Options, progressMode string, metadataFile string, allowNoOutput bool) (imageID string, res *build.ResultContext, err error) { | ||||
| 	ctx2, cancel := context.WithCancel(context.TODO()) | ||||
| 	defer cancel() | ||||
|  | ||||
| @@ -292,7 +300,7 @@ func buildTargets(ctx context.Context, dockerCli command.Cli, opts map[string]bu | ||||
|  | ||||
| 	var mu sync.Mutex | ||||
| 	var idx int | ||||
| 	resp, err := build.BuildWithResultHandler(ctx, dis, opts, dockerutil.NewClient(dockerCli), confutil.ConfigDir(dockerCli), printer, func(driverIndex int, gotRes *build.ResultContext) { | ||||
| 	resp, err := build.BuildWithResultHandler(ctx, nodes, opts, dockerutil.NewClient(dockerCli), confutil.ConfigDir(dockerCli), printer, func(driverIndex int, gotRes *build.ResultContext) { | ||||
| 		mu.Lock() | ||||
| 		defer mu.Unlock() | ||||
| 		if res == nil || driverIndex < idx { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 CrazyMax
					CrazyMax