mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 09:17:49 +08:00

Integrates vtproto into buildx. The generated files dockerfile has been modified to copy the buildkit equivalent file to ensure files are laid out in the appropriate way for imports. An import has also been included to change the grpc codec to the version in buildkit that supports vtproto. This will allow buildx to utilize the speed and memory improvements from that. Also updates the gc control options for prune. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
controlapi "github.com/moby/buildkit/api/services/control"
|
|
apitypes "github.com/moby/buildkit/api/types"
|
|
"github.com/moby/buildkit/solver/pb"
|
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// WorkerInfo contains information about a worker
|
|
type WorkerInfo struct {
|
|
ID string `json:"id"`
|
|
Labels map[string]string `json:"labels"`
|
|
Platforms []ocispecs.Platform `json:"platforms"`
|
|
GCPolicy []PruneInfo `json:"gcPolicy"`
|
|
BuildkitVersion BuildkitVersion `json:"buildkitVersion"`
|
|
}
|
|
|
|
// ListWorkers lists all active workers
|
|
func (c *Client) ListWorkers(ctx context.Context, opts ...ListWorkersOption) ([]*WorkerInfo, error) {
|
|
info := &ListWorkersInfo{}
|
|
for _, o := range opts {
|
|
o.SetListWorkersOption(info)
|
|
}
|
|
|
|
req := &controlapi.ListWorkersRequest{Filter: info.Filter}
|
|
resp, err := c.ControlClient().ListWorkers(ctx, req)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "failed to list workers")
|
|
}
|
|
|
|
var wi []*WorkerInfo
|
|
|
|
for _, w := range resp.Record {
|
|
wi = append(wi, &WorkerInfo{
|
|
ID: w.ID,
|
|
Labels: w.Labels,
|
|
Platforms: pb.ToSpecPlatforms(w.Platforms),
|
|
GCPolicy: fromAPIGCPolicy(w.GCPolicy),
|
|
BuildkitVersion: fromAPIBuildkitVersion(w.BuildkitVersion),
|
|
})
|
|
}
|
|
|
|
return wi, nil
|
|
}
|
|
|
|
// ListWorkersOption is an option for a worker list query
|
|
type ListWorkersOption interface {
|
|
SetListWorkersOption(*ListWorkersInfo)
|
|
}
|
|
|
|
// ListWorkersInfo is a payload for worker list query
|
|
type ListWorkersInfo struct {
|
|
Filter []string
|
|
}
|
|
|
|
func fromAPIGCPolicy(in []*apitypes.GCPolicy) []PruneInfo {
|
|
out := make([]PruneInfo, 0, len(in))
|
|
for _, p := range in {
|
|
out = append(out, PruneInfo{
|
|
All: p.All,
|
|
Filter: p.Filters,
|
|
KeepDuration: time.Duration(p.KeepDuration),
|
|
ReservedSpace: p.ReservedSpace,
|
|
MaxUsedSpace: p.MaxUsedSpace,
|
|
MinFreeSpace: p.MinFreeSpace,
|
|
})
|
|
}
|
|
return out
|
|
}
|