vendor: update buildkit to v0.19.0-rc1

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi
2025-01-14 14:20:26 -08:00
parent 630066bfc5
commit 44fa243d58
1910 changed files with 95196 additions and 50438 deletions

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/api/services/control/control.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/api/types/worker.proto

View File

@ -10,7 +10,7 @@ import (
"time"
contentapi "github.com/containerd/containerd/api/services/content/v1"
"github.com/containerd/containerd/defaults"
"github.com/containerd/containerd/v2/defaults"
controlapi "github.com/moby/buildkit/api/services/control"
"github.com/moby/buildkit/client/connhelper"
"github.com/moby/buildkit/session"

View File

@ -16,7 +16,6 @@ import (
// For example, after marshalling a LLB state and sending over the wire, the
// LLB state can be reconstructed from the definition.
type DefinitionOp struct {
MarshalCache
mu sync.Mutex
ops map[digest.Digest]*pb.Op
defs map[digest.Digest][]byte

View File

@ -8,7 +8,7 @@ import (
)
type DiffOp struct {
MarshalCache
cache MarshalCache
lower Output
upper Output
output Output
@ -31,7 +31,10 @@ func (m *DiffOp) Validate(ctx context.Context, constraints *Constraints) error {
}
func (m *DiffOp) Marshal(ctx context.Context, constraints *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
if dgst, dt, md, srcs, err := m.Load(constraints); err == nil {
cache := m.cache.Acquire()
defer cache.Release()
if dgst, dt, md, srcs, err := cache.Load(constraints); err == nil {
return dgst, dt, md, srcs, nil
}
if err := m.Validate(ctx, constraints); err != nil {
@ -72,7 +75,7 @@ func (m *DiffOp) Marshal(ctx context.Context, constraints *Constraints) (digest.
return "", nil, nil, nil, err
}
return m.Store(dt, md, m.constraints.SourceLocations, constraints)
return cache.Store(dt, md, m.constraints.SourceLocations, constraints)
}
func (m *DiffOp) Output() Output {

View File

@ -51,7 +51,7 @@ type mount struct {
}
type ExecOp struct {
MarshalCache
cache MarshalCache
proxyEnv *ProxyEnv
root Output
mounts []*mount
@ -63,6 +63,9 @@ type ExecOp struct {
}
func (e *ExecOp) AddMount(target string, source Output, opt ...MountOption) Output {
cache := e.cache.Acquire()
defer cache.Release()
m := &mount{
target: target,
source: source,
@ -84,7 +87,7 @@ func (e *ExecOp) AddMount(target string, source Output, opt ...MountOption) Outp
}
m.output = o
}
e.Store(nil, nil, nil, nil)
cache.Store(nil, nil, nil, nil)
e.isValidated = false
return m.output
}
@ -128,7 +131,10 @@ func (e *ExecOp) Validate(ctx context.Context, c *Constraints) error {
}
func (e *ExecOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
if dgst, dt, md, srcs, err := e.Load(c); err == nil {
cache := e.cache.Acquire()
defer cache.Release()
if dgst, dt, md, srcs, err := cache.Load(c); err == nil {
return dgst, dt, md, srcs, nil
}
@ -446,7 +452,7 @@ func (e *ExecOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, []
if err != nil {
return "", nil, nil, nil, err
}
return e.Store(dt, md, e.constraints.SourceLocations, c)
return cache.Store(dt, md, e.constraints.SourceLocations, c)
}
func (e *ExecOp) Output() Output {

View File

@ -85,6 +85,13 @@ func (fa *FileAction) Mkfile(p string, m os.FileMode, dt []byte, opt ...MkfileOp
return a
}
// Symlink creates a symlink at `newpath` that points to `oldpath`
func (fa *FileAction) Symlink(oldpath, newpath string, opt ...SymlinkOption) *FileAction {
a := Symlink(oldpath, newpath, opt...)
a.prev = fa
return a
}
func (fa *FileAction) Rm(p string, opt ...RmOption) *FileAction {
a := Rm(p, opt...)
a.prev = fa
@ -193,6 +200,7 @@ type ChownOption interface {
MkdirOption
MkfileOption
CopyOption
SymlinkOption
}
type mkdirOptionFunc func(*MkdirInfo)
@ -290,6 +298,10 @@ func (co ChownOpt) SetCopyOption(mi *CopyInfo) {
mi.ChownOpt = &co
}
func (co ChownOpt) SetSymlinkOption(si *SymlinkInfo) {
si.ChownOpt = &co
}
func (co *ChownOpt) marshal(base pb.InputIndex) *pb.ChownOpt {
if co == nil {
return nil
@ -337,6 +349,57 @@ func Mkfile(p string, m os.FileMode, dt []byte, opts ...MkfileOption) *FileActio
}
}
// SymlinkInfo is the modifiable options used to create symlinks
type SymlinkInfo struct {
ChownOpt *ChownOpt
CreatedTime *time.Time
}
func (si *SymlinkInfo) SetSymlinkOption(si2 *SymlinkInfo) {
*si2 = *si
}
type SymlinkOption interface {
SetSymlinkOption(*SymlinkInfo)
}
// Symlink creates a symlink at `newpath` that points to `oldpath`
func Symlink(oldpath, newpath string, opts ...SymlinkOption) *FileAction {
var si SymlinkInfo
for _, o := range opts {
o.SetSymlinkOption(&si)
}
return &FileAction{
action: &fileActionSymlink{
oldpath: oldpath,
newpath: newpath,
info: si,
},
}
}
type fileActionSymlink struct {
oldpath string
newpath string
info SymlinkInfo
}
func (s *fileActionSymlink) addCaps(f *FileOp) {
addCap(&f.constraints, pb.CapFileSymlinkCreate)
}
func (s *fileActionSymlink) toProtoAction(_ context.Context, _ string, base pb.InputIndex) (pb.IsFileAction, error) {
return &pb.FileAction_Symlink{
Symlink: &pb.FileActionSymlink{
Oldpath: s.oldpath,
Newpath: s.newpath,
Owner: s.info.ChownOpt.marshal(base),
Timestamp: marshalTime(s.info.CreatedTime),
},
}, nil
}
type MkfileOption interface {
SetMkfileOption(*MkfileInfo)
}
@ -606,6 +669,10 @@ func (c CreatedTime) SetMkfileOption(mi *MkfileInfo) {
mi.CreatedTime = (*time.Time)(&c)
}
func (c CreatedTime) SetSymlinkOption(si *SymlinkInfo) {
si.CreatedTime = (*time.Time)(&c)
}
func (c CreatedTime) SetCopyOption(mi *CopyInfo) {
mi.CreatedTime = (*time.Time)(&c)
}
@ -746,7 +813,10 @@ func (ms *marshalState) add(fa *FileAction, c *Constraints) (*fileActionState, e
}
func (f *FileOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
if dgst, dt, md, srcs, err := f.Load(c); err == nil {
cache := f.Acquire()
defer cache.Release()
if dgst, dt, md, srcs, err := cache.Load(c); err == nil {
return dgst, dt, md, srcs, nil
}
@ -816,7 +886,7 @@ func (f *FileOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, []
if err != nil {
return "", nil, nil, nil, err
}
return f.Store(dt, md, f.constraints.SourceLocations, c)
return cache.Store(dt, md, f.constraints.SourceLocations, c)
}
func normalizePath(parent, p string, keepSlash bool) string {

View File

@ -117,30 +117,45 @@ func MarshalConstraints(base, override *Constraints) (*pb.Op, *pb.OpMetadata) {
}
type MarshalCache struct {
cache sync.Map
mu sync.Mutex
cache map[*Constraints]*marshalCacheResult
}
func (mc *MarshalCache) Load(c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
v, ok := mc.cache.Load(c)
type MarshalCacheInstance struct {
*MarshalCache
}
func (mc *MarshalCache) Acquire() *MarshalCacheInstance {
mc.mu.Lock()
return &MarshalCacheInstance{mc}
}
func (mc *MarshalCacheInstance) Load(c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
res, ok := mc.cache[c]
if !ok {
return "", nil, nil, nil, cerrdefs.ErrNotFound
}
res := v.(*marshalCacheResult)
return res.digest, res.dt, res.md, res.srcs, nil
}
func (mc *MarshalCache) Store(dt []byte, md *pb.OpMetadata, srcs []*SourceLocation, c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
func (mc *MarshalCacheInstance) Store(dt []byte, md *pb.OpMetadata, srcs []*SourceLocation, c *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
res := &marshalCacheResult{
digest: digest.FromBytes(dt),
dt: dt,
md: md,
srcs: srcs,
}
mc.cache.Store(c, res)
if mc.cache == nil {
mc.cache = make(map[*Constraints]*marshalCacheResult)
}
mc.cache[c] = res
return res.digest, res.dt, res.md, res.srcs, nil
}
func (mc *MarshalCacheInstance) Release() {
mc.mu.Unlock()
}
type marshalCacheResult struct {
digest digest.Digest
dt []byte

View File

@ -9,7 +9,7 @@ import (
)
type MergeOp struct {
MarshalCache
cache MarshalCache
inputs []Output
output Output
constraints Constraints
@ -32,7 +32,10 @@ func (m *MergeOp) Validate(ctx context.Context, constraints *Constraints) error
}
func (m *MergeOp) Marshal(ctx context.Context, constraints *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
if dgst, dt, md, srcs, err := m.Load(constraints); err == nil {
cache := m.cache.Acquire()
defer cache.Release()
if dgst, dt, md, srcs, err := cache.Load(constraints); err == nil {
return dgst, dt, md, srcs, nil
}
@ -59,7 +62,7 @@ func (m *MergeOp) Marshal(ctx context.Context, constraints *Constraints) (digest
return "", nil, nil, nil, err
}
return m.Store(dt, md, m.constraints.SourceLocations, constraints)
return cache.Store(dt, md, m.constraints.SourceLocations, constraints)
}
func (m *MergeOp) Output() Output {

View File

@ -20,7 +20,7 @@ import (
)
type SourceOp struct {
MarshalCache
cache MarshalCache
id string
attrs map[string]string
output Output
@ -49,7 +49,10 @@ func (s *SourceOp) Validate(ctx context.Context, c *Constraints) error {
}
func (s *SourceOp) Marshal(ctx context.Context, constraints *Constraints) (digest.Digest, []byte, *pb.OpMetadata, []*SourceLocation, error) {
if dgst, dt, md, srcs, err := s.Load(constraints); err == nil {
cache := s.cache.Acquire()
defer cache.Release()
if dgst, dt, md, srcs, err := cache.Load(constraints); err == nil {
return dgst, dt, md, srcs, nil
}
@ -82,7 +85,7 @@ func (s *SourceOp) Marshal(ctx context.Context, constraints *Constraints) (diges
return "", nil, nil, nil, err
}
return s.Store(dt, md, s.constraints.SourceLocations, constraints)
return cache.Store(dt, md, s.constraints.SourceLocations, constraints)
}
func (s *SourceOp) Output() Output {

View File

@ -3,10 +3,12 @@ package ociindex
import (
"encoding/json"
"io"
"maps"
"os"
"path"
"syscall"
"github.com/containerd/containerd/v2/pkg/reference"
"github.com/gofrs/flock"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
@ -15,6 +17,8 @@ import (
const (
// lockFileSuffix is the suffix of the lock file
lockFileSuffix = ".lock"
annotationImageName = "io.containerd.image.name"
)
type StoreIndex struct {
@ -23,6 +27,19 @@ type StoreIndex struct {
layoutPath string
}
type NameOrTag struct {
isTag bool
value string
}
func Name(name string) NameOrTag {
return NameOrTag{value: name}
}
func Tag(tag string) NameOrTag {
return NameOrTag{isTag: true, value: tag}
}
func NewStoreIndex(storePath string) StoreIndex {
indexPath := path.Join(storePath, ocispecs.ImageIndexFile)
layoutPath := path.Join(storePath, ocispecs.ImageLayoutFile)
@ -61,7 +78,7 @@ func (s StoreIndex) Read() (*ocispecs.Index, error) {
return &idx, nil
}
func (s StoreIndex) Put(tag string, desc ocispecs.Descriptor) error {
func (s StoreIndex) Put(desc ocispecs.Descriptor, names ...NameOrTag) error {
// lock the store to prevent concurrent access
lock := flock.New(s.lockPath)
locked, err := lock.TryLock()
@ -107,8 +124,19 @@ func (s StoreIndex) Put(tag string, desc ocispecs.Descriptor) error {
}
setOCIIndexDefaults(&idx)
if err = insertDesc(&idx, desc, tag); err != nil {
return err
namesp := make([]*NameOrTag, 0, len(names))
for _, n := range names {
namesp = append(namesp, &n)
}
if len(names) == 0 {
namesp = append(namesp, nil)
}
for _, name := range namesp {
if err = insertDesc(&idx, desc, name); err != nil {
return err
}
}
idxData, err = json.Marshal(idx)
@ -130,6 +158,12 @@ func (s StoreIndex) Get(tag string) (*ocispecs.Descriptor, error) {
return nil, err
}
for _, m := range idx.Manifests {
if t, ok := m.Annotations[annotationImageName]; ok && t == tag {
return &m, nil
}
}
for _, m := range idx.Manifests {
if t, ok := m.Annotations[ocispecs.AnnotationRefName]; ok && t == tag {
return &m, nil
@ -165,20 +199,34 @@ func setOCIIndexDefaults(index *ocispecs.Index) {
// insertDesc puts desc to index with tag.
// Existing manifests with the same tag will be removed from the index.
func insertDesc(index *ocispecs.Index, desc ocispecs.Descriptor, tag string) error {
func insertDesc(index *ocispecs.Index, in ocispecs.Descriptor, name *NameOrTag) error {
if index == nil {
return nil
}
if tag != "" {
// make a copy to not modify the input descriptor
desc := in
desc.Annotations = maps.Clone(in.Annotations)
if name != nil {
if desc.Annotations == nil {
desc.Annotations = make(map[string]string)
}
desc.Annotations[ocispecs.AnnotationRefName] = tag
// remove existing manifests with the same tag
imgName, refName := name.value, name.value
if name.isTag {
imgName = ""
} else {
refName = ociReferenceName(imgName)
}
if imgName != "" {
desc.Annotations[annotationImageName] = imgName
}
desc.Annotations[ocispecs.AnnotationRefName] = refName
// remove existing manifests with the same tag/name
var manifests []ocispecs.Descriptor
for _, m := range index.Manifests {
if m.Annotations[ocispecs.AnnotationRefName] != tag {
if m.Annotations[ocispecs.AnnotationRefName] != refName || m.Annotations[annotationImageName] != imgName {
manifests = append(manifests, m)
}
}
@ -187,3 +235,20 @@ func insertDesc(index *ocispecs.Index, desc ocispecs.Descriptor, tag string) err
index.Manifests = append(index.Manifests, desc)
return nil
}
// ociReferenceName takes the loosely defined reference name same way as
// containerd tar exporter does.
func ociReferenceName(name string) string {
// OCI defines the reference name as only a tag excluding the
// repository. The containerd annotation contains the full image name
// since the tag is insufficient for correctly naming and referring to an
// image
var ociRef string
if spec, err := reference.Parse(name); err == nil {
ociRef = spec.Object
} else {
ociRef = name
}
return ociRef
}

View File

@ -10,8 +10,8 @@ import (
"strings"
"time"
"github.com/containerd/containerd/content"
contentlocal "github.com/containerd/containerd/content/local"
"github.com/containerd/containerd/v2/core/content"
contentlocal "github.com/containerd/containerd/v2/plugins/content/local"
controlapi "github.com/moby/buildkit/api/services/control"
"github.com/moby/buildkit/client/llb"
"github.com/moby/buildkit/client/ociindex"
@ -345,7 +345,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG
}
for storePath, tag := range cacheOpt.storesToUpdate {
idx := ociindex.NewStoreIndex(storePath)
if err := idx.Put(tag, manifestDesc); err != nil {
if err := idx.Put(manifestDesc, ociindex.Tag(tag)); err != nil {
return nil, err
}
}
@ -360,12 +360,16 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG
return nil, err
}
for _, storePath := range storesToUpdate {
tag := "latest"
names := []ociindex.NameOrTag{ociindex.Tag("latest")}
if t, ok := res.ExporterResponse["image.name"]; ok {
tag = t
inp := strings.Split(t, ",")
names = make([]ociindex.NameOrTag, len(inp))
for i, n := range inp {
names[i] = ociindex.Name(n)
}
}
idx := ociindex.NewStoreIndex(storePath)
if err := idx.Put(tag, manifestDesc); err != nil {
if err := idx.Put(manifestDesc, names...); err != nil {
return nil, err
}
}

View File

@ -49,7 +49,7 @@ func (k AnnotationKey) PlatformString() string {
if k.Platform == nil {
return ""
}
return platforms.Format(*k.Platform)
return platforms.FormatAll(*k.Platform)
}
func AnnotationIndexKey(key string) string {

View File

@ -44,6 +44,9 @@ var (
// Value: bool <true|false>
OptKeyOCITypes ImageExporterOptKey = "oci-mediatypes"
// Use OCI artifact format for the attestation manifest.
OptKeyOCIArtifact ImageExporterOptKey = "oci-artifact"
// Force attestation to be attached.
// Value: bool <true|false>
OptKeyForceInlineAttestations ImageExporterOptKey = "attestation-inline"

View File

@ -53,7 +53,7 @@ func ParsePlatforms(meta map[string][]byte) (Platforms, error) {
}
}
p = platforms.Normalize(p)
pk := platforms.Format(p)
pk := platforms.FormatAll(p)
ps := Platforms{
Platforms: []Platform{{ID: pk, Platform: p}},
}

View File

@ -112,10 +112,15 @@ func (d *DirectiveParser) ParseAll(data []byte) ([]*Directive, error) {
// This allows for a flexible range of input formats, and appropriate syntax
// selection.
func DetectSyntax(dt []byte) (string, string, []Range, bool) {
return ParseDirective(keySyntax, dt)
return parseDirective(keySyntax, dt, true)
}
func ParseDirective(key string, dt []byte) (string, string, []Range, bool) {
return parseDirective(key, dt, false)
}
func parseDirective(key string, dt []byte, anyFormat bool) (string, string, []Range, bool) {
dt = discardBOM(dt)
dt, hadShebang, err := discardShebang(dt)
if err != nil {
return "", "", nil, false
@ -131,6 +136,10 @@ func ParseDirective(key string, dt []byte) (string, string, []Range, bool) {
return syntax, cmdline, loc, true
}
if !anyFormat {
return "", "", nil, false
}
// use directive with different comment prefix, and search for //key=
directiveParser = DirectiveParser{line: line}
directiveParser.setComment("//")
@ -171,3 +180,7 @@ func discardShebang(dt []byte) ([]byte, bool, error) {
}
return dt, false, nil
}
func discardBOM(dt []byte) []byte {
return bytes.TrimPrefix(dt, []byte{0xEF, 0xBB, 0xBF})
}

View File

@ -291,7 +291,7 @@ func Parse(rwc io.Reader) (*Result, error) {
bytesRead := scanner.Bytes()
if currentLine == 0 {
// First line, strip the byte-order-marker if present
bytesRead = bytes.TrimPrefix(bytesRead, utf8bom)
bytesRead = discardBOM(bytesRead)
}
if isComment(bytesRead) {
comment := strings.TrimSpace(string(bytesRead[1:]))
@ -522,8 +522,6 @@ func isEmptyContinuationLine(line []byte) bool {
return len(trimLeadingWhitespace(trimNewline(line))) == 0
}
var utf8bom = []byte{0xEF, 0xBB, 0xBF}
func trimContinuationCharacter(line []byte, d *directives) ([]byte, bool) {
if d.lineContinuationRegex.Match(line) {
line = d.lineContinuationRegex.ReplaceAll(line, []byte("$1"))

View File

@ -70,7 +70,7 @@ func (bc *Client) Build(ctx context.Context, fn BuildFunc) (*ResultBuilder, erro
}
p = platforms.Normalize(p)
k := platforms.Format(p)
k := platforms.FormatAll(p)
if bc.MultiPlatformRequested {
res.AddRef(k, ref)

View File

@ -463,7 +463,7 @@ func (bc *Client) NamedContext(ctx context.Context, name string, opt ContextOpt)
if opt.Platform != nil {
pp = *opt.Platform
}
pname := name + "::" + platforms.Format(platforms.Normalize(pp))
pname := name + "::" + platforms.FormatAll(platforms.Normalize(pp))
st, img, err := bc.namedContext(ctx, name, pname, opt)
if err != nil || st != nil {
return st, img, err

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/frontend/gateway/pb/gateway.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/session/auth/auth.proto

View File

@ -15,8 +15,8 @@ import (
"sync"
"time"
authutil "github.com/containerd/containerd/remotes/docker/auth"
remoteserrors "github.com/containerd/containerd/remotes/errors"
authutil "github.com/containerd/containerd/v2/core/remotes/docker/auth"
remoteserrors "github.com/containerd/containerd/v2/core/remotes/errors"
"github.com/docker/cli/cli/config"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/cli/config/types"
@ -130,19 +130,19 @@ func (ap *authProvider) FetchToken(ctx context.Context, req *auth.FetchTokenRequ
if err != nil {
return nil, err
}
return toTokenResponse(resp.Token, resp.IssuedAt, resp.ExpiresIn), nil
return toTokenResponse(resp.Token, resp.IssuedAt, resp.ExpiresInSeconds), nil
}
}
return nil, err
}
return toTokenResponse(resp.AccessToken, resp.IssuedAt, resp.ExpiresIn), nil
return toTokenResponse(resp.AccessToken, resp.IssuedAt, resp.ExpiresInSeconds), nil
}
// do request anonymously
resp, err := authutil.FetchToken(ctx, httpClient, nil, to)
if err != nil {
return nil, errors.Wrap(err, "failed to fetch anonymous token")
}
return toTokenResponse(resp.Token, resp.IssuedAt, resp.ExpiresIn), nil
return toTokenResponse(resp.Token, resp.IssuedAt, resp.ExpiresInSeconds), nil
}
func (ap *authProvider) tlsConfig(host string) (*tls.Config, error) {

View File

@ -4,8 +4,8 @@ import (
"context"
api "github.com/containerd/containerd/api/services/content/v1"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/services/content/contentserver"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/plugins/services/content/contentserver"
cerrdefs "github.com/containerd/errdefs"
"github.com/moby/buildkit/session"
digest "github.com/opencontainers/go-digest"

View File

@ -4,8 +4,8 @@ import (
"context"
api "github.com/containerd/containerd/api/services/content/v1"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/content/proxy"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/content/proxy"
"github.com/moby/buildkit/session"
digest "github.com/opencontainers/go-digest"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/session/filesync/filesync.proto

View File

@ -7,7 +7,7 @@ import (
"sync/atomic"
"time"
"github.com/containerd/containerd/defaults"
"github.com/containerd/containerd/v2/defaults"
"github.com/moby/buildkit/util/bklog"
"github.com/moby/buildkit/util/grpcerrors"
"github.com/moby/buildkit/util/tracing"

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/session/secrets/secrets.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/session/sshforward/ssh.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/session/upload/upload.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/solver/errdefs/errdefs.proto

View File

@ -68,6 +68,7 @@ const (
CapFileRmNoFollowSymlink apicaps.CapID = "file.rm.nofollowsymlink"
CapFileCopyAlwaysReplaceExistingDestPaths apicaps.CapID = "file.copy.alwaysreplaceexistingdestpaths"
CapFileCopyModeStringFormat apicaps.CapID = "file.copy.modestring"
CapFileSymlinkCreate apicaps.CapID = "file.symlink.create"
CapConstraints apicaps.CapID = "constraints"
CapPlatform apicaps.CapID = "platform"
@ -402,6 +403,12 @@ func init() {
Status: apicaps.CapStatusExperimental,
})
Caps.Init(apicaps.Cap{
ID: CapFileSymlinkCreate,
Enabled: true,
Status: apicaps.CapStatusExperimental,
})
Caps.Init(apicaps.Cap{
ID: CapConstraints,
Enabled: true,

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/solver/pb/ops.proto
@ -2303,6 +2303,7 @@ type FileAction struct {
// *FileAction_Mkfile
// *FileAction_Mkdir
// *FileAction_Rm
// *FileAction_Symlink
Action isFileAction_Action `protobuf_oneof:"action"`
}
@ -2392,6 +2393,13 @@ func (x *FileAction) GetRm() *FileActionRm {
return nil
}
func (x *FileAction) GetSymlink() *FileActionSymlink {
if x, ok := x.GetAction().(*FileAction_Symlink); ok {
return x.Symlink
}
return nil
}
type isFileAction_Action interface {
isFileAction_Action()
}
@ -2416,6 +2424,11 @@ type FileAction_Rm struct {
Rm *FileActionRm `protobuf:"bytes,7,opt,name=rm,proto3,oneof"`
}
type FileAction_Symlink struct {
// FileActionSymlink creates a symlink
Symlink *FileActionSymlink `protobuf:"bytes,8,opt,name=symlink,proto3,oneof"`
}
func (*FileAction_Copy) isFileAction_Action() {}
func (*FileAction_Mkfile) isFileAction_Action() {}
@ -2424,6 +2437,8 @@ func (*FileAction_Mkdir) isFileAction_Action() {}
func (*FileAction_Rm) isFileAction_Action() {}
func (*FileAction_Symlink) isFileAction_Action() {}
type FileActionCopy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -2678,6 +2693,79 @@ func (x *FileActionMkFile) GetTimestamp() int64 {
return 0
}
type FileActionSymlink struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// destination path for the new file representing the link
Oldpath string `protobuf:"bytes,1,opt,name=oldpath,proto3" json:"oldpath,omitempty"`
// source path for the link
Newpath string `protobuf:"bytes,2,opt,name=newpath,proto3" json:"newpath,omitempty"`
// optional owner for the new file
Owner *ChownOpt `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
// optional created time override
Timestamp int64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}
func (x *FileActionSymlink) Reset() {
*x = FileActionSymlink{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *FileActionSymlink) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FileActionSymlink) ProtoMessage() {}
func (x *FileActionSymlink) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[32]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FileActionSymlink.ProtoReflect.Descriptor instead.
func (*FileActionSymlink) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{32}
}
func (x *FileActionSymlink) GetOldpath() string {
if x != nil {
return x.Oldpath
}
return ""
}
func (x *FileActionSymlink) GetNewpath() string {
if x != nil {
return x.Newpath
}
return ""
}
func (x *FileActionSymlink) GetOwner() *ChownOpt {
if x != nil {
return x.Owner
}
return nil
}
func (x *FileActionSymlink) GetTimestamp() int64 {
if x != nil {
return x.Timestamp
}
return 0
}
type FileActionMkDir struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -2697,7 +2785,7 @@ type FileActionMkDir struct {
func (x *FileActionMkDir) Reset() {
*x = FileActionMkDir{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[32]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[33]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -2709,7 +2797,7 @@ func (x *FileActionMkDir) String() string {
func (*FileActionMkDir) ProtoMessage() {}
func (x *FileActionMkDir) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[32]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[33]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -2722,7 +2810,7 @@ func (x *FileActionMkDir) ProtoReflect() protoreflect.Message {
// Deprecated: Use FileActionMkDir.ProtoReflect.Descriptor instead.
func (*FileActionMkDir) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{32}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{33}
}
func (x *FileActionMkDir) GetPath() string {
@ -2775,7 +2863,7 @@ type FileActionRm struct {
func (x *FileActionRm) Reset() {
*x = FileActionRm{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[33]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[34]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -2787,7 +2875,7 @@ func (x *FileActionRm) String() string {
func (*FileActionRm) ProtoMessage() {}
func (x *FileActionRm) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[33]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[34]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -2800,7 +2888,7 @@ func (x *FileActionRm) ProtoReflect() protoreflect.Message {
// Deprecated: Use FileActionRm.ProtoReflect.Descriptor instead.
func (*FileActionRm) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{33}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{34}
}
func (x *FileActionRm) GetPath() string {
@ -2835,7 +2923,7 @@ type ChownOpt struct {
func (x *ChownOpt) Reset() {
*x = ChownOpt{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[34]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -2847,7 +2935,7 @@ func (x *ChownOpt) String() string {
func (*ChownOpt) ProtoMessage() {}
func (x *ChownOpt) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[34]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[35]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -2860,7 +2948,7 @@ func (x *ChownOpt) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChownOpt.ProtoReflect.Descriptor instead.
func (*ChownOpt) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{34}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{35}
}
func (x *ChownOpt) GetUser() *UserOpt {
@ -2893,7 +2981,7 @@ type UserOpt struct {
func (x *UserOpt) Reset() {
*x = UserOpt{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[35]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -2905,7 +2993,7 @@ func (x *UserOpt) String() string {
func (*UserOpt) ProtoMessage() {}
func (x *UserOpt) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[35]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[36]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -2918,7 +3006,7 @@ func (x *UserOpt) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserOpt.ProtoReflect.Descriptor instead.
func (*UserOpt) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{35}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{36}
}
func (m *UserOpt) GetUser() isUserOpt_User {
@ -2969,7 +3057,7 @@ type NamedUserOpt struct {
func (x *NamedUserOpt) Reset() {
*x = NamedUserOpt{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[36]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -2981,7 +3069,7 @@ func (x *NamedUserOpt) String() string {
func (*NamedUserOpt) ProtoMessage() {}
func (x *NamedUserOpt) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[36]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[37]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -2994,7 +3082,7 @@ func (x *NamedUserOpt) ProtoReflect() protoreflect.Message {
// Deprecated: Use NamedUserOpt.ProtoReflect.Descriptor instead.
func (*NamedUserOpt) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{36}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{37}
}
func (x *NamedUserOpt) GetName() string {
@ -3021,7 +3109,7 @@ type MergeInput struct {
func (x *MergeInput) Reset() {
*x = MergeInput{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[37]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[38]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -3033,7 +3121,7 @@ func (x *MergeInput) String() string {
func (*MergeInput) ProtoMessage() {}
func (x *MergeInput) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[37]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[38]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -3046,7 +3134,7 @@ func (x *MergeInput) ProtoReflect() protoreflect.Message {
// Deprecated: Use MergeInput.ProtoReflect.Descriptor instead.
func (*MergeInput) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{37}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{38}
}
func (x *MergeInput) GetInput() int64 {
@ -3066,7 +3154,7 @@ type MergeOp struct {
func (x *MergeOp) Reset() {
*x = MergeOp{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[38]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -3078,7 +3166,7 @@ func (x *MergeOp) String() string {
func (*MergeOp) ProtoMessage() {}
func (x *MergeOp) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[38]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[39]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -3091,7 +3179,7 @@ func (x *MergeOp) ProtoReflect() protoreflect.Message {
// Deprecated: Use MergeOp.ProtoReflect.Descriptor instead.
func (*MergeOp) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{38}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{39}
}
func (x *MergeOp) GetInputs() []*MergeInput {
@ -3111,7 +3199,7 @@ type LowerDiffInput struct {
func (x *LowerDiffInput) Reset() {
*x = LowerDiffInput{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[39]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -3123,7 +3211,7 @@ func (x *LowerDiffInput) String() string {
func (*LowerDiffInput) ProtoMessage() {}
func (x *LowerDiffInput) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[39]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[40]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -3136,7 +3224,7 @@ func (x *LowerDiffInput) ProtoReflect() protoreflect.Message {
// Deprecated: Use LowerDiffInput.ProtoReflect.Descriptor instead.
func (*LowerDiffInput) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{39}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{40}
}
func (x *LowerDiffInput) GetInput() int64 {
@ -3156,7 +3244,7 @@ type UpperDiffInput struct {
func (x *UpperDiffInput) Reset() {
*x = UpperDiffInput{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[40]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -3168,7 +3256,7 @@ func (x *UpperDiffInput) String() string {
func (*UpperDiffInput) ProtoMessage() {}
func (x *UpperDiffInput) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[40]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[41]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -3181,7 +3269,7 @@ func (x *UpperDiffInput) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpperDiffInput.ProtoReflect.Descriptor instead.
func (*UpperDiffInput) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{40}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{41}
}
func (x *UpperDiffInput) GetInput() int64 {
@ -3202,7 +3290,7 @@ type DiffOp struct {
func (x *DiffOp) Reset() {
*x = DiffOp{}
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[41]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -3214,7 +3302,7 @@ func (x *DiffOp) String() string {
func (*DiffOp) ProtoMessage() {}
func (x *DiffOp) ProtoReflect() protoreflect.Message {
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[41]
mi := &file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[42]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -3227,7 +3315,7 @@ func (x *DiffOp) ProtoReflect() protoreflect.Message {
// Deprecated: Use DiffOp.ProtoReflect.Descriptor instead.
func (*DiffOp) Descriptor() ([]byte, []int) {
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{41}
return file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP(), []int{42}
}
func (x *DiffOp) GetLower() *LowerDiffInput {
@ -3509,7 +3597,7 @@ var file_github_com_moby_buildkit_solver_pb_ops_proto_rawDesc = []byte{
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x32, 0x0a, 0x06, 0x46, 0x69, 0x6c,
0x65, 0x4f, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x97, 0x02,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xca, 0x02,
0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05,
0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70,
0x75, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x49,
@ -3526,121 +3614,133 @@ var file_github_com_moby_buildkit_solver_pb_ops_proto_rawDesc = []byte{
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6b, 0x44, 0x69, 0x72,
0x48, 0x00, 0x52, 0x05, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x22, 0x0a, 0x02, 0x72, 0x6d, 0x18,
0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6d, 0x48, 0x00, 0x52, 0x02, 0x72, 0x6d, 0x42, 0x08, 0x0a,
0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x04, 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x65,
0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72,
0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x12, 0x0a, 0x04,
0x64, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74,
0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f,
0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x6f, 0x6c, 0x6c,
0x6f, 0x77, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x28,
0x0a, 0x0f, 0x64, 0x69, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x69, 0x72, 0x43, 0x6f, 0x70, 0x79,
0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x20, 0x61, 0x74, 0x74, 0x65,
0x6d, 0x70, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43,
0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01,
0x28, 0x08, 0x52, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63,
0x6b, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65,
0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x72,
0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d,
0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20,
0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61,
0x72, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12,
0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61,
0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74,
0x65, 0x72, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c,
0x75, 0x64, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x65,
0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18,
0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61,
0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73,
0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44,
0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e,
0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x78, 0x69,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x18,
0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x6d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x10, 0x46, 0x69, 0x6c,
0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a,
0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e,
0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68,
0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a,
0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x9d, 0x01, 0x0a, 0x0f,
0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6b, 0x44, 0x69, 0x72, 0x12,
0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70,
0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x6b, 0x65, 0x50,
0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x61,
0x6b, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e,
0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68,
0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a,
0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x6e, 0x0a, 0x0c, 0x46,
0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x70,
0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64,
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x74,
0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69,
0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c,
0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x22, 0x4e, 0x0a, 0x08, 0x43,
0x68, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4f,
0x70, 0x74, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75,
0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65,
0x72, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x53, 0x0a, 0x07, 0x55,
0x73, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x62, 0x79, 0x4e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x61, 0x6d, 0x65,
0x64, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x62, 0x79, 0x4e, 0x61,
0x6d, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x62, 0x79, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x48, 0x00, 0x52, 0x04, 0x62, 0x79, 0x49, 0x44, 0x42, 0x06, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72,
0x22, 0x38, 0x0a, 0x0c, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x70, 0x74,
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x22, 0x0a, 0x0a, 0x4d, 0x65,
0x72, 0x67, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x31,
0x0a, 0x07, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x69, 0x6e, 0x70,
0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d,
0x65, 0x72, 0x67, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74,
0x73, 0x22, 0x26, 0x0a, 0x0e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e,
0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x26, 0x0a, 0x0e, 0x55, 0x70, 0x70,
0x65, 0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69,
0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75,
0x74, 0x22, 0x5c, 0x0a, 0x06, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x6c,
0x6f, 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e,
0x4c, 0x6f, 0x77, 0x65, 0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05,
0x6c, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x05, 0x75, 0x70, 0x70, 0x65, 0x72, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x44,
0x69, 0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x75, 0x70, 0x70, 0x65, 0x72, 0x2a,
0x28, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e,
0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12,
0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x29, 0x0a, 0x0c, 0x53, 0x65, 0x63,
0x75, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x4e,
0x44, 0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x53, 0x45, 0x43, 0x55,
0x52, 0x45, 0x10, 0x01, 0x2a, 0x40, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70,
0x65, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x49, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53,
0x45, 0x43, 0x52, 0x45, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x53, 0x48, 0x10, 0x02,
0x12, 0x09, 0x0a, 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54,
0x4d, 0x50, 0x46, 0x53, 0x10, 0x04, 0x2a, 0x31, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x43,
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44,
0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4e, 0x10, 0x01,
0x12, 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0f, 0x43, 0x61, 0x63,
0x68, 0x65, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x0a, 0x0a, 0x06,
0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56,
0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10,
0x02, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
0x6d, 0x6f, 0x62, 0x79, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x6b, 0x69, 0x74, 0x2f, 0x73, 0x6f,
0x6c, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6d, 0x48, 0x00, 0x52, 0x02, 0x72, 0x6d, 0x12, 0x31, 0x0a,
0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x79,
0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b,
0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x04, 0x0a, 0x0e, 0x46,
0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x73, 0x72, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12,
0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64,
0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74,
0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x66,
0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e,
0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x69, 0x72, 0x43,
0x6f, 0x70, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x20, 0x61,
0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x44, 0x6f, 0x63, 0x6b,
0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18,
0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x55, 0x6e,
0x70, 0x61, 0x63, 0x6b, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74,
0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74,
0x65, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12,
0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64,
0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c,
0x64, 0x63, 0x61, 0x72, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28,
0x08, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x57, 0x69, 0x6c,
0x64, 0x63, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70,
0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69,
0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x29,
0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72,
0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x61, 0x6c, 0x77,
0x61, 0x79, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x67, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28,
0x08, 0x52, 0x1e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68,
0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x10,
0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6b, 0x46, 0x69, 0x6c, 0x65,
0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x05,
0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62,
0x2e, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72,
0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20,
0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x89,
0x01, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x79, 0x6d,
0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x12, 0x18,
0x0a, 0x07, 0x6e, 0x65, 0x77, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x6e, 0x65, 0x77, 0x70, 0x61, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65,
0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x6f,
0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09,
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x9d, 0x01, 0x0a, 0x0f, 0x46,
0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6b, 0x44, 0x69, 0x72, 0x12, 0x12,
0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x6b, 0x65, 0x50, 0x61,
0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x61, 0x6b,
0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65,
0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x6f,
0x77, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09,
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x6e, 0x0a, 0x0c, 0x46, 0x69,
0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61,
0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24,
0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x46,
0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x69, 0x6c,
0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c,
0x6f, 0x77, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x22, 0x4e, 0x0a, 0x08, 0x43, 0x68,
0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x70,
0x74, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72,
0x4f, 0x70, 0x74, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x53, 0x0a, 0x07, 0x55, 0x73,
0x65, 0x72, 0x4f, 0x70, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x62, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64,
0x55, 0x73, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x62, 0x79, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x14, 0x0a, 0x04, 0x62, 0x79, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48,
0x00, 0x52, 0x04, 0x62, 0x79, 0x49, 0x44, 0x42, 0x06, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22,
0x38, 0x0a, 0x0c, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01,
0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x22, 0x0a, 0x0a, 0x4d, 0x65, 0x72,
0x67, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x31, 0x0a,
0x07, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75,
0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65,
0x72, 0x67, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73,
0x22, 0x26, 0x0a, 0x0e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e, 0x70,
0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x26, 0x0a, 0x0e, 0x55, 0x70, 0x70, 0x65,
0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e,
0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74,
0x22, 0x5c, 0x0a, 0x06, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x6c, 0x6f,
0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x4c,
0x6f, 0x77, 0x65, 0x72, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x6c,
0x6f, 0x77, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x05, 0x75, 0x70, 0x70, 0x65, 0x72, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x44, 0x69,
0x66, 0x66, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x75, 0x70, 0x70, 0x65, 0x72, 0x2a, 0x28,
0x0a, 0x07, 0x4e, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53,
0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x08,
0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x29, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75,
0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x4e, 0x44,
0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52,
0x45, 0x10, 0x01, 0x2a, 0x40, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
0x12, 0x08, 0x0a, 0x04, 0x42, 0x49, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45,
0x43, 0x52, 0x45, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x53, 0x48, 0x10, 0x02, 0x12,
0x09, 0x0a, 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x4d,
0x50, 0x46, 0x53, 0x10, 0x04, 0x2a, 0x31, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,
0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4e, 0x10, 0x01, 0x12,
0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0f, 0x43, 0x61, 0x63, 0x68,
0x65, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x0a, 0x0a, 0x06, 0x53,
0x48, 0x41, 0x52, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41,
0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x02,
0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d,
0x6f, 0x62, 0x79, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x6b, 0x69, 0x74, 0x2f, 0x73, 0x6f, 0x6c,
0x76, 0x65, 0x72, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -3656,7 +3756,7 @@ func file_github_com_moby_buildkit_solver_pb_ops_proto_rawDescGZIP() []byte {
}
var file_github_com_moby_buildkit_solver_pb_ops_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes = make([]protoimpl.MessageInfo, 49)
var file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes = make([]protoimpl.MessageInfo, 50)
var file_github_com_moby_buildkit_solver_pb_ops_proto_goTypes = []any{
(NetMode)(0), // 0: pb.NetMode
(SecurityMode)(0), // 1: pb.SecurityMode
@ -3695,23 +3795,24 @@ var file_github_com_moby_buildkit_solver_pb_ops_proto_goTypes = []any{
(*FileAction)(nil), // 34: pb.FileAction
(*FileActionCopy)(nil), // 35: pb.FileActionCopy
(*FileActionMkFile)(nil), // 36: pb.FileActionMkFile
(*FileActionMkDir)(nil), // 37: pb.FileActionMkDir
(*FileActionRm)(nil), // 38: pb.FileActionRm
(*ChownOpt)(nil), // 39: pb.ChownOpt
(*UserOpt)(nil), // 40: pb.UserOpt
(*NamedUserOpt)(nil), // 41: pb.NamedUserOpt
(*MergeInput)(nil), // 42: pb.MergeInput
(*MergeOp)(nil), // 43: pb.MergeOp
(*LowerDiffInput)(nil), // 44: pb.LowerDiffInput
(*UpperDiffInput)(nil), // 45: pb.UpperDiffInput
(*DiffOp)(nil), // 46: pb.DiffOp
nil, // 47: pb.SourceOp.AttrsEntry
nil, // 48: pb.BuildOp.InputsEntry
nil, // 49: pb.BuildOp.AttrsEntry
nil, // 50: pb.OpMetadata.DescriptionEntry
nil, // 51: pb.OpMetadata.CapsEntry
nil, // 52: pb.Source.LocationsEntry
nil, // 53: pb.Definition.MetadataEntry
(*FileActionSymlink)(nil), // 37: pb.FileActionSymlink
(*FileActionMkDir)(nil), // 38: pb.FileActionMkDir
(*FileActionRm)(nil), // 39: pb.FileActionRm
(*ChownOpt)(nil), // 40: pb.ChownOpt
(*UserOpt)(nil), // 41: pb.UserOpt
(*NamedUserOpt)(nil), // 42: pb.NamedUserOpt
(*MergeInput)(nil), // 43: pb.MergeInput
(*MergeOp)(nil), // 44: pb.MergeOp
(*LowerDiffInput)(nil), // 45: pb.LowerDiffInput
(*UpperDiffInput)(nil), // 46: pb.UpperDiffInput
(*DiffOp)(nil), // 47: pb.DiffOp
nil, // 48: pb.SourceOp.AttrsEntry
nil, // 49: pb.BuildOp.InputsEntry
nil, // 50: pb.BuildOp.AttrsEntry
nil, // 51: pb.OpMetadata.DescriptionEntry
nil, // 52: pb.OpMetadata.CapsEntry
nil, // 53: pb.Source.LocationsEntry
nil, // 54: pb.Definition.MetadataEntry
}
var file_github_com_moby_buildkit_solver_pb_ops_proto_depIdxs = []int32{
7, // 0: pb.Op.inputs:type_name -> pb.Input
@ -3719,8 +3820,8 @@ var file_github_com_moby_buildkit_solver_pb_ops_proto_depIdxs = []int32{
18, // 2: pb.Op.source:type_name -> pb.SourceOp
33, // 3: pb.Op.file:type_name -> pb.FileOp
19, // 4: pb.Op.build:type_name -> pb.BuildOp
43, // 5: pb.Op.merge:type_name -> pb.MergeOp
46, // 6: pb.Op.diff:type_name -> pb.DiffOp
44, // 5: pb.Op.merge:type_name -> pb.MergeOp
47, // 6: pb.Op.diff:type_name -> pb.DiffOp
6, // 7: pb.Op.platform:type_name -> pb.Platform
31, // 8: pb.Op.constraints:type_name -> pb.WorkerConstraints
9, // 9: pb.ExecOp.meta:type_name -> pb.Meta
@ -3738,45 +3839,47 @@ var file_github_com_moby_buildkit_solver_pb_ops_proto_depIdxs = []int32{
17, // 21: pb.Mount.SSHOpt:type_name -> pb.SSHOpt
3, // 22: pb.Mount.contentCache:type_name -> pb.MountContentCache
4, // 23: pb.CacheOpt.sharing:type_name -> pb.CacheSharingOpt
47, // 24: pb.SourceOp.attrs:type_name -> pb.SourceOp.AttrsEntry
48, // 25: pb.BuildOp.inputs:type_name -> pb.BuildOp.InputsEntry
48, // 24: pb.SourceOp.attrs:type_name -> pb.SourceOp.AttrsEntry
49, // 25: pb.BuildOp.inputs:type_name -> pb.BuildOp.InputsEntry
32, // 26: pb.BuildOp.def:type_name -> pb.Definition
49, // 27: pb.BuildOp.attrs:type_name -> pb.BuildOp.AttrsEntry
50, // 28: pb.OpMetadata.description:type_name -> pb.OpMetadata.DescriptionEntry
50, // 27: pb.BuildOp.attrs:type_name -> pb.BuildOp.AttrsEntry
51, // 28: pb.OpMetadata.description:type_name -> pb.OpMetadata.DescriptionEntry
28, // 29: pb.OpMetadata.export_cache:type_name -> pb.ExportCache
51, // 30: pb.OpMetadata.caps:type_name -> pb.OpMetadata.CapsEntry
52, // 30: pb.OpMetadata.caps:type_name -> pb.OpMetadata.CapsEntry
29, // 31: pb.OpMetadata.progress_group:type_name -> pb.ProgressGroup
52, // 32: pb.Source.locations:type_name -> pb.Source.LocationsEntry
53, // 32: pb.Source.locations:type_name -> pb.Source.LocationsEntry
24, // 33: pb.Source.infos:type_name -> pb.SourceInfo
25, // 34: pb.Locations.locations:type_name -> pb.Location
32, // 35: pb.SourceInfo.definition:type_name -> pb.Definition
26, // 36: pb.Location.ranges:type_name -> pb.Range
27, // 37: pb.Range.start:type_name -> pb.Position
27, // 38: pb.Range.end:type_name -> pb.Position
53, // 39: pb.Definition.metadata:type_name -> pb.Definition.MetadataEntry
54, // 39: pb.Definition.metadata:type_name -> pb.Definition.MetadataEntry
22, // 40: pb.Definition.Source:type_name -> pb.Source
34, // 41: pb.FileOp.actions:type_name -> pb.FileAction
35, // 42: pb.FileAction.copy:type_name -> pb.FileActionCopy
36, // 43: pb.FileAction.mkfile:type_name -> pb.FileActionMkFile
37, // 44: pb.FileAction.mkdir:type_name -> pb.FileActionMkDir
38, // 45: pb.FileAction.rm:type_name -> pb.FileActionRm
39, // 46: pb.FileActionCopy.owner:type_name -> pb.ChownOpt
39, // 47: pb.FileActionMkFile.owner:type_name -> pb.ChownOpt
39, // 48: pb.FileActionMkDir.owner:type_name -> pb.ChownOpt
40, // 49: pb.ChownOpt.user:type_name -> pb.UserOpt
40, // 50: pb.ChownOpt.group:type_name -> pb.UserOpt
41, // 51: pb.UserOpt.byName:type_name -> pb.NamedUserOpt
42, // 52: pb.MergeOp.inputs:type_name -> pb.MergeInput
44, // 53: pb.DiffOp.lower:type_name -> pb.LowerDiffInput
45, // 54: pb.DiffOp.upper:type_name -> pb.UpperDiffInput
20, // 55: pb.BuildOp.InputsEntry.value:type_name -> pb.BuildInput
23, // 56: pb.Source.LocationsEntry.value:type_name -> pb.Locations
21, // 57: pb.Definition.MetadataEntry.value:type_name -> pb.OpMetadata
58, // [58:58] is the sub-list for method output_type
58, // [58:58] is the sub-list for method input_type
58, // [58:58] is the sub-list for extension type_name
58, // [58:58] is the sub-list for extension extendee
0, // [0:58] is the sub-list for field type_name
38, // 44: pb.FileAction.mkdir:type_name -> pb.FileActionMkDir
39, // 45: pb.FileAction.rm:type_name -> pb.FileActionRm
37, // 46: pb.FileAction.symlink:type_name -> pb.FileActionSymlink
40, // 47: pb.FileActionCopy.owner:type_name -> pb.ChownOpt
40, // 48: pb.FileActionMkFile.owner:type_name -> pb.ChownOpt
40, // 49: pb.FileActionSymlink.owner:type_name -> pb.ChownOpt
40, // 50: pb.FileActionMkDir.owner:type_name -> pb.ChownOpt
41, // 51: pb.ChownOpt.user:type_name -> pb.UserOpt
41, // 52: pb.ChownOpt.group:type_name -> pb.UserOpt
42, // 53: pb.UserOpt.byName:type_name -> pb.NamedUserOpt
43, // 54: pb.MergeOp.inputs:type_name -> pb.MergeInput
45, // 55: pb.DiffOp.lower:type_name -> pb.LowerDiffInput
46, // 56: pb.DiffOp.upper:type_name -> pb.UpperDiffInput
20, // 57: pb.BuildOp.InputsEntry.value:type_name -> pb.BuildInput
23, // 58: pb.Source.LocationsEntry.value:type_name -> pb.Locations
21, // 59: pb.Definition.MetadataEntry.value:type_name -> pb.OpMetadata
60, // [60:60] is the sub-list for method output_type
60, // [60:60] is the sub-list for method input_type
60, // [60:60] is the sub-list for extension type_name
60, // [60:60] is the sub-list for extension extendee
0, // [0:60] is the sub-list for field type_name
}
func init() { file_github_com_moby_buildkit_solver_pb_ops_proto_init() }
@ -3797,8 +3900,9 @@ func file_github_com_moby_buildkit_solver_pb_ops_proto_init() {
(*FileAction_Mkfile)(nil),
(*FileAction_Mkdir)(nil),
(*FileAction_Rm)(nil),
(*FileAction_Symlink)(nil),
}
file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[35].OneofWrappers = []any{
file_github_com_moby_buildkit_solver_pb_ops_proto_msgTypes[36].OneofWrappers = []any{
(*UserOpt_ByName)(nil),
(*UserOpt_ByID)(nil),
}
@ -3808,7 +3912,7 @@ func file_github_com_moby_buildkit_solver_pb_ops_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_github_com_moby_buildkit_solver_pb_ops_proto_rawDesc,
NumEnums: 5,
NumMessages: 49,
NumMessages: 50,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -309,6 +309,8 @@ message FileAction {
FileActionMkDir mkdir = 6;
// FileActionRm removes a file
FileActionRm rm = 7;
// FileActionSymlink creates a symlink
FileActionSymlink symlink = 8;
}
}
@ -358,6 +360,17 @@ message FileActionMkFile {
int64 timestamp = 5;
}
message FileActionSymlink {
// destination path for the new file representing the link
string oldpath = 1;
// source path for the link
string newpath = 2;
// optional owner for the new file
ChownOpt owner = 3;
// optional created time override
int64 timestamp = 4;
}
message FileActionMkDir {
// path for the new directory
string path = 1;

View File

@ -824,6 +824,15 @@ func (m *FileAction_Rm) CloneVT() isFileAction_Action {
return r
}
func (m *FileAction_Symlink) CloneVT() isFileAction_Action {
if m == nil {
return (*FileAction_Symlink)(nil)
}
r := new(FileAction_Symlink)
r.Symlink = m.Symlink.CloneVT()
return r
}
func (m *FileActionCopy) CloneVT() *FileActionCopy {
if m == nil {
return (*FileActionCopy)(nil)
@ -888,6 +897,26 @@ func (m *FileActionMkFile) CloneMessageVT() proto.Message {
return m.CloneVT()
}
func (m *FileActionSymlink) CloneVT() *FileActionSymlink {
if m == nil {
return (*FileActionSymlink)(nil)
}
r := new(FileActionSymlink)
r.Oldpath = m.Oldpath
r.Newpath = m.Newpath
r.Owner = m.Owner.CloneVT()
r.Timestamp = m.Timestamp
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
}
return r
}
func (m *FileActionSymlink) CloneMessageVT() proto.Message {
return m.CloneVT()
}
func (m *FileActionMkDir) CloneVT() *FileActionMkDir {
if m == nil {
return (*FileActionMkDir)(nil)
@ -2397,6 +2426,31 @@ func (this *FileAction_Rm) EqualVT(thatIface isFileAction_Action) bool {
return true
}
func (this *FileAction_Symlink) EqualVT(thatIface isFileAction_Action) bool {
that, ok := thatIface.(*FileAction_Symlink)
if !ok {
return false
}
if this == that {
return true
}
if this == nil && that != nil || this != nil && that == nil {
return false
}
if p, q := this.Symlink, that.Symlink; p != q {
if p == nil {
p = &FileActionSymlink{}
}
if q == nil {
q = &FileActionSymlink{}
}
if !p.EqualVT(q) {
return false
}
}
return true
}
func (this *FileActionCopy) EqualVT(that *FileActionCopy) bool {
if this == that {
return true
@ -2501,6 +2555,34 @@ func (this *FileActionMkFile) EqualMessageVT(thatMsg proto.Message) bool {
}
return this.EqualVT(that)
}
func (this *FileActionSymlink) EqualVT(that *FileActionSymlink) bool {
if this == that {
return true
} else if this == nil || that == nil {
return false
}
if this.Oldpath != that.Oldpath {
return false
}
if this.Newpath != that.Newpath {
return false
}
if !this.Owner.EqualVT(that.Owner) {
return false
}
if this.Timestamp != that.Timestamp {
return false
}
return string(this.unknownFields) == string(that.unknownFields)
}
func (this *FileActionSymlink) EqualMessageVT(thatMsg proto.Message) bool {
that, ok := thatMsg.(*FileActionSymlink)
if !ok {
return false
}
return this.EqualVT(that)
}
func (this *FileActionMkDir) EqualVT(that *FileActionMkDir) bool {
if this == that {
return true
@ -4922,6 +5004,29 @@ func (m *FileAction_Rm) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
}
return len(dAtA) - i, nil
}
func (m *FileAction_Symlink) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *FileAction_Symlink) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i := len(dAtA)
if m.Symlink != nil {
size, err := m.Symlink.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
dAtA[i] = 0x42
} else {
i = protohelpers.EncodeVarint(dAtA, i, 0)
i--
dAtA[i] = 0x42
}
return len(dAtA) - i, nil
}
func (m *FileActionCopy) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@ -5151,6 +5256,68 @@ func (m *FileActionMkFile) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *FileActionSymlink) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *FileActionSymlink) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *FileActionSymlink) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
i := len(dAtA)
_ = i
var l int
_ = l
if m.unknownFields != nil {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
if m.Timestamp != 0 {
i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Timestamp))
i--
dAtA[i] = 0x20
}
if m.Owner != nil {
size, err := m.Owner.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
dAtA[i] = 0x1a
}
if len(m.Newpath) > 0 {
i -= len(m.Newpath)
copy(dAtA[i:], m.Newpath)
i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Newpath)))
i--
dAtA[i] = 0x12
}
if len(m.Oldpath) > 0 {
i -= len(m.Oldpath)
copy(dAtA[i:], m.Oldpath)
i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Oldpath)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *FileActionMkDir) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@ -6559,6 +6726,20 @@ func (m *FileAction_Rm) SizeVT() (n int) {
}
return n
}
func (m *FileAction_Symlink) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Symlink != nil {
l = m.Symlink.SizeVT()
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
} else {
n += 3
}
return n
}
func (m *FileActionCopy) SizeVT() (n int) {
if m == nil {
return 0
@ -6652,6 +6833,31 @@ func (m *FileActionMkFile) SizeVT() (n int) {
return n
}
func (m *FileActionSymlink) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Oldpath)
if l > 0 {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
l = len(m.Newpath)
if l > 0 {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
if m.Owner != nil {
l = m.Owner.SizeVT()
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
if m.Timestamp != 0 {
n += 1 + protohelpers.SizeOfVarint(uint64(m.Timestamp))
}
n += len(m.unknownFields)
return n
}
func (m *FileActionMkDir) SizeVT() (n int) {
if m == nil {
return 0
@ -12355,6 +12561,47 @@ func (m *FileAction) UnmarshalVT(dAtA []byte) error {
m.Action = &FileAction_Rm{Rm: v}
}
iNdEx = postIndex
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Symlink", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return protohelpers.ErrInvalidLength
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if oneof, ok := m.Action.(*FileAction_Symlink); ok {
if err := oneof.Symlink.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
} else {
v := &FileActionSymlink{}
if err := v.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.Action = &FileAction_Symlink{Symlink: v}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@ -12993,6 +13240,176 @@ func (m *FileActionMkFile) UnmarshalVT(dAtA []byte) error {
}
return nil
}
func (m *FileActionSymlink) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: FileActionSymlink: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: FileActionSymlink: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Oldpath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Oldpath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Newpath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Newpath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return protohelpers.ErrInvalidLength
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Owner == nil {
m.Owner = &ChownOpt{}
}
if err := m.Owner.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
}
m.Timestamp = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Timestamp |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return protohelpers.ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *FileActionMkDir) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/sourcepolicy/pb/policy.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/util/apicaps/pb/caps.proto

View File

@ -8,7 +8,7 @@ import (
"sync"
"time"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/v2/core/content"
cerrdefs "github.com/containerd/errdefs"
digest "github.com/opencontainers/go-digest"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"

View File

@ -6,8 +6,8 @@ import (
"strings"
"sync"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/images"
"github.com/moby/buildkit/util/resolver/limited"
"github.com/moby/buildkit/util/resolver/retryhandler"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"

View File

@ -4,8 +4,8 @@ import (
"context"
"io"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/remotes"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)

View File

@ -4,7 +4,7 @@ import (
"context"
"sync"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/v2/core/content"
cerrdefs "github.com/containerd/errdefs"
"github.com/moby/buildkit/session"
digest "github.com/opencontainers/go-digest"

View File

@ -6,8 +6,8 @@ import (
"sync"
"time"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/remotes"
cerrdefs "github.com/containerd/errdefs"
digest "github.com/opencontainers/go-digest"
"github.com/pkg/errors"

View File

@ -5,9 +5,9 @@ import (
"net/http"
"sync"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/remotes/docker"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/remotes"
"github.com/containerd/containerd/v2/core/remotes/docker"
cerrdefs "github.com/containerd/errdefs"
"github.com/moby/buildkit/version"
"github.com/moby/locker"

View File

@ -4,8 +4,8 @@ import (
"net/url"
"strings"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/reference"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/pkg/reference"
)
func HasSource(info content.Info, refspec reference.Spec) (bool, error) {

View File

@ -3,7 +3,7 @@ package contentutil
import (
"context"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/v2/core/content"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)

View File

@ -3,7 +3,7 @@ package contentutil
import (
"context"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/v2/core/remotes"
intoto "github.com/in-toto/in-toto-golang/in_toto"
)

View File

@ -0,0 +1,22 @@
//go:build freebsd
package disk
import (
"syscall"
"github.com/pkg/errors"
)
func GetDiskStat(root string) (DiskStat, error) {
var st syscall.Statfs_t
if err := syscall.Statfs(root, &st); err != nil {
return DiskStat{}, errors.Wrapf(err, "could not stat fs at %s", root)
}
return DiskStat{
Total: int64(st.Bsize) * int64(st.Blocks),
Free: int64(st.Bsize) * int64(st.Bfree),
Available: int64(st.Bsize) * int64(st.Bavail),
}, nil
}

View File

@ -0,0 +1,21 @@
//go:build netbsd
package disk
import (
"github.com/pkg/errors"
"golang.org/x/sys/unix"
)
func GetDiskStat(root string) (DiskStat, error) {
var st unix.Statvfs_t
if err := unix.Statvfs(root, &st); err != nil {
return DiskStat{}, errors.Wrapf(err, "could not stat fs at %s", root)
}
return DiskStat{
Total: int64(st.Frsize) * int64(st.Blocks),
Free: int64(st.Frsize) * int64(st.Bfree),
Available: int64(st.Frsize) * int64(st.Bavail),
}, nil
}

View File

@ -1,4 +1,4 @@
//go:build !windows && !openbsd
//go:build !windows && !freebsd && !netbsd && !openbsd
package disk

View File

@ -7,12 +7,12 @@ import (
"sync"
"time"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/leases"
"github.com/containerd/containerd/reference"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/remotes/docker"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/containerd/v2/core/leases"
"github.com/containerd/containerd/v2/core/remotes"
"github.com/containerd/containerd/v2/core/remotes/docker"
"github.com/containerd/containerd/v2/pkg/reference"
"github.com/containerd/platforms"
intoto "github.com/in-toto/in-toto-golang/in_toto"
srctypes "github.com/moby/buildkit/source/types"

View File

@ -7,7 +7,7 @@ import (
"strings"
"time"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/v2/core/remotes"
dockerspec "github.com/moby/docker-image-spec/specs-go/v1"
digest "github.com/opencontainers/go-digest"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"

View File

@ -5,8 +5,8 @@ import (
"sync"
"time"
"github.com/containerd/containerd/leases"
"github.com/containerd/containerd/namespaces"
"github.com/containerd/containerd/v2/core/leases"
"github.com/containerd/containerd/v2/pkg/namespaces"
"github.com/pkg/errors"
)

View File

@ -7,9 +7,9 @@ import (
"strings"
"sync"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/containerd/v2/core/remotes"
"github.com/distribution/reference"
"github.com/moby/buildkit/util/bklog"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"

View File

@ -8,8 +8,8 @@ import (
"syscall"
"time"
"github.com/containerd/containerd/images"
remoteserrors "github.com/containerd/containerd/remotes/errors"
"github.com/containerd/containerd/v2/core/images"
remoteserrors "github.com/containerd/containerd/v2/core/remotes/errors"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.35.1
// protoc-gen-go v1.35.2
// protoc v3.11.4
// source: github.com/moby/buildkit/util/stack/stack.proto

View File

@ -16,7 +16,7 @@ const DefaultPathEnvUnix = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/s
// DefaultPathEnvWindows is windows style list of directories to search for
// executables. Each directory is separated from the next by a colon
// ';' character .
const DefaultPathEnvWindows = "c:\\Windows\\System32;c:\\Windows"
const DefaultPathEnvWindows = "c:\\Windows\\System32;c:\\Windows;C:\\Windows\\System32\\WindowsPowerShell\\v1.0"
func DefaultPathEnv(os string) string {
if os == "windows" {

View File

@ -4,8 +4,8 @@ import (
"context"
"encoding/json"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/platforms"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"

View File

@ -5,9 +5,9 @@ import (
"encoding/json"
"os"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/content/local"
"github.com/containerd/containerd/images/archive"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/images/archive"
"github.com/containerd/containerd/v2/plugins/content/local"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
)

View File

@ -17,8 +17,8 @@ import (
"testing"
"time"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/remotes/docker"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/remotes/docker"
"github.com/gofrs/flock"
"github.com/moby/buildkit/util/appcontext"
"github.com/moby/buildkit/util/contentutil"
@ -39,6 +39,7 @@ type Backend interface {
Address() string
DockerAddress() string
ContainerdAddress() string
DebugAddress() string
Rootless() bool
NetNSDetached() bool
@ -200,7 +201,7 @@ func Run(t *testing.T, testCases []Test, opt ...TestOpt) {
ctx, cancel := context.WithCancelCause(ctx)
defer func() { cancel(errors.WithStack(context.Canceled)) }()
sb, closer, err := newSandbox(ctx, br, getMirror(), mv)
sb, closer, err := newSandbox(ctx, t, br, getMirror(), mv)
require.NoError(t, err)
t.Cleanup(func() { _ = closer() })
defer func() {

View File

@ -5,11 +5,15 @@ import (
"bytes"
"context"
"fmt"
"io"
"net"
"net/http"
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
"time"
"github.com/google/shlex"
"github.com/moby/buildkit/util/bklog"
@ -18,6 +22,8 @@ import (
const buildkitdConfigFile = "buildkitd.toml"
const maxSandboxTimeout = 5 * time.Minute
type sandbox struct {
Backend
@ -79,7 +85,7 @@ func (sb *sandbox) Value(k string) interface{} {
return sb.mv.values[k].value
}
func newSandbox(ctx context.Context, w Worker, mirror string, mv matrixValue) (s Sandbox, cl func() error, err error) {
func newSandbox(ctx context.Context, t *testing.T, w Worker, mirror string, mv matrixValue) (s Sandbox, cl func() error, err error) {
cfg := &BackendConfig{
Logs: make(map[string]*bytes.Buffer),
}
@ -110,6 +116,28 @@ func newSandbox(ctx context.Context, w Worker, mirror string, mv matrixValue) (s
}
deferF.Append(closer)
ctx, cancel := context.WithCancelCause(ctx)
go func() {
timeout := maxSandboxTimeout
if strings.Contains(t.Name(), "ExtraTimeout") {
timeout *= 3
}
timeoutContext, cancelTimeout := context.WithTimeoutCause(ctx, timeout, errors.WithStack(context.DeadlineExceeded))
defer cancelTimeout()
<-timeoutContext.Done()
select {
case <-ctx.Done():
return
default:
t.Logf("sandbox timeout reached, stopping worker")
if addr := b.DebugAddress(); addr != "" {
printBuildkitdDebugLogs(t, addr)
}
cancel(errors.WithStack(context.Canceled))
}
}()
return &sandbox{
Backend: b,
logs: cfg.Logs,
@ -120,6 +148,30 @@ func newSandbox(ctx context.Context, w Worker, mirror string, mv matrixValue) (s
}, cl, nil
}
func printBuildkitdDebugLogs(t *testing.T, addr string) {
if !strings.HasPrefix(addr, socketScheme) {
t.Logf("invalid debug address %q", addr)
return
}
client := &http.Client{Transport: &http.Transport{DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return dialPipe(strings.TrimPrefix(addr, socketScheme))
}}}
resp, err := client.Get("http://localhost/debug/pprof/goroutine?debug=2") //nolint:noctx // never cancel
if err != nil {
t.Fatalf("failed to get debug logs: %v", err)
return
}
defer resp.Body.Close()
dt, err := io.ReadAll(resp.Body)
if err != nil {
t.Fatalf("failed to read debug logs: %v", err)
return
}
t.Logf("buildkitd debug logs:\n%s", dt)
}
func RootlessSupported(uid int) bool {
cmd := exec.Command("sudo", "-u", fmt.Sprintf("#%d", uid), "-i", "--", "exec", "unshare", "-U", "true") //nolint:gosec // test utility
b, err := cmd.CombinedOutput()

View File

@ -9,6 +9,7 @@ type backend struct {
address string
dockerAddress string
containerdAddress string
debugAddress string
rootless bool
netnsDetached bool
snapshotter string
@ -29,6 +30,10 @@ func (b backend) ContainerdAddress() string {
return b.containerdAddress
}
func (b backend) DebugAddress() string {
return b.debugAddress
}
func (b backend) Rootless() bool {
return b.rootless
}

View File

@ -232,7 +232,7 @@ disabled_plugins = ["io.containerd.grpc.v1.cri"]
"nsenter", "-U", "--preserve-credentials", "-m", "-t", fmt.Sprintf("%d", pid)},
append(buildkitdArgs, "--containerd-worker-snapshotter=native")...)
}
buildkitdSock, stop, err := runBuildkitd(cfg, buildkitdArgs, cfg.Logs, c.UID, c.GID, c.ExtraEnv)
buildkitdSock, debugSock, stop, err := runBuildkitd(cfg, buildkitdArgs, cfg.Logs, c.UID, c.GID, c.ExtraEnv)
if err != nil {
integration.PrintLogs(cfg.Logs, log.Println)
return nil, nil, err
@ -242,6 +242,7 @@ disabled_plugins = ["io.containerd.grpc.v1.cri"]
return backend{
address: buildkitdSock,
containerdAddress: address,
debugAddress: debugSock,
rootless: rootless,
netnsDetached: false,
snapshotter: c.Snapshotter,

View File

@ -77,7 +77,7 @@ func (s *OCI) New(ctx context.Context, cfg *integration.BackendConfig) (integrat
if runtime.GOOS != "windows" && s.Snapshotter != "native" {
extraEnv = append(extraEnv, "BUILDKIT_DEBUG_FORCE_OVERLAY_DIFF=true")
}
buildkitdSock, stop, err := runBuildkitd(cfg, buildkitdArgs, cfg.Logs, s.UID, s.GID, extraEnv)
buildkitdSock, debugSock, stop, err := runBuildkitd(cfg, buildkitdArgs, cfg.Logs, s.UID, s.GID, extraEnv)
if err != nil {
integration.PrintLogs(cfg.Logs, log.Println)
return nil, nil, err
@ -85,6 +85,7 @@ func (s *OCI) New(ctx context.Context, cfg *integration.BackendConfig) (integrat
return backend{
address: buildkitdSock,
debugAddress: debugSock,
rootless: s.UID != 0,
netnsDetached: s.NetNSDetached(),
snapshotter: s.Snapshotter,

View File

@ -31,7 +31,7 @@ func runBuildkitd(
logs map[string]*bytes.Buffer,
uid, gid int,
extraEnv []string,
) (address string, cl func() error, err error) {
) (_, _ string, cl func() error, err error) {
deferF := &integration.MultiCloser{}
cl = deferF.F()
@ -44,35 +44,36 @@ func runBuildkitd(
tmpdir, err := os.MkdirTemp("", "bktest_buildkitd")
if err != nil {
return "", nil, err
return "", "", nil, err
}
if err := chown(tmpdir, uid, gid); err != nil {
return "", nil, err
return "", "", nil, err
}
if err := os.MkdirAll(filepath.Join(tmpdir, "tmp"), 0711); err != nil {
return "", nil, err
return "", "", nil, err
}
if err := chown(filepath.Join(tmpdir, "tmp"), uid, gid); err != nil {
return "", nil, err
return "", "", nil, err
}
deferF.Append(func() error { return os.RemoveAll(tmpdir) })
cfgfile, err := integration.WriteConfig(
append(conf.DaemonConfig, withOTELSocketPath(getTraceSocketPath(tmpdir))))
if err != nil {
return "", nil, err
return "", "", nil, err
}
deferF.Append(func() error {
return os.RemoveAll(filepath.Dir(cfgfile))
})
args = append(args, "--config="+cfgfile)
address = getBuildkitdAddr(tmpdir)
address := getBuildkitdAddr(tmpdir)
debugAddress := getBuildkitdDebugAddr(tmpdir)
args = append(args, "--root", tmpdir, "--addr", address, "--debug")
args = append(args, "--root", tmpdir, "--addr", address, "--debugaddr", debugAddress, "--debug")
cmd := exec.Command(args[0], args[1:]...) //nolint:gosec // test utility
cmd.Env = append(
os.Environ(),
@ -88,12 +89,12 @@ func runBuildkitd(
stop, err := integration.StartCmd(cmd, logs)
if err != nil {
return "", nil, err
return "", "", nil, err
}
deferF.Append(stop)
if err := integration.WaitSocket(address, 15*time.Second, cmd); err != nil {
return "", nil, err
return "", "", nil, err
}
// separated out since it's not required in windows
@ -101,5 +102,5 @@ func runBuildkitd(
return mountInfo(tmpdir)
})
return address, cl, err
return address, debugAddress, cl, err
}

View File

@ -34,6 +34,10 @@ func getBuildkitdAddr(tmpdir string) string {
return "unix://" + filepath.Join(tmpdir, "buildkitd.sock")
}
func getBuildkitdDebugAddr(tmpdir string) string {
return "unix://" + filepath.Join(tmpdir, "buildkitd-debug.sock")
}
func getTraceSocketPath(tmpdir string) string {
return filepath.Join(tmpdir, "otel-grpc.sock")
}

View File

@ -22,6 +22,10 @@ func getBuildkitdAddr(tmpdir string) string {
return "npipe:////./pipe/buildkitd-" + filepath.Base(tmpdir)
}
func getBuildkitdDebugAddr(tmpdir string) string {
return "npipe:////./pipe/buildkitd-debug-" + filepath.Base(tmpdir)
}
func getTraceSocketPath(tmpdir string) string {
return `\\.\pipe\buildkit-otel-grpc-` + filepath.Base(tmpdir)
}