Merge da87cb4946 into 87e8e4b847
				
					
				
			
						commit
						c1ce7828eb
					
				@ -1,79 +0,0 @@
 | 
			
		||||
package commands
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"os"
 | 
			
		||||
	"runtime"
 | 
			
		||||
 | 
			
		||||
	"github.com/containerd/console"
 | 
			
		||||
	"github.com/docker/buildx/controller"
 | 
			
		||||
	"github.com/docker/buildx/controller/control"
 | 
			
		||||
	controllerapi "github.com/docker/buildx/controller/pb"
 | 
			
		||||
	"github.com/docker/buildx/monitor"
 | 
			
		||||
	"github.com/docker/buildx/util/progress"
 | 
			
		||||
	"github.com/docker/cli/cli/command"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"github.com/sirupsen/logrus"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func debugShellCmd(dockerCli command.Cli) *cobra.Command {
 | 
			
		||||
	var options control.ControlOptions
 | 
			
		||||
	var progressMode string
 | 
			
		||||
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "debug-shell",
 | 
			
		||||
		Short: "Start a monitor",
 | 
			
		||||
		Annotations: map[string]string{
 | 
			
		||||
			"experimentalCLI": "",
 | 
			
		||||
		},
 | 
			
		||||
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
			printer, err := progress.NewPrinter(context.TODO(), os.Stderr, os.Stderr, progressMode)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			ctx := context.TODO()
 | 
			
		||||
			c, err := controller.NewController(ctx, options, dockerCli, printer)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			defer func() {
 | 
			
		||||
				if err := c.Close(); err != nil {
 | 
			
		||||
					logrus.Warnf("failed to close server connection %v", err)
 | 
			
		||||
				}
 | 
			
		||||
			}()
 | 
			
		||||
			con := console.Current()
 | 
			
		||||
			if err := con.SetRaw(); err != nil {
 | 
			
		||||
				return errors.Errorf("failed to configure terminal: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			err = monitor.RunMonitor(ctx, "", nil, controllerapi.InvokeConfig{
 | 
			
		||||
				Tty: true,
 | 
			
		||||
			}, c, dockerCli.In(), os.Stdout, os.Stderr, printer)
 | 
			
		||||
			con.Reset()
 | 
			
		||||
			return err
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	flags := cmd.Flags()
 | 
			
		||||
 | 
			
		||||
	flags.StringVar(&options.Root, "root", "", "Specify root directory of server to connect")
 | 
			
		||||
	flags.SetAnnotation("root", "experimentalCLI", nil)
 | 
			
		||||
 | 
			
		||||
	flags.BoolVar(&options.Detach, "detach", runtime.GOOS == "linux", "Detach buildx server (supported only on linux)")
 | 
			
		||||
	flags.SetAnnotation("detach", "experimentalCLI", nil)
 | 
			
		||||
 | 
			
		||||
	flags.StringVar(&options.ServerConfig, "server-config", "", "Specify buildx server config file (used only when launching new server)")
 | 
			
		||||
	flags.SetAnnotation("server-config", "experimentalCLI", nil)
 | 
			
		||||
 | 
			
		||||
	flags.StringVar(&progressMode, "progress", "auto", `Set type of progress output ("auto", "plain", "tty"). Use plain to show container output`)
 | 
			
		||||
 | 
			
		||||
	return cmd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addDebugShellCommand(cmd *cobra.Command, dockerCli command.Cli) {
 | 
			
		||||
	cmd.AddCommand(
 | 
			
		||||
		debugShellCmd(dockerCli),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,95 @@
 | 
			
		||||
package debug
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"os"
 | 
			
		||||
	"runtime"
 | 
			
		||||
 | 
			
		||||
	"github.com/containerd/console"
 | 
			
		||||
	"github.com/docker/buildx/controller"
 | 
			
		||||
	"github.com/docker/buildx/controller/control"
 | 
			
		||||
	controllerapi "github.com/docker/buildx/controller/pb"
 | 
			
		||||
	"github.com/docker/buildx/monitor"
 | 
			
		||||
	"github.com/docker/buildx/util/progress"
 | 
			
		||||
	"github.com/docker/cli/cli/command"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"github.com/sirupsen/logrus"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DebugConfig is a user-specified configuration for the debugger.
 | 
			
		||||
type DebugConfig struct {
 | 
			
		||||
	// InvokeFlag is a flag to configure the launched debugger and the commaned executed on the debugger.
 | 
			
		||||
	InvokeFlag string
 | 
			
		||||
 | 
			
		||||
	// OnFlag is a flag to configure the timing of launching the debugger.
 | 
			
		||||
	OnFlag string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DebuggableCmd is a command that supports debugger with recognizing the user-specified DebugConfig.
 | 
			
		||||
type DebuggableCmd interface {
 | 
			
		||||
	// NewDebugger returns the new *cobra.Command with support for the debugger with recognizing DebugConfig.
 | 
			
		||||
	NewDebugger(*DebugConfig) *cobra.Command
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RootCmd(dockerCli command.Cli, children ...DebuggableCmd) *cobra.Command {
 | 
			
		||||
	var controlOptions control.ControlOptions
 | 
			
		||||
	var progressMode string
 | 
			
		||||
	var options DebugConfig
 | 
			
		||||
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "debug",
 | 
			
		||||
		Short: "Start debugger",
 | 
			
		||||
		Args:  cobra.NoArgs,
 | 
			
		||||
		Annotations: map[string]string{
 | 
			
		||||
			"experimentalCLI": "",
 | 
			
		||||
		},
 | 
			
		||||
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
			printer, err := progress.NewPrinter(context.TODO(), os.Stderr, os.Stderr, progressMode)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			ctx := context.TODO()
 | 
			
		||||
			c, err := controller.NewController(ctx, controlOptions, dockerCli, printer)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			defer func() {
 | 
			
		||||
				if err := c.Close(); err != nil {
 | 
			
		||||
					logrus.Warnf("failed to close server connection %v", err)
 | 
			
		||||
				}
 | 
			
		||||
			}()
 | 
			
		||||
			con := console.Current()
 | 
			
		||||
			if err := con.SetRaw(); err != nil {
 | 
			
		||||
				return errors.Errorf("failed to configure terminal: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			err = monitor.RunMonitor(ctx, "", nil, controllerapi.InvokeConfig{
 | 
			
		||||
				Tty: true,
 | 
			
		||||
			}, c, dockerCli.In(), os.Stdout, os.Stderr, printer)
 | 
			
		||||
			con.Reset()
 | 
			
		||||
			return err
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	flags := cmd.Flags()
 | 
			
		||||
	flags.StringVar(&options.InvokeFlag, "invoke", "", "Launch a monitor with executing specified command")
 | 
			
		||||
	flags.SetAnnotation("invoke", "experimentalCLI", nil)
 | 
			
		||||
	flags.StringVar(&options.OnFlag, "on", "", "When to launch the monitor ([always, error])")
 | 
			
		||||
	flags.SetAnnotation("on", "experimentalCLI", nil)
 | 
			
		||||
 | 
			
		||||
	flags.StringVar(&controlOptions.Root, "root", "", "Specify root directory of server to connect for the monitor")
 | 
			
		||||
	flags.SetAnnotation("root", "experimentalCLI", nil)
 | 
			
		||||
	flags.BoolVar(&controlOptions.Detach, "detach", runtime.GOOS == "linux", "Detach buildx server for the monitor (supported only on linux)")
 | 
			
		||||
	flags.SetAnnotation("detach", "experimentalCLI", nil)
 | 
			
		||||
	flags.StringVar(&controlOptions.ServerConfig, "server-config", "", "Specify buildx server config file for the monitor (used only when launching new server)")
 | 
			
		||||
	flags.SetAnnotation("server-config", "experimentalCLI", nil)
 | 
			
		||||
	flags.StringVar(&progressMode, "progress", "auto", `Set type of progress output ("auto", "plain", "tty") for the monitor. Use plain to show container output`)
 | 
			
		||||
 | 
			
		||||
	for _, c := range children {
 | 
			
		||||
		cmd.AddCommand(c.NewDebugger(&options))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return cmd
 | 
			
		||||
}
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
# docker buildx debug-shell
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_START-->
 | 
			
		||||
Start a monitor
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
 | 
			
		||||
| Name              | Type     | Default | Description                                                                              |
 | 
			
		||||
|:------------------|:---------|:--------|:-----------------------------------------------------------------------------------------|
 | 
			
		||||
| `--builder`       | `string` |         | Override the configured builder instance                                                 |
 | 
			
		||||
| `--detach`        |          |         | Detach buildx server (supported only on linux)                                           |
 | 
			
		||||
| `--progress`      | `string` | `auto`  | Set type of progress output (`auto`, `plain`, `tty`). Use plain to show container output |
 | 
			
		||||
| `--root`          | `string` |         | Specify root directory of server to connect                                              |
 | 
			
		||||
| `--server-config` | `string` |         | Specify buildx server config file (used only when launching new server)                  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_END-->
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,27 @@
 | 
			
		||||
# docker buildx debug
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_START-->
 | 
			
		||||
Start debugger
 | 
			
		||||
 | 
			
		||||
### Subcommands
 | 
			
		||||
 | 
			
		||||
| Name                             | Description   |
 | 
			
		||||
|:---------------------------------|:--------------|
 | 
			
		||||
| [`build`](buildx_debug_build.md) | Start a build |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
 | 
			
		||||
| Name              | Type     | Default | Description                                                                                              |
 | 
			
		||||
|:------------------|:---------|:--------|:---------------------------------------------------------------------------------------------------------|
 | 
			
		||||
| `--builder`       | `string` |         | Override the configured builder instance                                                                 |
 | 
			
		||||
| `--detach`        |          |         | Detach buildx server for the monitor (supported only on linux)                                           |
 | 
			
		||||
| `--invoke`        | `string` |         | Launch a monitor with executing specified command                                                        |
 | 
			
		||||
| `--on`            | `string` |         | When to launch the monitor ([always, error])                                                             |
 | 
			
		||||
| `--progress`      | `string` | `auto`  | Set type of progress output (`auto`, `plain`, `tty`) for the monitor. Use plain to show container output |
 | 
			
		||||
| `--root`          | `string` |         | Specify root directory of server to connect for the monitor                                              |
 | 
			
		||||
| `--server-config` | `string` |         | Specify buildx server config file for the monitor (used only when launching new server)                  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_END-->
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,52 @@
 | 
			
		||||
# docker buildx debug build
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_START-->
 | 
			
		||||
Start a build
 | 
			
		||||
 | 
			
		||||
### Aliases
 | 
			
		||||
 | 
			
		||||
`docker buildx debug build`, `docker buildx debug b`
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
 | 
			
		||||
| Name                                                                                                                                                   | Type          | Default   | Description                                                                                         |
 | 
			
		||||
|:-------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------|:----------|:----------------------------------------------------------------------------------------------------|
 | 
			
		||||
| [`--add-host`](https://docs.docker.com/engine/reference/commandline/build/#add-host)                                                                   | `stringSlice` |           | Add a custom host-to-IP mapping (format: `host:ip`)                                                 |
 | 
			
		||||
| `--allow`                                                                                                                                              | `stringSlice` |           | Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)                      |
 | 
			
		||||
| `--attest`                                                                                                                                             | `stringArray` |           | Attestation parameters (format: `type=sbom,generator=image`)                                        |
 | 
			
		||||
| `--build-arg`                                                                                                                                          | `stringArray` |           | Set build-time variables                                                                            |
 | 
			
		||||
| `--build-context`                                                                                                                                      | `stringArray` |           | Additional build contexts (e.g., name=path)                                                         |
 | 
			
		||||
| `--builder`                                                                                                                                            | `string`      |           | Override the configured builder instance                                                            |
 | 
			
		||||
| `--cache-from`                                                                                                                                         | `stringArray` |           | External cache sources (e.g., `user/app:cache`, `type=local,src=path/to/dir`)                       |
 | 
			
		||||
| `--cache-to`                                                                                                                                           | `stringArray` |           | Cache export destinations (e.g., `user/app:cache`, `type=local,dest=path/to/dir`)                   |
 | 
			
		||||
| [`--cgroup-parent`](https://docs.docker.com/engine/reference/commandline/build/#cgroup-parent)                                                         | `string`      |           | Set the parent cgroup for the `RUN` instructions during build                                       |
 | 
			
		||||
| `--detach`                                                                                                                                             |               |           | Detach buildx server (supported only on linux)                                                      |
 | 
			
		||||
| [`-f`](https://docs.docker.com/engine/reference/commandline/build/#file), [`--file`](https://docs.docker.com/engine/reference/commandline/build/#file) | `string`      |           | Name of the Dockerfile (default: `PATH/Dockerfile`)                                                 |
 | 
			
		||||
| `--iidfile`                                                                                                                                            | `string`      |           | Write the image ID to the file                                                                      |
 | 
			
		||||
| `--label`                                                                                                                                              | `stringArray` |           | Set metadata for an image                                                                           |
 | 
			
		||||
| `--load`                                                                                                                                               |               |           | Shorthand for `--output=type=docker`                                                                |
 | 
			
		||||
| `--metadata-file`                                                                                                                                      | `string`      |           | Write build result metadata to the file                                                             |
 | 
			
		||||
| `--network`                                                                                                                                            | `string`      | `default` | Set the networking mode for the `RUN` instructions during build                                     |
 | 
			
		||||
| `--no-cache`                                                                                                                                           |               |           | Do not use cache when building the image                                                            |
 | 
			
		||||
| `--no-cache-filter`                                                                                                                                    | `stringArray` |           | Do not cache specified stages                                                                       |
 | 
			
		||||
| `-o`, `--output`                                                                                                                                       | `stringArray` |           | Output destination (format: `type=local,dest=path`)                                                 |
 | 
			
		||||
| `--platform`                                                                                                                                           | `stringArray` |           | Set target platform for build                                                                       |
 | 
			
		||||
| `--print`                                                                                                                                              | `string`      |           | Print result of information request (e.g., outline, targets)                                        |
 | 
			
		||||
| `--progress`                                                                                                                                           | `string`      | `auto`    | Set type of progress output (`auto`, `plain`, `tty`). Use plain to show container output            |
 | 
			
		||||
| `--provenance`                                                                                                                                         | `string`      |           | Shorthand for `--attest=type=provenance`                                                            |
 | 
			
		||||
| `--pull`                                                                                                                                               |               |           | Always attempt to pull all referenced images                                                        |
 | 
			
		||||
| `--push`                                                                                                                                               |               |           | Shorthand for `--output=type=registry`                                                              |
 | 
			
		||||
| `-q`, `--quiet`                                                                                                                                        |               |           | Suppress the build output and print image ID on success                                             |
 | 
			
		||||
| `--root`                                                                                                                                               | `string`      |           | Specify root directory of server to connect                                                         |
 | 
			
		||||
| `--sbom`                                                                                                                                               | `string`      |           | Shorthand for `--attest=type=sbom`                                                                  |
 | 
			
		||||
| `--secret`                                                                                                                                             | `stringArray` |           | Secret to expose to the build (format: `id=mysecret[,src=/local/secret]`)                           |
 | 
			
		||||
| `--server-config`                                                                                                                                      | `string`      |           | Specify buildx server config file (used only when launching new server)                             |
 | 
			
		||||
| `--shm-size`                                                                                                                                           | `bytes`       | `0`       | Size of `/dev/shm`                                                                                  |
 | 
			
		||||
| `--ssh`                                                                                                                                                | `stringArray` |           | SSH agent socket or keys to expose to the build (format: `default\|<id>[=<socket>\|<key>[,<key>]]`) |
 | 
			
		||||
| [`-t`](https://docs.docker.com/engine/reference/commandline/build/#tag), [`--tag`](https://docs.docker.com/engine/reference/commandline/build/#tag)    | `stringArray` |           | Name and optionally a tag (format: `name:tag`)                                                      |
 | 
			
		||||
| [`--target`](https://docs.docker.com/engine/reference/commandline/build/#target)                                                                       | `string`      |           | Set the target build stage to build                                                                 |
 | 
			
		||||
| `--ulimit`                                                                                                                                             | `ulimit`      |           | Ulimit options                                                                                      |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!---MARKER_GEN_END-->
 | 
			
		||||
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue