vendor: update buildkit

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2021-09-21 07:49:39 +02:00
parent 06541ebd0f
commit 45e4550c36
1040 changed files with 100774 additions and 7915 deletions

View File

@ -827,18 +827,17 @@ func (m *Vertex) GetError() string {
}
type VertexStatus struct {
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
Vertex github_com_opencontainers_go_digest.Digest `protobuf:"bytes,2,opt,name=vertex,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"vertex"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Current int64 `protobuf:"varint,4,opt,name=current,proto3" json:"current,omitempty"`
Total int64 `protobuf:"varint,5,opt,name=total,proto3" json:"total,omitempty"`
// TODO: add started, completed
Timestamp time.Time `protobuf:"bytes,6,opt,name=timestamp,proto3,stdtime" json:"timestamp"`
Started *time.Time `protobuf:"bytes,7,opt,name=started,proto3,stdtime" json:"started,omitempty"`
Completed *time.Time `protobuf:"bytes,8,opt,name=completed,proto3,stdtime" json:"completed,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
Vertex github_com_opencontainers_go_digest.Digest `protobuf:"bytes,2,opt,name=vertex,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"vertex"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Current int64 `protobuf:"varint,4,opt,name=current,proto3" json:"current,omitempty"`
Total int64 `protobuf:"varint,5,opt,name=total,proto3" json:"total,omitempty"`
Timestamp time.Time `protobuf:"bytes,6,opt,name=timestamp,proto3,stdtime" json:"timestamp"`
Started *time.Time `protobuf:"bytes,7,opt,name=started,proto3,stdtime" json:"started,omitempty"`
Completed *time.Time `protobuf:"bytes,8,opt,name=completed,proto3,stdtime" json:"completed,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *VertexStatus) Reset() { *m = VertexStatus{} }

View File

@ -121,7 +121,6 @@ message VertexStatus {
string name = 3;
int64 current = 4;
int64 total = 5;
// TODO: add started, completed
google.protobuf.Timestamp timestamp = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
google.protobuf.Timestamp started = 7 [(gogoproto.stdtime) = true ];
google.protobuf.Timestamp completed = 8 [(gogoproto.stdtime) = true ];

View File

@ -6,7 +6,7 @@ import (
"github.com/moby/buildkit/solver/pb"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)
@ -21,7 +21,7 @@ type DefinitionOp struct {
defs map[digest.Digest][]byte
metas map[digest.Digest]pb.OpMetadata
sources map[digest.Digest][]*SourceLocation
platforms map[digest.Digest]*specs.Platform
platforms map[digest.Digest]*ocispecs.Platform
dgst digest.Digest
index pb.OutputIndex
inputCache map[digest.Digest][]*DefinitionOp
@ -31,7 +31,7 @@ type DefinitionOp struct {
func NewDefinitionOp(def *pb.Definition) (*DefinitionOp, error) {
ops := make(map[digest.Digest]*pb.Op)
defs := make(map[digest.Digest][]byte)
platforms := make(map[digest.Digest]*specs.Platform)
platforms := make(map[digest.Digest]*ocispecs.Platform)
var dgst digest.Digest
for _, dt := range def.Def {
@ -43,7 +43,7 @@ func NewDefinitionOp(def *pb.Definition) (*DefinitionOp, error) {
ops[dgst] = &op
defs[dgst] = dt
var platform *specs.Platform
var platform *ocispecs.Platform
if op.Platform != nil {
spec := op.Platform.Spec()
platform = &spec

View File

@ -9,7 +9,7 @@ import (
"github.com/containerd/containerd/platforms"
"github.com/google/shlex"
"github.com/moby/buildkit/solver/pb"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)
type contextKeyT string
@ -182,20 +182,20 @@ func shlexf(str string, replace bool, v ...interface{}) StateOption {
}
}
func platform(p specs.Platform) StateOption {
func platform(p ocispecs.Platform) StateOption {
return func(s State) State {
return s.WithValue(keyPlatform, platforms.Normalize(p))
}
}
func getPlatform(s State) func(context.Context, *Constraints) (*specs.Platform, error) {
return func(ctx context.Context, c *Constraints) (*specs.Platform, error) {
func getPlatform(s State) func(context.Context, *Constraints) (*ocispecs.Platform, error) {
return func(ctx context.Context, c *Constraints) (*ocispecs.Platform, error) {
v, err := s.getValue(keyPlatform)(ctx, c)
if err != nil {
return nil, err
}
if v != nil {
p := v.(specs.Platform)
p := v.(ocispecs.Platform)
return &p, nil
}
return nil, nil

View File

@ -4,7 +4,7 @@ import (
"context"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)
// WithMetaResolver adds a metadata resolver to an image
@ -29,7 +29,7 @@ type ImageMetaResolver interface {
}
type ResolveImageConfigOpt struct {
Platform *specs.Platform
Platform *ocispecs.Platform
ResolveMode string
LogName string
}

View File

@ -4,7 +4,7 @@ import (
"context"
"github.com/moby/buildkit/solver/pb"
"github.com/opencontainers/go-digest"
digest "github.com/opencontainers/go-digest"
)
type SourceMap struct {

View File

@ -12,7 +12,7 @@ import (
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/util/apicaps"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)
type StateOption func(State) State
@ -48,7 +48,7 @@ type State struct {
func (s State) ensurePlatform() State {
if o, ok := s.out.(interface {
Platform() *specs.Platform
Platform() *ocispecs.Platform
}); ok {
if p := o.Platform(); p != nil {
s = platform(*p)(s)
@ -351,11 +351,11 @@ func (s State) GetHostname(ctx context.Context, co ...ConstraintsOpt) (string, e
return getHostname(s)(ctx, c)
}
func (s State) Platform(p specs.Platform) State {
func (s State) Platform(p ocispecs.Platform) State {
return platform(p)(s)
}
func (s State) GetPlatform(ctx context.Context, co ...ConstraintsOpt) (*specs.Platform, error) {
func (s State) GetPlatform(ctx context.Context, co ...ConstraintsOpt) (*ocispecs.Platform, error) {
c := &Constraints{}
for _, f := range co {
f.SetConstraintsOption(c)
@ -403,7 +403,7 @@ type output struct {
vertex Vertex
getIndex func() (pb.OutputIndex, error)
err error
platform *specs.Platform
platform *ocispecs.Platform
}
func (o *output) ToInput(ctx context.Context, c *Constraints) (*pb.Input, error) {
@ -429,7 +429,7 @@ func (o *output) Vertex(context.Context, *Constraints) Vertex {
return o.vertex
}
func (o *output) Platform() *specs.Platform {
func (o *output) Platform() *ocispecs.Platform {
return o.platform
}
@ -560,7 +560,7 @@ func (cw *constraintsWrapper) applyConstraints(f func(c *Constraints)) {
}
type Constraints struct {
Platform *specs.Platform
Platform *ocispecs.Platform
WorkerConstraints []string
Metadata pb.OpMetadata
LocalUniqueID string
@ -568,7 +568,7 @@ type Constraints struct {
SourceLocations []*SourceLocation
}
func Platform(p specs.Platform) ConstraintsOpt {
func Platform(p ocispecs.Platform) ConstraintsOpt {
return constraintsOptFunc(func(c *Constraints) {
c.Platform = &p
})
@ -581,15 +581,15 @@ func LocalUniqueID(v string) ConstraintsOpt {
}
var (
LinuxAmd64 = Platform(specs.Platform{OS: "linux", Architecture: "amd64"})
LinuxArmhf = Platform(specs.Platform{OS: "linux", Architecture: "arm", Variant: "v7"})
LinuxAmd64 = Platform(ocispecs.Platform{OS: "linux", Architecture: "amd64"})
LinuxArmhf = Platform(ocispecs.Platform{OS: "linux", Architecture: "arm", Variant: "v7"})
LinuxArm = LinuxArmhf
LinuxArmel = Platform(specs.Platform{OS: "linux", Architecture: "arm", Variant: "v6"})
LinuxArm64 = Platform(specs.Platform{OS: "linux", Architecture: "arm64"})
LinuxS390x = Platform(specs.Platform{OS: "linux", Architecture: "s390x"})
LinuxPpc64le = Platform(specs.Platform{OS: "linux", Architecture: "ppc64le"})
Darwin = Platform(specs.Platform{OS: "darwin", Architecture: "amd64"})
Windows = Platform(specs.Platform{OS: "windows", Architecture: "amd64"})
LinuxArmel = Platform(ocispecs.Platform{OS: "linux", Architecture: "arm", Variant: "v6"})
LinuxArm64 = Platform(ocispecs.Platform{OS: "linux", Architecture: "arm64"})
LinuxS390x = Platform(ocispecs.Platform{OS: "linux", Architecture: "s390x"})
LinuxPpc64le = Platform(ocispecs.Platform{OS: "linux", Architecture: "ppc64le"})
Darwin = Platform(ocispecs.Platform{OS: "darwin", Architecture: "amd64"})
Windows = Platform(ocispecs.Platform{OS: "windows", Architecture: "amd64"})
)
func Require(filters ...string) ConstraintsOpt {

View File

@ -6,7 +6,7 @@ import (
"os"
"github.com/gofrs/flock"
v1 "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)
@ -17,9 +17,9 @@ const (
// PutDescToIndex puts desc to index with tag.
// Existing manifests with the same tag will be removed from the index.
func PutDescToIndex(index *v1.Index, desc v1.Descriptor, tag string) error {
func PutDescToIndex(index *ocispecs.Index, desc ocispecs.Descriptor, tag string) error {
if index == nil {
index = &v1.Index{}
index = &ocispecs.Index{}
}
if index.SchemaVersion == 0 {
index.SchemaVersion = 2
@ -28,11 +28,11 @@ func PutDescToIndex(index *v1.Index, desc v1.Descriptor, tag string) error {
if desc.Annotations == nil {
desc.Annotations = make(map[string]string)
}
desc.Annotations[v1.AnnotationRefName] = tag
desc.Annotations[ocispecs.AnnotationRefName] = tag
// remove existing manifests with the same tag
var manifests []v1.Descriptor
var manifests []ocispecs.Descriptor
for _, m := range index.Manifests {
if m.Annotations[v1.AnnotationRefName] != tag {
if m.Annotations[ocispecs.AnnotationRefName] != tag {
manifests = append(manifests, m)
}
}
@ -42,7 +42,7 @@ func PutDescToIndex(index *v1.Index, desc v1.Descriptor, tag string) error {
return nil
}
func PutDescToIndexJSONFileLocked(indexJSONPath string, desc v1.Descriptor, tag string) error {
func PutDescToIndexJSONFileLocked(indexJSONPath string, desc ocispecs.Descriptor, tag string) error {
lockPath := indexJSONPath + IndexJSONLockFileSuffix
lock := flock.New(lockPath)
locked, err := lock.TryLock()
@ -61,7 +61,7 @@ func PutDescToIndexJSONFileLocked(indexJSONPath string, desc v1.Descriptor, tag
return errors.Wrapf(err, "could not open %s", indexJSONPath)
}
defer f.Close()
var idx v1.Index
var idx ocispecs.Index
b, err := ioutil.ReadAll(f)
if err != nil {
return errors.Wrapf(err, "could not read %s", indexJSONPath)
@ -87,7 +87,7 @@ func PutDescToIndexJSONFileLocked(indexJSONPath string, desc v1.Descriptor, tag
return nil
}
func ReadIndexJSONFileLocked(indexJSONPath string) (*v1.Index, error) {
func ReadIndexJSONFileLocked(indexJSONPath string) (*ocispecs.Index, error) {
lockPath := indexJSONPath + IndexJSONLockFileSuffix
lock := flock.New(lockPath)
locked, err := lock.TryRLock()
@ -105,7 +105,7 @@ func ReadIndexJSONFileLocked(indexJSONPath string) (*v1.Index, error) {
if err != nil {
return nil, errors.Wrapf(err, "could not read %s", indexJSONPath)
}
var idx v1.Index
var idx ocispecs.Index
if err := json.Unmarshal(b, &idx); err != nil {
return nil, errors.Wrapf(err, "could not unmarshal %s (%q)", indexJSONPath, string(b))
}

View File

@ -20,10 +20,10 @@ import (
"github.com/moby/buildkit/session/filesync"
"github.com/moby/buildkit/session/grpchijack"
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/util/bklog"
"github.com/moby/buildkit/util/entitlements"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
fstypes "github.com/tonistiigi/fsutil/types"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
@ -109,7 +109,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG
}
}
cacheOpt, err := parseCacheOptions(opt)
cacheOpt, err := parseCacheOptions(ctx, opt)
if err != nil {
return nil, err
}
@ -181,7 +181,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG
<-time.After(3 * time.Second)
cancelStatus()
}()
logrus.Debugf("stopping session")
bklog.G(ctx).Debugf("stopping session")
s.Close()
}()
var pbd *pb.Definition
@ -300,7 +300,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG
// Update index.json of exported cache content store
// FIXME(AkihiroSuda): dedupe const definition of cache/remotecache.ExporterResponseManifestDesc = "cache.manifest"
if manifestDescJSON := res.ExporterResponse["cache.manifest"]; manifestDescJSON != "" {
var manifestDesc ocispec.Descriptor
var manifestDesc ocispecs.Descriptor
if err = json.Unmarshal([]byte(manifestDescJSON), &manifestDesc); err != nil {
return nil, err
}
@ -341,13 +341,13 @@ func prepareSyncedDirs(def *llb.Definition, localDirs map[string]string) ([]file
return nil, errors.Wrap(err, "failed to parse llb proto op")
}
if src := op.GetSource(); src != nil {
if strings.HasPrefix(src.Identifier, "local://") { // TODO: just make a type property
if strings.HasPrefix(src.Identifier, "local://") {
name := strings.TrimPrefix(src.Identifier, "local://")
d, ok := localDirs[name]
if !ok {
return nil, errors.Errorf("local directory %s not enabled", name)
}
dirs = append(dirs, filesync.SyncedDir{Name: name, Dir: d, Map: resetUIDAndGID}) // TODO: excludes
dirs = append(dirs, filesync.SyncedDir{Name: name, Dir: d, Map: resetUIDAndGID})
}
}
}
@ -370,7 +370,7 @@ type cacheOptions struct {
frontendAttrs map[string]string
}
func parseCacheOptions(opt SolveOpt) (*cacheOptions, error) {
func parseCacheOptions(ctx context.Context, opt SolveOpt) (*cacheOptions, error) {
var (
cacheExports []*controlapi.CacheOptionsEntry
cacheImports []*controlapi.CacheOptionsEntry
@ -423,18 +423,18 @@ func parseCacheOptions(opt SolveOpt) (*cacheOptions, error) {
}
cs, err := contentlocal.NewStore(csDir)
if err != nil {
logrus.Warning("local cache import at " + csDir + " not found due to err: " + err.Error())
bklog.G(ctx).Warning("local cache import at " + csDir + " not found due to err: " + err.Error())
continue
}
// if digest is not specified, load from "latest" tag
if attrs["digest"] == "" {
idx, err := ociindex.ReadIndexJSONFileLocked(filepath.Join(csDir, "index.json"))
if err != nil {
logrus.Warning("local cache import at " + csDir + " not found due to err: " + err.Error())
bklog.G(ctx).Warning("local cache import at " + csDir + " not found due to err: " + err.Error())
continue
}
for _, m := range idx.Manifests {
if (m.Annotations[ocispec.AnnotationRefName] == "latest" && attrs["tag"] == "") || (attrs["tag"] != "" && m.Annotations[ocispec.AnnotationRefName] == attrs["tag"]) {
if (m.Annotations[ocispecs.AnnotationRefName] == "latest" && attrs["tag"] == "") || (attrs["tag"] != "" && m.Annotations[ocispecs.AnnotationRefName] == attrs["tag"]) {
attrs["digest"] = string(m.Digest)
break
}

View File

@ -7,7 +7,7 @@ import (
controlapi "github.com/moby/buildkit/api/services/control"
apitypes "github.com/moby/buildkit/api/types"
"github.com/moby/buildkit/solver/pb"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)
@ -15,7 +15,7 @@ import (
type WorkerInfo struct {
ID string
Labels map[string]string
Platforms []specs.Platform
Platforms []ocispecs.Platform
GCPolicy []PruneInfo
}

View File

@ -8,7 +8,7 @@ import (
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/util/apicaps"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
fstypes "github.com/tonistiigi/fsutil/types"
)
@ -25,6 +25,7 @@ type Client interface {
type NewContainerRequest struct {
Mounts []Mount
NetMode pb.NetMode
ExtraHosts []*pb.HostIP
Platform *pb.Platform
Constraints *pb.WorkerConstraints
}
@ -121,7 +122,7 @@ type CacheOptionsEntry struct {
type WorkerInfo struct {
ID string
Labels map[string]string
Platforms []specs.Platform
Platforms []ocispecs.Platform
}
type BuildOpts struct {

View File

@ -11,12 +11,13 @@ import (
"sync"
"time"
"github.com/moby/buildkit/util/bklog"
"github.com/gogo/googleapis/google/rpc"
gogotypes "github.com/gogo/protobuf/types"
"github.com/golang/protobuf/ptypes/any"
"github.com/moby/buildkit/client/llb"
"github.com/moby/buildkit/frontend/gateway/client"
"github.com/moby/buildkit/frontend/gateway/errdefs"
pb "github.com/moby/buildkit/frontend/gateway/pb"
"github.com/moby/buildkit/identity"
opspb "github.com/moby/buildkit/solver/pb"
@ -24,7 +25,6 @@ import (
"github.com/moby/buildkit/util/grpcerrors"
digest "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
fstypes "github.com/tonistiigi/fsutil/types"
"golang.org/x/sync/errgroup"
spb "google.golang.org/genproto/googleapis/rpc/status"
@ -576,7 +576,7 @@ func (m *messageForwarder) Start() (err error) {
if errors.Is(err, io.EOF) || grpcerrors.Code(err) == codes.Canceled {
return nil
}
logrus.Debugf("|<--- %s", debugMessage(msg))
bklog.G(m.ctx).Debugf("|<--- %s", debugMessage(msg))
if err != nil {
return err
@ -587,7 +587,7 @@ func (m *messageForwarder) Start() (err error) {
m.mu.Unlock()
if !ok {
logrus.Debugf("Received exec message for unregistered process: %s", msg.String())
bklog.G(m.ctx).Debugf("Received exec message for unregistered process: %s", msg.String())
continue
}
msgs.Send(m.ctx, msg)
@ -625,7 +625,7 @@ func (m *messageForwarder) Send(msg *pb.ExecMessage) error {
if !ok {
return errors.Errorf("process %s has ended, not sending message %#v", msg.ProcessID, msg.Input)
}
logrus.Debugf("|---> %s", debugMessage(msg))
bklog.G(m.ctx).Debugf("|---> %s", debugMessage(msg))
return m.stream.Send(msg)
}
@ -703,12 +703,14 @@ func (c *grpcClient) NewContainer(ctx context.Context, req client.NewContainerRe
})
}
logrus.Debugf("|---> NewContainer %s", id)
bklog.G(ctx).Debugf("|---> NewContainer %s", id)
_, err = c.client.NewContainer(ctx, &pb.NewContainerRequest{
ContainerID: id,
Mounts: mounts,
Platform: req.Platform,
Constraints: req.Constraints,
Network: req.NetMode,
ExtraHosts: req.ExtraHosts,
})
if err != nil {
return nil, err
@ -882,8 +884,8 @@ func (ctr *container) Start(ctx context.Context, req client.StartRequest) (clien
Message: exit.Error.Message,
Details: convertGogoAny(exit.Error.Details),
}))
if exit.Code != errdefs.UnknownExitStatus {
exitError = &errdefs.ExitError{ExitCode: exit.Code, Err: exitError}
if exit.Code != pb.UnknownExitStatus {
exitError = &pb.ExitError{ExitCode: exit.Code, Err: exitError}
}
} else if serverDone := msg.GetDone(); serverDone != nil {
return exitError
@ -897,7 +899,7 @@ func (ctr *container) Start(ctx context.Context, req client.StartRequest) (clien
}
func (ctr *container) Release(ctx context.Context) error {
logrus.Debugf("|---> ReleaseContainer %s", ctr.id)
bklog.G(ctx).Debugf("|---> ReleaseContainer %s", ctr.id)
_, err := ctr.client.ReleaseContainer(ctx, &pb.ReleaseContainerRequest{
ContainerID: ctr.id,
})

View File

@ -40,6 +40,10 @@ const (
// containers directly through the gateway
CapGatewayExec apicaps.CapID = "gateway.exec"
// CapGatewayExecExtraHosts is the capability to add additional hosts to
// /etc/hosts for containers created via gateway exec.
CapGatewayExecExtraHosts apicaps.CapID = "gateway.exec.extrahosts"
// CapFrontendCaps can be used to check that frontends define support for certain capabilities
CapFrontendCaps apicaps.CapID = "frontend.caps"
@ -156,6 +160,13 @@ func init() {
Status: apicaps.CapStatusExperimental,
})
Caps.Init(apicaps.Cap{
ID: CapGatewayExecExtraHosts,
Name: "gateway exec extra-hosts",
Enabled: true,
Status: apicaps.CapStatusExperimental,
})
Caps.Init(apicaps.Cap{
ID: CapFrontendCaps,
Name: "frontend capabilities",

View File

@ -1,6 +1,11 @@
package errdefs
package moby_buildkit_v1_frontend //nolint:golint
import "fmt"
import (
"fmt"
"github.com/containerd/typeurl"
"github.com/moby/buildkit/util/grpcerrors"
)
const (
// UnknownExitStatus might be returned in (*ExitError).ExitCode via
@ -12,6 +17,10 @@ const (
UnknownExitStatus = 255
)
func init() {
typeurl.Register((*ExitMessage)(nil), "github.com/moby/buildkit", "gatewayapi.ExitMessage+json")
}
// ExitError will be returned when the container process exits with a non-zero
// exit code.
type ExitError struct {
@ -19,6 +28,12 @@ type ExitError struct {
Err error
}
func (err *ExitError) ToProto() grpcerrors.TypedErrorProto {
return &ExitMessage{
Code: err.ExitCode,
}
}
func (err *ExitError) Error() string {
if err.Err != nil {
return err.Err.Error()
@ -27,8 +42,12 @@ func (err *ExitError) Error() string {
}
func (err *ExitError) Unwrap() error {
if err.Err == nil {
return fmt.Errorf("exit code: %d", err.ExitCode)
}
return err.Err
}
func (e *ExitMessage) WrapError(err error) error {
return &ExitError{
Err: err,
ExitCode: e.Code,
}
}

View File

@ -1337,6 +1337,7 @@ type NewContainerRequest struct {
Network pb.NetMode `protobuf:"varint,3,opt,name=Network,proto3,enum=pb.NetMode" json:"Network,omitempty"`
Platform *pb.Platform `protobuf:"bytes,4,opt,name=platform,proto3" json:"platform,omitempty"`
Constraints *pb.WorkerConstraints `protobuf:"bytes,5,opt,name=constraints,proto3" json:"constraints,omitempty"`
ExtraHosts []*pb.HostIP `protobuf:"bytes,6,rep,name=extraHosts,proto3" json:"extraHosts,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1410,6 +1411,13 @@ func (m *NewContainerRequest) GetConstraints() *pb.WorkerConstraints {
return nil
}
func (m *NewContainerRequest) GetExtraHosts() []*pb.HostIP {
if m != nil {
return m.ExtraHosts
}
return nil
}
type NewContainerResponse struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -2059,127 +2067,128 @@ func init() {
func init() { proto.RegisterFile("gateway.proto", fileDescriptor_f1a937782ebbded5) }
var fileDescriptor_f1a937782ebbded5 = []byte{
// 1909 bytes of a gzipped FileDescriptorProto
// 1932 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4f, 0x6f, 0x1b, 0xc7,
0x15, 0xd7, 0x8a, 0xa4, 0x48, 0x3e, 0xfe, 0x31, 0x33, 0x4e, 0x53, 0x7a, 0x11, 0x38, 0xcc, 0x22,
0x55, 0x69, 0x47, 0x59, 0xa6, 0x74, 0x02, 0xb9, 0x72, 0x90, 0xd4, 0x94, 0x28, 0x58, 0x8d, 0x24,
0xab, 0xe3, 0x14, 0x06, 0x82, 0x14, 0xe8, 0x8a, 0x3b, 0xa4, 0x17, 0xa6, 0x76, 0xb7, 0xb3, 0x43,
0xcb, 0x4c, 0x2e, 0xed, 0xad, 0xf7, 0x02, 0xbd, 0x16, 0xe8, 0x27, 0xe8, 0xa5, 0xd7, 0x9e, 0x73,
0xec, 0xb9, 0x07, 0xa3, 0x10, 0xfa, 0x11, 0x7a, 0x6f, 0xf1, 0x66, 0x67, 0xc8, 0x25, 0x45, 0x2d,
0x49, 0xe4, 0xc4, 0x99, 0xb7, 0xef, 0xf7, 0xe6, 0xfd, 0x9b, 0xf7, 0xde, 0x10, 0x2a, 0x03, 0x47,
0xb0, 0x4b, 0x67, 0x6c, 0x87, 0x3c, 0x10, 0x01, 0xb9, 0x73, 0x11, 0x9c, 0x8f, 0xed, 0xf3, 0x91,
0x37, 0x74, 0x5f, 0x7a, 0xc2, 0x7e, 0xf5, 0x33, 0xbb, 0xcf, 0x03, 0x5f, 0x30, 0xdf, 0x35, 0x3f,
0x1a, 0x78, 0xe2, 0xc5, 0xe8, 0xdc, 0xee, 0x05, 0x17, 0xad, 0x41, 0x30, 0x08, 0x5a, 0x12, 0x71,
0x3e, 0xea, 0xcb, 0x9d, 0xdc, 0xc8, 0x55, 0x2c, 0xc9, 0x6c, 0xcf, 0xb3, 0x0f, 0x82, 0x60, 0x30,
0x64, 0x4e, 0xe8, 0x45, 0x6a, 0xd9, 0xe2, 0x61, 0xaf, 0x15, 0x09, 0x47, 0x8c, 0x22, 0x85, 0xd9,
0x49, 0x60, 0x50, 0x91, 0x96, 0x56, 0xa4, 0x15, 0x05, 0xc3, 0x57, 0x8c, 0xb7, 0xc2, 0xf3, 0x56,
0x10, 0x6a, 0xee, 0xd6, 0x8d, 0xdc, 0x4e, 0xe8, 0xb5, 0xc4, 0x38, 0x64, 0x51, 0xeb, 0x32, 0xe0,
0x2f, 0x19, 0x57, 0x80, 0x07, 0x37, 0x02, 0x46, 0xc2, 0x1b, 0x22, 0xaa, 0xe7, 0x84, 0x11, 0x1e,
0x82, 0xbf, 0x0a, 0x94, 0x34, 0x5b, 0x04, 0xbe, 0x17, 0x09, 0xcf, 0x1b, 0x78, 0xad, 0x7e, 0x24,
0x31, 0xf1, 0x29, 0x68, 0x44, 0xcc, 0x6e, 0xfd, 0x31, 0x03, 0x5b, 0x94, 0x45, 0xa3, 0xa1, 0x20,
0xdb, 0x50, 0xe1, 0xac, 0x7f, 0xc0, 0x42, 0xce, 0x7a, 0x8e, 0x60, 0x6e, 0xdd, 0x68, 0x18, 0xcd,
0xe2, 0x93, 0x0d, 0x3a, 0x4b, 0x26, 0xbf, 0x86, 0x2a, 0x67, 0xfd, 0x28, 0xc1, 0xb8, 0xd9, 0x30,
0x9a, 0xa5, 0xf6, 0x87, 0xf6, 0x8d, 0xc1, 0xb0, 0x29, 0xeb, 0x9f, 0x38, 0xe1, 0x14, 0xf2, 0x64,
0x83, 0xce, 0x09, 0x21, 0x6d, 0xc8, 0x70, 0xd6, 0xaf, 0x67, 0xa4, 0xac, 0xbb, 0xe9, 0xb2, 0x9e,
0x6c, 0x50, 0x64, 0x26, 0xbb, 0x90, 0x45, 0x29, 0xf5, 0xac, 0x04, 0xbd, 0xbf, 0x54, 0x81, 0x27,
0x1b, 0x54, 0x02, 0xc8, 0x97, 0x50, 0xb8, 0x60, 0xc2, 0x71, 0x1d, 0xe1, 0xd4, 0xa1, 0x91, 0x69,
0x96, 0xda, 0xad, 0x54, 0x30, 0x3a, 0xc8, 0x3e, 0x51, 0x88, 0xae, 0x2f, 0xf8, 0x98, 0x4e, 0x04,
0x98, 0x8f, 0xa0, 0x32, 0xf3, 0x89, 0xd4, 0x20, 0xf3, 0x92, 0x8d, 0x63, 0xff, 0x51, 0x5c, 0x92,
0xb7, 0x21, 0xf7, 0xca, 0x19, 0x8e, 0x98, 0x74, 0x55, 0x99, 0xc6, 0x9b, 0xbd, 0xcd, 0x87, 0x46,
0xa7, 0x00, 0x5b, 0x5c, 0x8a, 0xb7, 0xfe, 0x6c, 0x40, 0x6d, 0xde, 0x4f, 0xe4, 0x48, 0x59, 0x68,
0x48, 0x25, 0x3f, 0x5d, 0xc3, 0xc5, 0x48, 0x88, 0x62, 0x55, 0xa5, 0x08, 0x73, 0x17, 0x8a, 0x13,
0xd2, 0x32, 0x15, 0x8b, 0x09, 0x15, 0xad, 0x5d, 0xc8, 0x50, 0xd6, 0x27, 0x55, 0xd8, 0xf4, 0x54,
0x52, 0xd0, 0x4d, 0xcf, 0x25, 0x0d, 0xc8, 0xb8, 0xac, 0xaf, 0x82, 0x5f, 0xb5, 0xc3, 0x73, 0xfb,
0x80, 0xf5, 0x3d, 0xdf, 0x13, 0x5e, 0xe0, 0x53, 0xfc, 0x64, 0xfd, 0xd5, 0xc0, 0xe4, 0x42, 0xb5,
0xc8, 0x17, 0x33, 0x76, 0x2c, 0x4f, 0x95, 0x6b, 0xda, 0x3f, 0x4f, 0xd7, 0xfe, 0x93, 0xa4, 0xf6,
0x4b, 0xf3, 0x27, 0x69, 0x9d, 0x80, 0x0a, 0x65, 0x62, 0xc4, 0x7d, 0xca, 0x7e, 0x37, 0x62, 0x91,
0x20, 0x3f, 0xd7, 0x11, 0x91, 0xf2, 0x97, 0xa5, 0x15, 0x32, 0x52, 0x05, 0x20, 0x4d, 0xc8, 0x31,
0xce, 0x03, 0xae, 0xb4, 0x20, 0x76, 0x5c, 0x39, 0x6c, 0x1e, 0xf6, 0xec, 0x67, 0xb2, 0x72, 0xd0,
0x98, 0xc1, 0xaa, 0x41, 0x55, 0x9f, 0x1a, 0x85, 0x81, 0x1f, 0x31, 0xeb, 0x16, 0x54, 0x8e, 0xfc,
0x70, 0x24, 0x22, 0xa5, 0x87, 0xf5, 0x0f, 0x03, 0xaa, 0x9a, 0x12, 0xf3, 0x90, 0x6f, 0xa0, 0x34,
0xf5, 0xb1, 0x76, 0xe6, 0x5e, 0x8a, 0x7e, 0xb3, 0xf8, 0x44, 0x80, 0x94, 0x6f, 0x93, 0xe2, 0xcc,
0x53, 0xa8, 0xcd, 0x33, 0x2c, 0xf0, 0xf4, 0x07, 0xb3, 0x9e, 0x9e, 0x0f, 0x7c, 0xc2, 0xb3, 0x7f,
0x32, 0xe0, 0x0e, 0x65, 0xb2, 0x14, 0x1e, 0x5d, 0x38, 0x03, 0xb6, 0x1f, 0xf8, 0x7d, 0x6f, 0xa0,
0xdd, 0x5c, 0x93, 0x59, 0xa5, 0x25, 0x63, 0x82, 0x35, 0xa1, 0x70, 0x36, 0x74, 0x44, 0x3f, 0xe0,
0x17, 0x4a, 0x78, 0x19, 0x85, 0x6b, 0x1a, 0x9d, 0x7c, 0x25, 0x0d, 0x28, 0x29, 0xc1, 0x27, 0x81,
0xcb, 0x64, 0xcd, 0x28, 0xd2, 0x24, 0x89, 0xd4, 0x21, 0x7f, 0x1c, 0x0c, 0x4e, 0x9d, 0x0b, 0x26,
0x8b, 0x43, 0x91, 0xea, 0xad, 0xf5, 0x7b, 0x03, 0xcc, 0x45, 0x5a, 0x29, 0x17, 0xff, 0x12, 0xb6,
0x0e, 0xbc, 0x01, 0x8b, 0xe2, 0xe8, 0x17, 0x3b, 0xed, 0xef, 0xdf, 0xbc, 0xb7, 0xf1, 0xaf, 0x37,
0x15, 0xd7, 0x8a, 0x94, 0x48, 0x3e, 0xfe, 0x31, 0x33, 0x4e, 0x53, 0x7a, 0x11, 0x38, 0xcc, 0x22,
0x55, 0x69, 0x47, 0x59, 0xa6, 0x74, 0x02, 0xb9, 0x72, 0x90, 0xd4, 0x94, 0x28, 0x48, 0x8d, 0x24,
0xb3, 0xe3, 0x14, 0x06, 0x82, 0x14, 0xe8, 0x8a, 0x3b, 0xa4, 0x17, 0xa6, 0x76, 0xb7, 0xb3, 0x43,
0xcb, 0x4c, 0x2e, 0xed, 0xad, 0xc7, 0x02, 0x05, 0x7a, 0x2d, 0xd0, 0x4f, 0xd0, 0x4b, 0xaf, 0x3d,
0xe7, 0xd8, 0x73, 0x0f, 0x46, 0xe1, 0xcf, 0xd0, 0x7b, 0x8b, 0x37, 0x3b, 0x43, 0x2e, 0x29, 0x6a,
0x49, 0x22, 0x27, 0xce, 0xbc, 0x7d, 0xbf, 0x37, 0xef, 0xdf, 0xbc, 0xf7, 0x86, 0x50, 0x1e, 0x38,
0x82, 0x5d, 0x39, 0x63, 0x3b, 0xe4, 0x81, 0x08, 0xc8, 0x9d, 0xcb, 0xe0, 0x62, 0x6c, 0x5f, 0x8c,
0xbc, 0xa1, 0xfb, 0xc2, 0x13, 0xf6, 0xcb, 0x9f, 0xd9, 0x7d, 0x1e, 0xf8, 0x82, 0xf9, 0xae, 0xf9,
0xd1, 0xc0, 0x13, 0xcf, 0x47, 0x17, 0x76, 0x2f, 0xb8, 0x6c, 0x0e, 0x82, 0x41, 0xd0, 0x94, 0x88,
0x8b, 0x51, 0x5f, 0xee, 0xe4, 0x46, 0xae, 0x62, 0x49, 0x66, 0x6b, 0x9e, 0x7d, 0x10, 0x04, 0x83,
0x21, 0x73, 0x42, 0x2f, 0x52, 0xcb, 0x26, 0x0f, 0x7b, 0xcd, 0x48, 0x38, 0x62, 0x14, 0x29, 0xcc,
0x6e, 0x02, 0x83, 0x8a, 0x34, 0xb5, 0x22, 0xcd, 0x28, 0x18, 0xbe, 0x64, 0xbc, 0x19, 0x5e, 0x34,
0x83, 0x50, 0x73, 0x37, 0x6f, 0xe4, 0x76, 0x42, 0xaf, 0x29, 0xc6, 0x21, 0x8b, 0x9a, 0x57, 0x01,
0x7f, 0xc1, 0xb8, 0x02, 0x3c, 0xb8, 0x11, 0x30, 0x12, 0xde, 0x10, 0x51, 0x3d, 0x27, 0x8c, 0xf0,
0x10, 0xfc, 0x55, 0xa0, 0xa4, 0xd9, 0x22, 0xf0, 0xbd, 0x48, 0x78, 0xde, 0xc0, 0x6b, 0xf6, 0x23,
0x89, 0x89, 0x4f, 0x41, 0x23, 0x62, 0x76, 0xeb, 0x8f, 0x19, 0xd8, 0xa6, 0x2c, 0x1a, 0x0d, 0x05,
0xd9, 0x81, 0x32, 0x67, 0xfd, 0x43, 0x16, 0x72, 0xd6, 0x73, 0x04, 0x73, 0x6b, 0x46, 0xdd, 0x68,
0x14, 0x8e, 0x37, 0xe8, 0x2c, 0x99, 0xfc, 0x1a, 0x2a, 0x9c, 0xf5, 0xa3, 0x04, 0xe3, 0x66, 0xdd,
0x68, 0x14, 0x5b, 0x1f, 0xda, 0x37, 0x06, 0xc3, 0xa6, 0xac, 0x7f, 0xe6, 0x84, 0x53, 0xc8, 0xf1,
0x06, 0x9d, 0x13, 0x42, 0x5a, 0x90, 0xe1, 0xac, 0x5f, 0xcb, 0x48, 0x59, 0x77, 0xd3, 0x65, 0x1d,
0x6f, 0x50, 0x64, 0x26, 0x7b, 0x90, 0x45, 0x29, 0xb5, 0xac, 0x04, 0xbd, 0xbf, 0x54, 0x81, 0xe3,
0x0d, 0x2a, 0x01, 0xe4, 0x4b, 0xc8, 0x5f, 0x32, 0xe1, 0xb8, 0x8e, 0x70, 0x6a, 0x50, 0xcf, 0x34,
0x8a, 0xad, 0x66, 0x2a, 0x18, 0x1d, 0x64, 0x9f, 0x29, 0x44, 0xc7, 0x17, 0x7c, 0x4c, 0x27, 0x02,
0xcc, 0x47, 0x50, 0x9e, 0xf9, 0x44, 0xaa, 0x90, 0x79, 0xc1, 0xc6, 0xb1, 0xff, 0x28, 0x2e, 0xc9,
0xdb, 0xb0, 0xf5, 0xd2, 0x19, 0x8e, 0x98, 0x74, 0x55, 0x89, 0xc6, 0x9b, 0xfd, 0xcd, 0x87, 0x46,
0x3b, 0x0f, 0xdb, 0x5c, 0x8a, 0xb7, 0xfe, 0x62, 0x40, 0x75, 0xde, 0x4f, 0xe4, 0x44, 0x59, 0x68,
0x48, 0x25, 0x3f, 0x5d, 0xc3, 0xc5, 0x48, 0x88, 0x62, 0x55, 0xa5, 0x08, 0x73, 0x0f, 0x0a, 0x13,
0xd2, 0x32, 0x15, 0x0b, 0x09, 0x15, 0xad, 0x3d, 0xc8, 0x50, 0xd6, 0x27, 0x15, 0xd8, 0xf4, 0x54,
0x52, 0xd0, 0x4d, 0xcf, 0x25, 0x75, 0xc8, 0xb8, 0xac, 0xaf, 0x82, 0x5f, 0xb1, 0xc3, 0x0b, 0xfb,
0x90, 0xf5, 0x3d, 0xdf, 0x13, 0x5e, 0xe0, 0x53, 0xfc, 0x64, 0xfd, 0xcd, 0xc0, 0xe4, 0x42, 0xb5,
0xc8, 0x17, 0x33, 0x76, 0x2c, 0x4f, 0x95, 0x6b, 0xda, 0x3f, 0x4b, 0xd7, 0xfe, 0x93, 0xa4, 0xf6,
0x4b, 0xf3, 0x27, 0x69, 0x9d, 0x80, 0x32, 0x65, 0x62, 0xc4, 0x7d, 0xca, 0x7e, 0x37, 0x62, 0x91,
0x20, 0x3f, 0xd7, 0x11, 0x91, 0xf2, 0x97, 0xa5, 0x15, 0x32, 0x52, 0x05, 0x20, 0x0d, 0xd8, 0x62,
0x9c, 0x07, 0x5c, 0x69, 0x41, 0xec, 0xb8, 0x72, 0xd8, 0x3c, 0xec, 0xd9, 0x4f, 0x65, 0xe5, 0xa0,
0x31, 0x83, 0x55, 0x85, 0x8a, 0x3e, 0x35, 0x0a, 0x03, 0x3f, 0x62, 0xd6, 0x2d, 0x28, 0x9f, 0xf8,
0xe1, 0x48, 0x44, 0x4a, 0x0f, 0xeb, 0x9f, 0x06, 0x54, 0x34, 0x25, 0xe6, 0x21, 0xdf, 0x40, 0x71,
0xea, 0x63, 0xed, 0xcc, 0xfd, 0x14, 0xfd, 0x66, 0xf1, 0x89, 0x00, 0x29, 0xdf, 0x26, 0xc5, 0x99,
0xe7, 0x50, 0x9d, 0x67, 0x58, 0xe0, 0xe9, 0x0f, 0x66, 0x3d, 0x3d, 0x1f, 0xf8, 0x84, 0x67, 0xff,
0x6c, 0xc0, 0x1d, 0xca, 0x64, 0x29, 0x3c, 0xb9, 0x74, 0x06, 0xec, 0x20, 0xf0, 0xfb, 0xde, 0x40,
0xbb, 0xb9, 0x2a, 0xb3, 0x4a, 0x4b, 0xc6, 0x04, 0x6b, 0x40, 0xbe, 0x3b, 0x74, 0x44, 0x3f, 0xe0,
0x97, 0x4a, 0x78, 0x09, 0x85, 0x6b, 0x1a, 0x9d, 0x7c, 0x25, 0x75, 0x28, 0x2a, 0xc1, 0x67, 0x81,
0xcb, 0x64, 0xcd, 0x28, 0xd0, 0x24, 0x89, 0xd4, 0x20, 0x77, 0x1a, 0x0c, 0xce, 0x9d, 0x4b, 0x26,
0x8b, 0x43, 0x81, 0xea, 0xad, 0xf5, 0x7b, 0x03, 0xcc, 0x45, 0x5a, 0x29, 0x17, 0xff, 0x12, 0xb6,
0x0f, 0xbd, 0x01, 0x8b, 0xe2, 0xe8, 0x17, 0xda, 0xad, 0xef, 0x5f, 0xbf, 0xb7, 0xf1, 0xef, 0xd7,
0xef, 0xdd, 0x4f, 0xd4, 0xd5, 0x20, 0x64, 0x7e, 0x2f, 0xf0, 0x85, 0xe3, 0xf9, 0x8c, 0x63, 0x7b,
0xf8, 0xc8, 0x95, 0x10, 0x3b, 0x46, 0x52, 0x25, 0x81, 0xbc, 0x03, 0x5b, 0xb1, 0x74, 0x75, 0xed,
0xd5, 0xce, 0xfa, 0x6f, 0x0e, 0xca, 0xcf, 0x50, 0x01, 0xed, 0x0b, 0x1b, 0x60, 0xea, 0x42, 0x95,
0x76, 0xf3, 0x8e, 0x4d, 0x70, 0x10, 0x13, 0x0a, 0x87, 0x2a, 0xc4, 0xea, 0xba, 0x4e, 0xf6, 0xe4,
0x6b, 0x28, 0xe9, 0xf5, 0xd3, 0x50, 0xd4, 0x33, 0x32, 0x47, 0x1e, 0xa6, 0xe4, 0x48, 0x52, 0x13,
0x3b, 0x01, 0x55, 0x19, 0x92, 0xa0, 0x90, 0xcf, 0xe0, 0xce, 0xd1, 0x45, 0x18, 0x70, 0xb1, 0xef,
0xf4, 0x5e, 0x30, 0x3a, 0xdb, 0x05, 0xb2, 0x8d, 0x4c, 0xb3, 0x48, 0x6f, 0x66, 0x20, 0x3b, 0xf0,
0x96, 0x33, 0x1c, 0x06, 0x97, 0xea, 0xd2, 0xc8, 0xf4, 0xaf, 0xe7, 0x1a, 0x46, 0xb3, 0x40, 0xaf,
0x7f, 0x20, 0x1f, 0xc3, 0xed, 0x04, 0xf1, 0x31, 0xe7, 0xce, 0x18, 0xf3, 0x65, 0x4b, 0xf2, 0x2f,
0xfa, 0x84, 0x15, 0xec, 0xd0, 0xf3, 0x9d, 0x61, 0x1d, 0x24, 0x4f, 0xbc, 0x21, 0x16, 0x94, 0xbb,
0xaf, 0x51, 0x25, 0xc6, 0x1f, 0x0b, 0xc1, 0xeb, 0x25, 0x19, 0x8a, 0x19, 0x1a, 0x39, 0x83, 0xb2,
0x54, 0x38, 0xd6, 0x3d, 0xaa, 0x97, 0xa5, 0xd3, 0x76, 0x52, 0x9c, 0x26, 0xd9, 0x9f, 0x86, 0x89,
0xab, 0x34, 0x23, 0x81, 0xf4, 0xa0, 0xaa, 0x1d, 0x17, 0xdf, 0xc1, 0x7a, 0x45, 0xca, 0x7c, 0xb4,
0x6e, 0x20, 0x62, 0x74, 0x7c, 0xc4, 0x9c, 0x48, 0x4c, 0x83, 0x2e, 0x5e, 0x37, 0x47, 0xb0, 0x7a,
0x55, 0xda, 0x3c, 0xd9, 0x9b, 0x9f, 0x43, 0x6d, 0x3e, 0x96, 0xeb, 0x14, 0x7d, 0xf3, 0x57, 0x70,
0x7b, 0x81, 0x0a, 0x3f, 0xa8, 0x1e, 0xfc, 0xcd, 0x80, 0xb7, 0xae, 0xf9, 0x8d, 0x10, 0xc8, 0x7e,
0x35, 0x0e, 0x99, 0x12, 0x29, 0xd7, 0xe4, 0x04, 0x72, 0x18, 0x97, 0xa8, 0xbe, 0x29, 0x9d, 0xb6,
0xbb, 0x4e, 0x20, 0x6c, 0x89, 0x8c, 0x1d, 0x16, 0x4b, 0x31, 0x1f, 0x02, 0x4c, 0x89, 0x6b, 0xb5,
0xbe, 0x6f, 0xa0, 0xa2, 0xa2, 0xa2, 0xca, 0x43, 0x2d, 0x9e, 0x52, 0x14, 0x18, 0x67, 0x90, 0x69,
0xbb, 0xc8, 0xac, 0xd9, 0x2e, 0xac, 0xef, 0xe0, 0x16, 0x65, 0x8e, 0x7b, 0xe8, 0x0d, 0xd9, 0xcd,
0x55, 0x11, 0xef, 0xba, 0x37, 0x64, 0x67, 0x8e, 0x78, 0x31, 0xb9, 0xeb, 0x6a, 0x4f, 0xf6, 0x20,
0x47, 0x1d, 0x7f, 0xc0, 0xd4, 0xd1, 0x1f, 0xa4, 0x1c, 0x2d, 0x0f, 0x41, 0x5e, 0x1a, 0x43, 0xac,
0x47, 0x50, 0x9c, 0xd0, 0xb0, 0x52, 0x3d, 0xed, 0xf7, 0x23, 0x16, 0x57, 0xbd, 0x0c, 0x55, 0x3b,
0xa4, 0x1f, 0x33, 0x7f, 0xa0, 0x8e, 0xce, 0x50, 0xb5, 0xb3, 0xb6, 0x71, 0x54, 0xd1, 0x9a, 0x2b,
0xd7, 0x10, 0xc8, 0x1e, 0xe0, 0x3c, 0x65, 0xc8, 0x0b, 0x26, 0xd7, 0x96, 0x8b, 0x6d, 0xce, 0x71,
0x0f, 0x3c, 0x7e, 0xb3, 0x81, 0x75, 0xc8, 0x1f, 0x78, 0x3c, 0x61, 0x9f, 0xde, 0x92, 0x6d, 0x6c,
0x80, 0xbd, 0xe1, 0xc8, 0x45, 0x6b, 0x05, 0xe3, 0xbe, 0xaa, 0xf4, 0x73, 0x54, 0xeb, 0x8b, 0xd8,
0x8f, 0xf2, 0x14, 0xa5, 0xcc, 0x0e, 0xe4, 0x99, 0x2f, 0xb8, 0xc7, 0x74, 0x97, 0x24, 0x76, 0x3c,
0x02, 0xdb, 0x72, 0x04, 0x96, 0xdd, 0x98, 0x6a, 0x16, 0x6b, 0x17, 0x6e, 0x21, 0x21, 0x3d, 0x10,
0x04, 0xb2, 0x09, 0x25, 0xe5, 0xda, 0xda, 0x83, 0xda, 0x14, 0xa8, 0x8e, 0xde, 0x86, 0x2c, 0x0e,
0xd8, 0xaa, 0x8c, 0x2f, 0x3a, 0x57, 0x7e, 0xb7, 0x2a, 0x50, 0x3a, 0xf3, 0x7c, 0xdd, 0x0f, 0xad,
0x2b, 0x03, 0xca, 0x67, 0x81, 0x3f, 0xed, 0x44, 0x67, 0x70, 0x4b, 0xdf, 0xc0, 0xc7, 0x67, 0x47,
0xfb, 0x4e, 0xa8, 0x4d, 0x69, 0x5c, 0x0f, 0xb3, 0x7a, 0x0b, 0xd8, 0x31, 0x63, 0x27, 0x8b, 0x4d,
0x8b, 0xce, 0xc3, 0xc9, 0x2f, 0x20, 0x7f, 0x7c, 0xdc, 0x91, 0x92, 0x36, 0xd7, 0x92, 0xa4, 0x61,
0xe4, 0x73, 0xc8, 0x3f, 0x97, 0x4f, 0x94, 0x48, 0x35, 0x96, 0x05, 0x29, 0x17, 0x1b, 0x1a, 0xb3,
0x51, 0xd6, 0x0b, 0xb8, 0x4b, 0x35, 0xc8, 0xfa, 0x8f, 0x01, 0xb7, 0x4f, 0xd9, 0xe5, 0xbe, 0x6e,
0x9e, 0xda, 0xdb, 0x0d, 0x28, 0x4d, 0x68, 0x47, 0x07, 0xca, 0xeb, 0x49, 0x12, 0x79, 0x1f, 0xb6,
0x4e, 0x82, 0x91, 0x2f, 0xb4, 0xea, 0x45, 0xac, 0x33, 0x92, 0x42, 0xd5, 0x07, 0xf2, 0x13, 0xc8,
0x9f, 0x32, 0x81, 0x4f, 0x28, 0x99, 0x27, 0xd5, 0x76, 0x09, 0x79, 0x4e, 0x99, 0xc0, 0x89, 0x80,
0xea, 0x6f, 0x38, 0x66, 0x84, 0x7a, 0xcc, 0xc8, 0x2e, 0x1a, 0x33, 0xf4, 0x57, 0xb2, 0x0b, 0xa5,
0x5e, 0xe0, 0x47, 0x82, 0x3b, 0x1e, 0x1e, 0x9c, 0x93, 0xcc, 0x3f, 0x42, 0xe6, 0xd8, 0x9e, 0xfd,
0xe9, 0x47, 0x9a, 0xe4, 0xb4, 0xde, 0x81, 0xb7, 0x67, 0xad, 0x54, 0x33, 0xde, 0x23, 0xf8, 0x31,
0x65, 0x43, 0xe6, 0x44, 0x6c, 0x7d, 0x0f, 0x58, 0x26, 0xd4, 0xaf, 0x83, 0x95, 0xe0, 0xbf, 0x67,
0xa0, 0xd4, 0x7d, 0xcd, 0x7a, 0x27, 0x2c, 0x8a, 0x9c, 0x01, 0x23, 0xef, 0x42, 0xf1, 0x8c, 0x07,
0x3d, 0x16, 0x45, 0x13, 0x59, 0x53, 0x02, 0xf9, 0x0c, 0xb2, 0x47, 0xbe, 0x27, 0x54, 0xc5, 0xde,
0x4e, 0x9d, 0x1f, 0x3d, 0xa1, 0x64, 0xe2, 0xdb, 0x09, 0xb7, 0x64, 0x0f, 0xb2, 0x98, 0xef, 0xab,
0xd4, 0x1c, 0x37, 0x81, 0x45, 0x0c, 0xe9, 0xc8, 0xd7, 0xa6, 0xf7, 0x2d, 0x53, 0x9e, 0x6f, 0xa6,
0x17, 0x4b, 0xef, 0x5b, 0x36, 0x95, 0xa0, 0x90, 0xa4, 0x0b, 0xf9, 0x67, 0xc2, 0xe1, 0x38, 0x72,
0xc4, 0x11, 0xb9, 0x97, 0xd6, 0x53, 0x63, 0xce, 0xa9, 0x14, 0x8d, 0x45, 0x27, 0x74, 0x5f, 0x7b,
0x42, 0x0e, 0x14, 0xe9, 0x4e, 0x40, 0xb6, 0x84, 0x21, 0xb8, 0x45, 0xf4, 0x41, 0xe0, 0xb3, 0x7a,
0x7e, 0x29, 0x1a, 0xd9, 0x12, 0x68, 0xdc, 0x76, 0xf2, 0x90, 0x93, 0x4d, 0xd5, 0xfa, 0x8b, 0x01,
0xa5, 0x84, 0x8f, 0x57, 0xb8, 0x07, 0xef, 0x42, 0x16, 0x1f, 0x9b, 0x2a, 0x76, 0x05, 0x79, 0x0b,
0x98, 0x70, 0xa8, 0xa4, 0x62, 0xd5, 0x3a, 0x74, 0xe3, 0xbb, 0x59, 0xa1, 0xb8, 0x44, 0xca, 0x57,
0x62, 0x2c, 0xdd, 0x5d, 0xa0, 0xb8, 0x24, 0x3b, 0x50, 0x78, 0xc6, 0x7a, 0x23, 0xee, 0x89, 0xb1,
0x74, 0x60, 0xb5, 0x5d, 0x43, 0x29, 0x9a, 0x26, 0x2f, 0xcb, 0x84, 0xc3, 0xfa, 0x12, 0x13, 0x6b,
0xaa, 0x20, 0x81, 0xec, 0x3e, 0x8e, 0xdc, 0xa8, 0x59, 0x85, 0xca, 0x35, 0xbe, 0x7a, 0xba, 0xcb,
0x5e, 0x3d, 0x5d, 0xfd, 0xea, 0x99, 0x0d, 0x08, 0x16, 0xc1, 0x84, 0x83, 0xac, 0xc7, 0x50, 0x9c,
0x24, 0x0d, 0x3e, 0x38, 0x0f, 0x5d, 0x75, 0xd2, 0xe6, 0xa1, 0x8b, 0xa6, 0x74, 0x9f, 0x1e, 0xca,
0x53, 0x0a, 0x14, 0x97, 0x93, 0x96, 0x93, 0x49, 0xb4, 0x9c, 0x5d, 0x7c, 0xcf, 0x25, 0x32, 0x07,
0x99, 0x68, 0x70, 0x19, 0x69, 0x95, 0x71, 0x1d, 0x9b, 0x31, 0x8c, 0xa4, 0x2c, 0x69, 0xc6, 0x30,
0x6a, 0xff, 0xaf, 0x00, 0xc5, 0xe3, 0xe3, 0x4e, 0x87, 0x7b, 0xee, 0x80, 0x91, 0x3f, 0x18, 0x40,
0xae, 0x3f, 0x13, 0xc8, 0x27, 0xe9, 0x09, 0xbb, 0xf8, 0xad, 0x63, 0x7e, 0xba, 0x26, 0x4a, 0x75,
0x80, 0xaf, 0x21, 0x27, 0xa7, 0x0f, 0xf2, 0xd3, 0x15, 0xa7, 0x46, 0xb3, 0xb9, 0x9c, 0x51, 0xc9,
0xee, 0x41, 0x41, 0x77, 0x70, 0x72, 0x3f, 0x55, 0xbd, 0x99, 0x01, 0xc5, 0xfc, 0x70, 0x25, 0x5e,
0x75, 0xc8, 0x6f, 0x21, 0xaf, 0x1a, 0x33, 0xb9, 0xb7, 0x04, 0x37, 0x1d, 0x11, 0xcc, 0xfb, 0xab,
0xb0, 0x4e, 0xcd, 0xd0, 0x0d, 0x38, 0xd5, 0x8c, 0xb9, 0xf6, 0x9e, 0x6a, 0xc6, 0xb5, 0x8e, 0xfe,
0x1c, 0xb2, 0xd8, 0xa9, 0x49, 0xda, 0x35, 0x4f, 0xb4, 0x72, 0x33, 0x2d, 0x5c, 0x33, 0x2d, 0xfe,
0x37, 0x58, 0x0e, 0xe5, 0x6b, 0x27, 0xbd, 0x10, 0x26, 0xfe, 0x9e, 0x30, 0xef, 0xad, 0xc0, 0x39,
0x15, 0xaf, 0x5e, 0x0a, 0xcd, 0x15, 0xfe, 0x23, 0x58, 0x2e, 0x7e, 0xee, 0xdf, 0x88, 0x00, 0xca,
0xc9, 0x2e, 0x47, 0xec, 0x14, 0xe8, 0x82, 0xa6, 0x6f, 0xb6, 0x56, 0xe6, 0x57, 0x07, 0x7e, 0x87,
0x53, 0xe7, 0x6c, 0x07, 0x24, 0xed, 0x54, 0x77, 0x2c, 0xec, 0xb5, 0xe6, 0x83, 0xb5, 0x30, 0xea,
0x70, 0x27, 0xee, 0xb0, 0xaa, 0x8b, 0x92, 0xf4, 0x86, 0x31, 0xe9, 0xc4, 0xe6, 0x8a, 0x7c, 0x4d,
0xe3, 0x63, 0xa3, 0x53, 0xfe, 0xfe, 0xea, 0xae, 0xf1, 0xcf, 0xab, 0xbb, 0xc6, 0xbf, 0xaf, 0xee,
0x1a, 0xe7, 0x5b, 0xf2, 0x1f, 0xda, 0x07, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x9d, 0x1a,
0x7c, 0xf3, 0x16, 0x00, 0x00,
0xf8, 0xc8, 0x95, 0x10, 0x3b, 0x46, 0x52, 0x25, 0x81, 0xbc, 0x03, 0xdb, 0xb1, 0x74, 0x75, 0xed,
0xd5, 0xce, 0xfa, 0xef, 0x16, 0x94, 0x9e, 0xa2, 0x02, 0xda, 0x17, 0x36, 0xc0, 0xd4, 0x85, 0x2a,
0xed, 0xe6, 0x1d, 0x9b, 0xe0, 0x20, 0x26, 0xe4, 0x8f, 0x54, 0x88, 0xd5, 0x75, 0x9d, 0xec, 0xc9,
0xd7, 0x50, 0xd4, 0xeb, 0x27, 0xa1, 0xa8, 0x65, 0x64, 0x8e, 0x3c, 0x4c, 0xc9, 0x91, 0xa4, 0x26,
0x76, 0x02, 0xaa, 0x32, 0x24, 0x41, 0x21, 0x9f, 0xc1, 0x9d, 0x93, 0xcb, 0x30, 0xe0, 0xe2, 0xc0,
0xe9, 0x3d, 0x67, 0x74, 0xb6, 0x0b, 0x64, 0xeb, 0x99, 0x46, 0x81, 0xde, 0xcc, 0x40, 0x76, 0xe1,
0x2d, 0x67, 0x38, 0x0c, 0xae, 0xd4, 0xa5, 0x91, 0xe9, 0x5f, 0xdb, 0xaa, 0x1b, 0x8d, 0x3c, 0xbd,
0xfe, 0x81, 0x7c, 0x0c, 0xb7, 0x13, 0xc4, 0xc7, 0x9c, 0x3b, 0x63, 0xcc, 0x97, 0x6d, 0xc9, 0xbf,
0xe8, 0x13, 0x56, 0xb0, 0x23, 0xcf, 0x77, 0x86, 0x35, 0x90, 0x3c, 0xf1, 0x86, 0x58, 0x50, 0xea,
0xbc, 0x42, 0x95, 0x18, 0x7f, 0x2c, 0x04, 0xaf, 0x15, 0x65, 0x28, 0x66, 0x68, 0xa4, 0x0b, 0x25,
0xa9, 0x70, 0xac, 0x7b, 0x54, 0x2b, 0x49, 0xa7, 0xed, 0xa6, 0x38, 0x4d, 0xb2, 0x3f, 0x09, 0x13,
0x57, 0x69, 0x46, 0x02, 0xe9, 0x41, 0x45, 0x3b, 0x2e, 0xbe, 0x83, 0xb5, 0xb2, 0x94, 0xf9, 0x68,
0xdd, 0x40, 0xc4, 0xe8, 0xf8, 0x88, 0x39, 0x91, 0x98, 0x06, 0x1d, 0xbc, 0x6e, 0x8e, 0x60, 0xb5,
0x8a, 0xb4, 0x79, 0xb2, 0x37, 0x3f, 0x87, 0xea, 0x7c, 0x2c, 0xd7, 0x29, 0xfa, 0xe6, 0xaf, 0xe0,
0xf6, 0x02, 0x15, 0x7e, 0x50, 0x3d, 0xf8, 0xbb, 0x01, 0x6f, 0x5d, 0xf3, 0x1b, 0x21, 0x90, 0xfd,
0x6a, 0x1c, 0x32, 0x25, 0x52, 0xae, 0xc9, 0x19, 0x6c, 0x61, 0x5c, 0xa2, 0xda, 0xa6, 0x74, 0xda,
0xde, 0x3a, 0x81, 0xb0, 0x25, 0x32, 0x76, 0x58, 0x2c, 0xc5, 0x7c, 0x08, 0x30, 0x25, 0xae, 0xd5,
0xfa, 0xbe, 0x81, 0xb2, 0x8a, 0x8a, 0x2a, 0x0f, 0xd5, 0x78, 0x4a, 0x51, 0x60, 0x9c, 0x41, 0xa6,
0xed, 0x22, 0xb3, 0x66, 0xbb, 0xb0, 0xbe, 0x83, 0x5b, 0x94, 0x39, 0xee, 0x91, 0x37, 0x64, 0x37,
0x57, 0x45, 0xbc, 0xeb, 0xde, 0x90, 0x75, 0x1d, 0xf1, 0x7c, 0x72, 0xd7, 0xd5, 0x9e, 0xec, 0xc3,
0x16, 0x75, 0xfc, 0x01, 0x53, 0x47, 0x7f, 0x90, 0x72, 0xb4, 0x3c, 0x04, 0x79, 0x69, 0x0c, 0xb1,
0x1e, 0x41, 0x61, 0x42, 0xc3, 0x4a, 0xf5, 0xa4, 0xdf, 0x8f, 0x58, 0x5c, 0xf5, 0x32, 0x54, 0xed,
0x90, 0x7e, 0xca, 0xfc, 0x81, 0x3a, 0x3a, 0x43, 0xd5, 0xce, 0xda, 0xc1, 0x51, 0x45, 0x6b, 0xae,
0x5c, 0x43, 0x20, 0x7b, 0x88, 0xf3, 0x94, 0x21, 0x2f, 0x98, 0x5c, 0x5b, 0x2e, 0xb6, 0x39, 0xc7,
0x3d, 0xf4, 0xf8, 0xcd, 0x06, 0xd6, 0x20, 0x77, 0xe8, 0xf1, 0x84, 0x7d, 0x7a, 0x4b, 0x76, 0xb0,
0x01, 0xf6, 0x86, 0x23, 0x17, 0xad, 0x15, 0x8c, 0xfb, 0xaa, 0xd2, 0xcf, 0x51, 0xad, 0x2f, 0x62,
0x3f, 0xca, 0x53, 0x94, 0x32, 0xbb, 0x90, 0x63, 0xbe, 0xe0, 0x1e, 0xd3, 0x5d, 0x92, 0xd8, 0xf1,
0x08, 0x6c, 0xcb, 0x11, 0x58, 0x76, 0x63, 0xaa, 0x59, 0xac, 0x3d, 0xb8, 0x85, 0x84, 0xf4, 0x40,
0x10, 0xc8, 0x26, 0x94, 0x94, 0x6b, 0x6b, 0x1f, 0xaa, 0x53, 0xa0, 0x3a, 0x7a, 0x07, 0xb2, 0x38,
0x60, 0xab, 0x32, 0xbe, 0xe8, 0x5c, 0xf9, 0xdd, 0x2a, 0x43, 0xb1, 0xeb, 0xf9, 0xba, 0x1f, 0x5a,
0x6f, 0x0c, 0x28, 0x75, 0x03, 0x7f, 0xda, 0x89, 0xba, 0x70, 0x4b, 0xdf, 0xc0, 0xc7, 0xdd, 0x93,
0x03, 0x27, 0xd4, 0xa6, 0xd4, 0xaf, 0x87, 0x59, 0xbd, 0x05, 0xec, 0x98, 0xb1, 0x9d, 0xc5, 0xa6,
0x45, 0xe7, 0xe1, 0xe4, 0x17, 0x90, 0x3b, 0x3d, 0x6d, 0x4b, 0x49, 0x9b, 0x6b, 0x49, 0xd2, 0x30,
0xf2, 0x39, 0xe4, 0x9e, 0xc9, 0x27, 0x4a, 0xa4, 0x1a, 0xcb, 0x82, 0x94, 0x8b, 0x0d, 0x8d, 0xd9,
0x28, 0xeb, 0x05, 0xdc, 0xa5, 0x1a, 0x64, 0xfd, 0x69, 0x13, 0x6e, 0x9f, 0xb3, 0xab, 0x03, 0xdd,
0x3c, 0xb5, 0xb7, 0xeb, 0x50, 0x9c, 0xd0, 0x4e, 0x0e, 0x95, 0xd7, 0x93, 0x24, 0xf2, 0x3e, 0x6c,
0x9f, 0x05, 0x23, 0x5f, 0x68, 0xd5, 0x0b, 0x58, 0x67, 0x24, 0x85, 0xaa, 0x0f, 0xe4, 0x27, 0x90,
0x3b, 0x67, 0x02, 0x9f, 0x50, 0x32, 0x4f, 0x2a, 0xad, 0x22, 0xf2, 0x9c, 0x33, 0x81, 0x13, 0x01,
0xd5, 0xdf, 0x70, 0xcc, 0x08, 0xf5, 0x98, 0x91, 0x5d, 0x34, 0x66, 0xe8, 0xaf, 0x64, 0x0f, 0x8a,
0xbd, 0xc0, 0x8f, 0x04, 0x77, 0x3c, 0x3c, 0x78, 0x4b, 0x32, 0xff, 0x08, 0x99, 0x63, 0x7b, 0x0e,
0xa6, 0x1f, 0x69, 0x92, 0x93, 0xdc, 0x07, 0x60, 0xaf, 0x04, 0x77, 0x8e, 0x83, 0x48, 0x44, 0xb5,
0x6d, 0xa9, 0x30, 0x20, 0x0e, 0x09, 0x27, 0x5d, 0x9a, 0xf8, 0x6a, 0xbd, 0x03, 0x6f, 0xcf, 0x7a,
0x44, 0xcd, 0x83, 0x8f, 0xe0, 0xc7, 0x94, 0x0d, 0x99, 0x13, 0xb1, 0xf5, 0xbd, 0x65, 0x99, 0x50,
0xbb, 0x0e, 0x56, 0x82, 0xff, 0x91, 0x81, 0x62, 0xe7, 0x15, 0xeb, 0x9d, 0xb1, 0x28, 0x72, 0x06,
0x8c, 0xbc, 0x0b, 0x85, 0x2e, 0x0f, 0x7a, 0x2c, 0x8a, 0x26, 0xb2, 0xa6, 0x04, 0xf2, 0x19, 0x64,
0x4f, 0x7c, 0x4f, 0xa8, 0xea, 0xbe, 0x93, 0x3a, 0x6b, 0x7a, 0x42, 0xc9, 0xc4, 0x77, 0x16, 0x6e,
0xc9, 0x3e, 0x64, 0xf1, 0x6e, 0xac, 0x52, 0x9f, 0xdc, 0x04, 0x16, 0x31, 0xa4, 0x2d, 0x5f, 0xa6,
0xde, 0xb7, 0x4c, 0x45, 0xa9, 0x91, 0x5e, 0x58, 0xbd, 0x6f, 0xd9, 0x54, 0x82, 0x42, 0x92, 0x0e,
0xe4, 0x9e, 0x0a, 0x87, 0xe3, 0x78, 0x12, 0x47, 0xef, 0x5e, 0x5a, 0xff, 0x8d, 0x39, 0xa7, 0x52,
0x34, 0x16, 0x9d, 0xd0, 0x79, 0xe5, 0x09, 0x39, 0x7c, 0xa4, 0x3b, 0x01, 0xd9, 0x12, 0x86, 0xe0,
0x16, 0xd1, 0x87, 0x81, 0xcf, 0x6a, 0xb9, 0xa5, 0x68, 0x64, 0x4b, 0xa0, 0x71, 0xdb, 0xce, 0xc1,
0x96, 0x6c, 0xc0, 0xd6, 0x5f, 0x0d, 0x28, 0x26, 0x7c, 0xbc, 0xc2, 0x9d, 0x79, 0x17, 0xb2, 0xf8,
0x30, 0x55, 0xb1, 0xcb, 0xcb, 0x1b, 0xc3, 0x84, 0x43, 0x25, 0x15, 0x2b, 0xdc, 0x91, 0x1b, 0xdf,
0xe3, 0x32, 0xc5, 0x25, 0x52, 0xbe, 0x12, 0x63, 0xe9, 0xee, 0x3c, 0xc5, 0x25, 0xd9, 0x85, 0xfc,
0x53, 0xd6, 0x1b, 0x71, 0x4f, 0x8c, 0xa5, 0x03, 0x2b, 0xad, 0x2a, 0x4a, 0xd1, 0x34, 0x79, 0xb1,
0x26, 0x1c, 0xd6, 0x97, 0x98, 0x58, 0x53, 0x05, 0x09, 0x64, 0x0f, 0x70, 0x3c, 0x47, 0xcd, 0xca,
0x54, 0xae, 0xf1, 0x85, 0xd4, 0x59, 0xf6, 0x42, 0xea, 0xe8, 0x17, 0xd2, 0x6c, 0x40, 0xb0, 0x60,
0x26, 0x1c, 0x64, 0x3d, 0x86, 0xc2, 0x24, 0x69, 0xf0, 0x71, 0x7a, 0xe4, 0xaa, 0x93, 0x36, 0x8f,
0x5c, 0x34, 0xa5, 0xf3, 0xe4, 0x48, 0x9e, 0x92, 0xa7, 0xb8, 0x9c, 0xb4, 0xa7, 0x4c, 0xa2, 0x3d,
0xed, 0xe1, 0xdb, 0x2f, 0x91, 0x39, 0xc8, 0x44, 0x83, 0xab, 0x48, 0xab, 0x8c, 0xeb, 0xd8, 0x8c,
0x61, 0x24, 0x65, 0x49, 0x33, 0x86, 0x51, 0xeb, 0x7f, 0x79, 0x28, 0x9c, 0x9e, 0xb6, 0xdb, 0xdc,
0x73, 0x07, 0x8c, 0xfc, 0xc1, 0x00, 0x72, 0xfd, 0x49, 0x41, 0x3e, 0x49, 0x4f, 0xd8, 0xc5, 0xef,
0x22, 0xf3, 0xd3, 0x35, 0x51, 0xaa, 0x5b, 0x7c, 0x0d, 0x5b, 0x72, 0x52, 0x21, 0x3f, 0x5d, 0x71,
0xc2, 0x34, 0x1b, 0xcb, 0x19, 0x95, 0xec, 0x1e, 0xe4, 0x75, 0xb7, 0x27, 0xf7, 0x53, 0xd5, 0x9b,
0x19, 0x66, 0xcc, 0x0f, 0x57, 0xe2, 0x55, 0x87, 0xfc, 0x16, 0x72, 0xaa, 0x89, 0x93, 0x7b, 0x4b,
0x70, 0xd3, 0x71, 0xc2, 0xbc, 0xbf, 0x0a, 0xeb, 0xd4, 0x0c, 0xdd, 0xac, 0x53, 0xcd, 0x98, 0x1b,
0x05, 0x52, 0xcd, 0xb8, 0xd6, 0xfd, 0x9f, 0x41, 0x16, 0xbb, 0x3a, 0x49, 0xbb, 0xe6, 0x89, 0xb6,
0x6f, 0xa6, 0x85, 0x6b, 0x66, 0x1c, 0xf8, 0x0d, 0x96, 0x43, 0xf9, 0x32, 0x4a, 0x2f, 0x84, 0x89,
0xbf, 0x32, 0xcc, 0x7b, 0x2b, 0x70, 0x4e, 0xc5, 0xab, 0x57, 0x45, 0x63, 0x85, 0xff, 0x13, 0x96,
0x8b, 0x9f, 0xfb, 0xe7, 0x22, 0x80, 0x52, 0xb2, 0xcb, 0x11, 0x3b, 0x05, 0xba, 0x60, 0x40, 0x30,
0x9b, 0x2b, 0xf3, 0xab, 0x03, 0xbf, 0xc3, 0x09, 0x75, 0xb6, 0x03, 0x92, 0x56, 0xaa, 0x3b, 0x16,
0xf6, 0x5a, 0xf3, 0xc1, 0x5a, 0x18, 0x75, 0xb8, 0x13, 0x77, 0x58, 0xd5, 0x45, 0x49, 0x7a, 0xc3,
0x98, 0x74, 0x62, 0x73, 0x45, 0xbe, 0x86, 0xf1, 0xb1, 0xd1, 0x2e, 0x7d, 0xff, 0xe6, 0xae, 0xf1,
0xaf, 0x37, 0x77, 0x8d, 0xff, 0xbc, 0xb9, 0x6b, 0x5c, 0x6c, 0xcb, 0x7f, 0x73, 0x1f, 0xfc, 0x3f,
0x00, 0x00, 0xff, 0xff, 0xf5, 0x6a, 0xee, 0x8e, 0x1f, 0x17, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -3878,6 +3887,20 @@ func (m *NewContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if len(m.ExtraHosts) > 0 {
for iNdEx := len(m.ExtraHosts) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.ExtraHosts[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintGateway(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x32
}
}
if m.Constraints != nil {
{
size, err := m.Constraints.MarshalToSizedBuffer(dAtA[:i])
@ -5035,6 +5058,12 @@ func (m *NewContainerRequest) Size() (n int) {
l = m.Constraints.Size()
n += 1 + l + sovGateway(uint64(l))
}
if len(m.ExtraHosts) > 0 {
for _, e := range m.ExtraHosts {
l = e.Size()
n += 1 + l + sovGateway(uint64(l))
}
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
@ -8825,6 +8854,40 @@ func (m *NewContainerRequest) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExtraHosts", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGateway
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthGateway
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthGateway
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExtraHosts = append(m.ExtraHosts, &pb.HostIP{})
if err := m.ExtraHosts[len(m.ExtraHosts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGateway(dAtA[iNdEx:])

View File

@ -176,6 +176,7 @@ message NewContainerRequest {
pb.NetMode Network = 3;
pb.Platform platform = 4;
pb.WorkerConstraints constraints = 5;
repeated pb.HostIP extraHosts = 6;
}
message NewContainerResponse{}

View File

@ -5,7 +5,6 @@ import (
"crypto/ed25519"
"crypto/hmac"
"crypto/sha256"
"encoding/json"
"fmt"
"io"
"net/http"
@ -191,8 +190,6 @@ func (ap *authProvider) getAuthorityKey(host string, salt []byte) (ed25519.Priva
mac := hmac.New(sha256.New, salt)
if creds.Secret != "" {
mac.Write(seed)
enc := json.NewEncoder(mac)
enc.Encode(creds)
}
sum := mac.Sum(nil)

View File

@ -37,7 +37,7 @@ func (ts *tokenSeeds) getSeed(host string) ([]byte, error) {
l := flock.New(filepath.Join(ts.dir, ".token_seed.lock"))
if err := l.Lock(); err != nil {
if !errors.Is(err, syscall.EROFS) && errors.Is(err, syscall.EPERM) {
if !errors.Is(err, syscall.EROFS) && !errors.Is(err, os.ErrPermission) {
return nil, err
}
} else {
@ -49,7 +49,7 @@ func (ts *tokenSeeds) getSeed(host string) ([]byte, error) {
// we include client side randomness to avoid chosen plaintext attack from the daemon side
dt, err := ioutil.ReadFile(fp)
if err != nil {
if !errors.Is(err, os.ErrNotExist) && !errors.Is(err, syscall.ENOTDIR) {
if !errors.Is(err, os.ErrNotExist) && !errors.Is(err, syscall.ENOTDIR) && !errors.Is(err, os.ErrPermission) {
return nil, err
}
} else {
@ -69,7 +69,7 @@ func (ts *tokenSeeds) getSeed(host string) ([]byte, error) {
}
if err := ioutil.WriteFile(fp, dt, 0600); err != nil {
if !errors.Is(err, syscall.EROFS) && !errors.Is(err, syscall.EPERM) {
if !errors.Is(err, syscall.EROFS) && !errors.Is(err, os.ErrPermission) {
return nil, err
}
}

View File

@ -9,7 +9,7 @@ import (
"github.com/containerd/containerd/services/content/contentserver"
"github.com/moby/buildkit/session"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
@ -104,7 +104,7 @@ func (cs *attachableContentStore) Writer(ctx context.Context, opts ...content.Wr
return store.Writer(ctx, opts...)
}
func (cs *attachableContentStore) ReaderAt(ctx context.Context, desc ocispec.Descriptor) (content.ReaderAt, error) {
func (cs *attachableContentStore) ReaderAt(ctx context.Context, desc ocispecs.Descriptor) (content.ReaderAt, error) {
store, err := cs.choose(ctx)
if err != nil {
return nil, err

View File

@ -8,7 +8,7 @@ import (
"github.com/containerd/containerd/content/proxy"
"github.com/moby/buildkit/session"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"google.golang.org/grpc/metadata"
)
@ -75,7 +75,7 @@ func (cs *callerContentStore) Writer(ctx context.Context, opts ...content.Writer
return w, errors.WithStack(err)
}
func (cs *callerContentStore) ReaderAt(ctx context.Context, desc ocispec.Descriptor) (content.ReaderAt, error) {
func (cs *callerContentStore) ReaderAt(ctx context.Context, desc ocispecs.Descriptor) (content.ReaderAt, error) {
ctx = cs.choose(ctx)
ra, err := cs.store.ReaderAt(ctx, desc)
return ra, errors.WithStack(err)

View File

@ -7,8 +7,9 @@ import (
"os"
"time"
"github.com/moby/buildkit/util/bklog"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/tonistiigi/fsutil"
fstypes "github.com/tonistiigi/fsutil/types"
"google.golang.org/grpc"
@ -73,7 +74,7 @@ func (wc *streamWriterCloser) Close() error {
func recvDiffCopy(ds grpc.ClientStream, dest string, cu CacheUpdater, progress progressCb, differ fsutil.DiffType, filter func(string, *fstypes.Stat) bool) (err error) {
st := time.Now()
defer func() {
logrus.Debugf("diffcopy took: %v", time.Since(st))
bklog.G(ds.Context()).Debugf("diffcopy took: %v", time.Since(st))
}()
var cf fsutil.ChangeFunc
var ch fsutil.ContentHasher

View File

@ -64,7 +64,7 @@ func (sp *fsSyncProvider) TarStream(stream FileSync_TarStreamServer) error {
func (sp *fsSyncProvider) handle(method string, stream grpc.ServerStream) (retErr error) {
var pr *protocol
for _, p := range supportedProtocols {
if method == p.name && isProtoSupported(p.name) {
if method == p.name {
pr = &p
break
}
@ -133,14 +133,6 @@ type protocol struct {
recvFn func(stream grpc.ClientStream, destDir string, cu CacheUpdater, progress progressCb, differ fsutil.DiffType, mapFunc func(string, *fstypes.Stat) bool) error
}
func isProtoSupported(p string) bool {
// TODO: this should be removed after testing if stability is confirmed
if override := os.Getenv("BUILD_STREAM_PROTOCOL"); override != "" {
return strings.EqualFold(p, override)
}
return true
}
var supportedProtocols = []protocol{
{
name: "diffcopy",
@ -174,7 +166,7 @@ type CacheUpdater interface {
func FSSync(ctx context.Context, c session.Caller, opt FSSendRequestOpt) error {
var pr *protocol
for _, p := range supportedProtocols {
if isProtoSupported(p.name) && c.Supports(session.MethodURL(_FileSync_serviceDesc.ServiceName, p.name)) {
if c.Supports(session.MethodURL(_FileSync_serviceDesc.ServiceName, p.name)) {
pr = &p
break
}

View File

@ -7,9 +7,9 @@ import (
"time"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
"github.com/moby/buildkit/util/bklog"
"github.com/moby/buildkit/util/grpcerrors"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/otel/trace"
"golang.org/x/net/http2"
@ -22,7 +22,7 @@ func serve(ctx context.Context, grpcServer *grpc.Server, conn net.Conn) {
<-ctx.Done()
conn.Close()
}()
logrus.Debugf("serving grpc connection")
bklog.G(ctx).Debugf("serving grpc connection")
(&http2.Server{}).ServeConn(conn, &http2.ServeConnOpts{Handler: grpcServer})
}

View File

@ -62,6 +62,8 @@ const (
CapMetaIgnoreCache apicaps.CapID = "meta.ignorecache"
CapMetaDescription apicaps.CapID = "meta.description"
CapMetaExportCache apicaps.CapID = "meta.exportcache"
CapRemoteCacheGHA apicaps.CapID = "cache.gha"
)
func init() {
@ -339,4 +341,10 @@ func init() {
Enabled: true,
Status: apicaps.CapStatusExperimental,
})
Caps.Init(apicaps.Cap{
ID: CapRemoteCacheGHA,
Enabled: true,
Status: apicaps.CapStatusExperimental,
})
}

View File

@ -1,11 +1,11 @@
package pb
import (
specs "github.com/opencontainers/image-spec/specs-go/v1"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)
func (p *Platform) Spec() specs.Platform {
return specs.Platform{
func (p *Platform) Spec() ocispecs.Platform {
return ocispecs.Platform{
OS: p.OS,
Architecture: p.Architecture,
Variant: p.Variant,
@ -14,7 +14,7 @@ func (p *Platform) Spec() specs.Platform {
}
}
func PlatformFromSpec(p specs.Platform) Platform {
func PlatformFromSpec(p ocispecs.Platform) Platform {
return Platform{
OS: p.OS,
Architecture: p.Architecture,
@ -24,15 +24,15 @@ func PlatformFromSpec(p specs.Platform) Platform {
}
}
func ToSpecPlatforms(p []Platform) []specs.Platform {
out := make([]specs.Platform, 0, len(p))
func ToSpecPlatforms(p []Platform) []ocispecs.Platform {
out := make([]ocispecs.Platform, 0, len(p))
for _, pp := range p {
out = append(out, pp.Spec())
}
return out
}
func PlatformsFromSpec(p []specs.Platform) []Platform {
func PlatformsFromSpec(p []ocispecs.Platform) []Platform {
out := make([]Platform, 0, len(p))
for _, pp := range p {
out = append(out, PlatformFromSpec(pp))

54
vendor/github.com/moby/buildkit/util/bklog/log.go generated vendored Normal file
View File

@ -0,0 +1,54 @@
package bklog
import (
"context"
"github.com/sirupsen/logrus"
"go.opentelemetry.io/otel/trace"
)
var (
G = GetLogger
L = logrus.NewEntry(logrus.StandardLogger())
)
var (
logWithTraceID = false
)
func EnableLogWithTraceID(b bool) {
logWithTraceID = b
}
type (
loggerKey struct{}
)
// WithLogger returns a new context with the provided logger. Use in
// combination with logger.WithField(s) for great effect.
func WithLogger(ctx context.Context, logger *logrus.Entry) context.Context {
return context.WithValue(ctx, loggerKey{}, logger)
}
// GetLogger retrieves the current logger from the context. If no logger is
// available, the default logger is returned.
func GetLogger(ctx context.Context) (l *logrus.Entry) {
logger := ctx.Value(loggerKey{})
if logger != nil {
l = logger.(*logrus.Entry)
} else {
l = L
}
if logWithTraceID {
if spanContext := trace.SpanFromContext(ctx).SpanContext(); spanContext.IsValid() {
return l.WithFields(logrus.Fields{
"traceID": spanContext.TraceID(),
"spanID": spanContext.SpanID(),
})
}
}
return l
}

View File

@ -5,7 +5,7 @@ import (
"github.com/moby/buildkit/client"
"github.com/moby/buildkit/identity"
"github.com/opencontainers/go-digest"
digest "github.com/opencontainers/go-digest"
)
type Logger func(*client.SolveStatus)

View File

@ -5,7 +5,7 @@ import (
"github.com/moby/buildkit/client"
"github.com/moby/buildkit/identity"
"github.com/opencontainers/go-digest"
digest "github.com/opencontainers/go-digest"
)
type Writer interface {

View File

@ -1,3 +1,3 @@
package stack
//go:generate protoc -I=. -I=../../vendor/ --go_out=. stack.proto
//go:generate protoc -I=. -I=../../vendor/ --go_out=. --go_opt=paths=source_relative --go_opt=Mstack.proto=/util/stack stack.proto

View File

@ -1,29 +0,0 @@
// +build linux,seccomp
package system
import (
"sync"
"golang.org/x/sys/unix"
)
var seccompSupported bool
var seccompOnce sync.Once
func SeccompSupported() bool {
seccompOnce.Do(func() {
seccompSupported = getSeccompSupported()
})
return seccompSupported
}
func getSeccompSupported() bool {
if err := unix.Prctl(unix.PR_GET_SECCOMP, 0, 0, 0, 0); err != unix.EINVAL {
// Make sure the kernel has CONFIG_SECCOMP_FILTER.
if err := unix.Prctl(unix.PR_SET_SECCOMP, unix.SECCOMP_MODE_FILTER, 0, 0, 0); err != unix.EINVAL {
return true
}
}
return false
}

View File

@ -1,7 +0,0 @@
// +build !linux,seccomp
package system
func SeccompSupported() bool {
return false
}

View File

@ -1,7 +0,0 @@
// +build !seccomp
package system
func SeccompSupported() bool {
return false
}

View File

@ -8,6 +8,7 @@ import (
"strconv"
"sync"
"github.com/moby/buildkit/util/bklog"
"github.com/pkg/errors"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
@ -82,6 +83,10 @@ func detect() error {
if exp == nil {
return nil
}
// enable log with traceID when valid exporter
bklog.EnableLogWithTraceID(true)
res, err := resource.Detect(context.Background(), serviceNameDetector{})
if err != nil {
return err

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package otlptracegrpc // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
package otlptracegrpc
import (
"context"

View File

@ -3,9 +3,12 @@ package tracing
import (
"context"
"fmt"
"io"
"net/http"
"net/http/httptrace"
"github.com/moby/buildkit/util/bklog"
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/propagation"
@ -22,6 +25,7 @@ func StartSpan(ctx context.Context, operationName string, opts ...trace.SpanStar
tracer = parent.TracerProvider().Tracer("")
}
ctx, span := tracer.Start(ctx, operationName, opts...)
ctx = bklog.WithLogger(ctx, bklog.GetLogger(ctx).WithField("span", operationName))
return span, ctx
}
@ -53,81 +57,17 @@ func ContextWithSpanFromContext(ctx, ctx2 context.Context) context.Context {
return ctx
}
var DefaultTransport http.RoundTripper = &Transport{
RoundTripper: NewTransport(http.DefaultTransport),
}
var DefaultTransport http.RoundTripper = NewTransport(http.DefaultTransport)
var DefaultClient = &http.Client{
Transport: DefaultTransport,
}
var propagators = propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})
type Transport struct {
http.RoundTripper
}
func NewTransport(rt http.RoundTripper) http.RoundTripper {
// TODO: switch to otelhttp. needs upstream updates to avoid transport-global tracer
return &Transport{
RoundTripper: rt,
}
}
func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
span := trace.SpanFromContext(req.Context())
if !span.SpanContext().IsValid() { // no tracer connected with either request or transport
return t.RoundTripper.RoundTrip(req)
}
ctx, span := span.TracerProvider().Tracer("").Start(req.Context(), req.Method)
req = req.WithContext(ctx)
span.SetAttributes(semconv.HTTPClientAttributesFromHTTPRequest(req)...)
propagators.Inject(ctx, propagation.HeaderCarrier(req.Header))
resp, err := t.RoundTripper.RoundTrip(req)
if err != nil {
span.RecordError(err)
span.End()
return resp, err
}
span.SetAttributes(semconv.HTTPAttributesFromHTTPStatusCode(resp.StatusCode)...)
span.SetStatus(semconv.SpanStatusFromHTTPStatusCode(resp.StatusCode))
if req.Method == "HEAD" {
span.End()
} else {
resp.Body = &wrappedBody{ctx: ctx, span: span, body: resp.Body}
}
return resp, err
}
type wrappedBody struct {
ctx context.Context
span trace.Span
body io.ReadCloser
}
var _ io.ReadCloser = &wrappedBody{}
func (wb *wrappedBody) Read(b []byte) (int, error) {
n, err := wb.body.Read(b)
switch err {
case nil:
// nothing to do here but fall through to the return
case io.EOF:
wb.span.End()
default:
wb.span.RecordError(err)
}
return n, err
}
func (wb *wrappedBody) Close() error {
wb.span.End()
return wb.body.Close()
return otelhttp.NewTransport(rt,
otelhttp.WithPropagators(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})),
otelhttp.WithClientTrace(func(ctx context.Context) *httptrace.ClientTrace {
return otelhttptrace.NewClientTrace(ctx, otelhttptrace.WithoutSubSpans())
}),
)
}