mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00

Refactor the progress printer creation to the caller-side of the controller api. Then, instead of passing around status channels (and progressMode strings), we can simply pass around the higher level interface progress.Writer. This has a couple of benefits: - A simplified interface to the controller - Allows us to correctly extract warnings out of the controller, so that they can be displayed correctly from the client side. Some extra work is required to make sure that we can pass a progress.Printer into the debug monitor. If we want to keep it persistent, then we need a way to temporarily suspend output from it, otherwise it will continue printing as the monitor is prompting for input from the user, and forwarding output from debug containers. To handle this, we add two methods to the printer, `Pause` and `Unpause`. `Pause` acts similarly to `Wait`, closing the printer, and cleanly shutting down the display - however, the printer does not terminate, and can later be resumed by a call to `Unpause`. This provides a neater interface to the caller, instead of needing to continually reconstruct printers for every single time we want to produce progress output. Signed-off-by: Justin Chadwell <me@jedevc.com>
33 lines
1.4 KiB
Go
33 lines
1.4 KiB
Go
package control
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
controllerapi "github.com/docker/buildx/controller/pb"
|
|
"github.com/docker/buildx/util/progress"
|
|
"github.com/moby/buildkit/client"
|
|
)
|
|
|
|
type BuildxController interface {
|
|
Build(ctx context.Context, options controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (ref string, resp *client.SolveResponse, err error)
|
|
// Invoke starts an IO session into the specified process.
|
|
// If pid doesn't matche to any running processes, it starts a new process with the specified config.
|
|
// If there is no container running or InvokeConfig.Rollback is speicfied, the process will start in a newly created container.
|
|
// NOTE: If needed, in the future, we can split this API into three APIs (NewContainer, NewProcess and Attach).
|
|
Invoke(ctx context.Context, ref, pid string, options controllerapi.InvokeConfig, ioIn io.ReadCloser, ioOut io.WriteCloser, ioErr io.WriteCloser) error
|
|
Kill(ctx context.Context) error
|
|
Close() error
|
|
List(ctx context.Context) (refs []string, _ error)
|
|
Disconnect(ctx context.Context, ref string) error
|
|
ListProcesses(ctx context.Context, ref string) (infos []*controllerapi.ProcessInfo, retErr error)
|
|
DisconnectProcess(ctx context.Context, ref, pid string) error
|
|
Inspect(ctx context.Context, ref string) (*controllerapi.InspectResponse, error)
|
|
}
|
|
|
|
type ControlOptions struct {
|
|
ServerConfig string
|
|
Root string
|
|
Detach bool
|
|
}
|