mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	Add a --prefer-index flag that allows you to specify the preferred behavior when deciding on how to create an image/manifest from a single source.
Signed-off-by: Tim Smith <tismith@rvohealth.com>
This commit is contained in:
		| @@ -608,7 +608,7 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s | |||||||
| 								} | 								} | ||||||
| 							} | 							} | ||||||
|  |  | ||||||
| 							dt, desc, err := itpull.Combine(ctx, srcs, nil) | 							dt, desc, err := itpull.Combine(ctx, srcs, nil, false) | ||||||
| 							if err != nil { | 							if err != nil { | ||||||
| 								return err | 								return err | ||||||
| 							} | 							} | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ type createOptions struct { | |||||||
| 	dryrun       bool | 	dryrun       bool | ||||||
| 	actionAppend bool | 	actionAppend bool | ||||||
| 	progress     string | 	progress     string | ||||||
|  | 	preferIndex  bool | ||||||
| } | } | ||||||
|  |  | ||||||
| func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, args []string) error { | func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, args []string) error { | ||||||
| @@ -153,7 +154,7 @@ func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, arg | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	dt, desc, err := r.Combine(ctx, srcs, in.annotations) | 	dt, desc, err := r.Combine(ctx, srcs, in.annotations, in.preferIndex) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @@ -283,6 +284,7 @@ func createCmd(dockerCli command.Cli, opts RootOptions) *cobra.Command { | |||||||
| 	flags.BoolVar(&options.actionAppend, "append", false, "Append to existing manifest") | 	flags.BoolVar(&options.actionAppend, "append", false, "Append to existing manifest") | ||||||
| 	flags.StringVar(&options.progress, "progress", "auto", `Set type of progress output ("auto", "plain", "tty"). Use plain to show container output`) | 	flags.StringVar(&options.progress, "progress", "auto", `Set type of progress output ("auto", "plain", "tty"). Use plain to show container output`) | ||||||
| 	flags.StringArrayVarP(&options.annotations, "annotation", "", []string{}, "Add annotation to the image") | 	flags.StringArrayVarP(&options.annotations, "annotation", "", []string{}, "Add annotation to the image") | ||||||
|  | 	flags.BoolVar(&options.preferIndex, "prefer-index", true, "When only a single source is specified, prefer outputting an image index or manifest list instead of performing a carbon copy") | ||||||
|  |  | ||||||
| 	return cmd | 	return cmd | ||||||
| } | } | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ type Source struct { | |||||||
| 	Ref  reference.Named | 	Ref  reference.Named | ||||||
| } | } | ||||||
|  |  | ||||||
| func (r *Resolver) Combine(ctx context.Context, srcs []*Source, ann []string) ([]byte, ocispec.Descriptor, error) { | func (r *Resolver) Combine(ctx context.Context, srcs []*Source, ann []string, preferIndex bool) ([]byte, ocispec.Descriptor, error) { | ||||||
| 	eg, ctx := errgroup.WithContext(ctx) | 	eg, ctx := errgroup.WithContext(ctx) | ||||||
|  |  | ||||||
| 	dts := make([][]byte, len(srcs)) | 	dts := make([][]byte, len(srcs)) | ||||||
| @@ -79,7 +79,12 @@ func (r *Resolver) Combine(ctx context.Context, srcs []*Source, ann []string) ([ | |||||||
|  |  | ||||||
| 	// on single source, return original bytes | 	// on single source, return original bytes | ||||||
| 	if len(srcs) == 1 && len(ann) == 0 { | 	if len(srcs) == 1 && len(ann) == 0 { | ||||||
| 		if mt := srcs[0].Desc.MediaType; mt == images.MediaTypeDockerSchema2ManifestList || mt == images.MediaTypeDockerSchema2Manifest || mt == ocispec.MediaTypeImageIndex { | 		switch srcs[0].Desc.MediaType { | ||||||
|  | 		case images.MediaTypeDockerSchema2Manifest: | ||||||
|  | 			if !preferIndex { | ||||||
|  | 				return dts[0], srcs[0].Desc, nil | ||||||
|  | 			} | ||||||
|  | 		case images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex: | ||||||
| 			return dts[0], srcs[0].Desc, nil | 			return dts[0], srcs[0].Desc, nil | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tim Smith
					Tim Smith