From a2b4d9c74ffebe1f08cc278d4c3efbb74dbb3e39 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 15 Dec 2020 18:09:01 +0100 Subject: [PATCH] vendor: github.com/moby/buildkit v0.8.1 full diff: https://github.com/moby/buildkit/compare/v0.8.0...v0.8.1 Signed-off-by: Sebastiaan van Stijn --- vendor.conf | 2 +- vendor/github.com/moby/buildkit/README.md | 8 +-- .../moby/buildkit/client/llb/fileop.go | 8 +++ .../moby/buildkit/client/llb/source.go | 8 +-- .../util/flightcontrol/flightcontrol.go | 58 +++++++++++-------- .../util/sshutil/transport_validation.go | 11 ++++ 6 files changed, 61 insertions(+), 34 deletions(-) create mode 100644 vendor/github.com/moby/buildkit/util/sshutil/transport_validation.go diff --git a/vendor.conf b/vendor.conf index 02f0fb2cb7..5eed5c2e96 100755 --- a/vendor.conf +++ b/vendor.conf @@ -48,7 +48,7 @@ github.com/Microsoft/go-winio 5b44b70ab3ab4d291a7c1d28afe7 github.com/Microsoft/hcsshim 5bc557dd210ff2caf615e6e22d398123de77fc11 # v0.8.9 github.com/miekg/pkcs11 210dc1e16747c5ba98a03bcbcf728c38086ea357 # v1.0.3 github.com/mitchellh/mapstructure d16e9488127408e67948eb43b6d3fbb9f222da10 # v1.3.2 -github.com/moby/buildkit 73fe4736135645a342abc7b587bba0994cccf0f9 # v0.8.0 +github.com/moby/buildkit 8142d66b5ebde79846b869fba30d9d30633e74aa # v0.8.1 github.com/moby/sys 1bc8673b57550ddf85262eb0fed0aac651a37dab # symlink/v0.1.0 (latest tag, either mount/vXXX, mountinfo/vXXX or symlink/vXXX) github.com/moby/term bea5bbe245bf407372d477f1361d2ff042d2f556 github.com/modern-go/concurrent bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94 # 1.0.3 diff --git a/vendor/github.com/moby/buildkit/README.md b/vendor/github.com/moby/buildkit/README.md index 4532dd7cde..2ea64c78ba 100644 --- a/vendor/github.com/moby/buildkit/README.md +++ b/vendor/github.com/moby/buildkit/README.md @@ -3,7 +3,7 @@ # BuildKit [![GoDoc](https://godoc.org/github.com/moby/buildkit?status.svg)](https://godoc.org/github.com/moby/buildkit/client/llb) -[![Build Status](https://travis-ci.com/moby/buildkit.svg?branch=master)](https://travis-ci.com/moby/buildkit) +[![Build Status](https://github.com/moby/buildkit/workflows/build/badge.svg)](https://github.com/moby/buildkit/actions?query=workflow%3Abuild) [![Go Report Card](https://goreportcard.com/badge/github.com/moby/buildkit)](https://goreportcard.com/report/github.com/moby/buildkit) [![codecov](https://codecov.io/gh/moby/buildkit/branch/master/graph/badge.svg)](https://codecov.io/gh/moby/buildkit) @@ -28,7 +28,7 @@ Introductory blog post https://blog.mobyproject.org/introducing-buildkit-17e056c Join `#buildkit` channel on [Docker Community Slack](http://dockr.ly/slack) -:information_source: If you are visiting this repo for the usage of experimental Dockerfile features like `RUN --mount=type=(bind|cache|tmpfs|secret|ssh)`, please refer to [`frontend/dockerfile/docs/experimental.md`](frontend/dockerfile/docs/experimental.md). +:information_source: If you are visiting this repo for the usage of BuildKit-only Dockerfile features like `RUN --mount=type=(bind|cache|tmpfs|secret|ssh)`, please refer to [`frontend/dockerfile/docs/syntax.md`](frontend/dockerfile/docs/syntax.md). :information_source: [BuildKit has been integrated to `docker build` since Docker 18.06 .](https://docs.docker.com/develop/develop-images/build_enhancements/) You don't need to read this document unless you want to use the full-featured standalone version of BuildKit. @@ -178,7 +178,7 @@ buildctl build \ #### Building a Dockerfile using external frontend: -External versions of the Dockerfile frontend are pushed to https://hub.docker.com/r/docker/dockerfile-upstream and https://hub.docker.com/r/docker/dockerfile and can be used with the gateway frontend. The source for the external frontend is currently located in `./frontend/dockerfile/cmd/dockerfile-frontend` but will move out of this repository in the future ([#163](https://github.com/moby/buildkit/issues/163)). For automatic build from master branch of this repository `docker/dockerfile-upsteam:master` or `docker/dockerfile-upstream:master-experimental` image can be used. +External versions of the Dockerfile frontend are pushed to https://hub.docker.com/r/docker/dockerfile-upstream and https://hub.docker.com/r/docker/dockerfile and can be used with the gateway frontend. The source for the external frontend is currently located in `./frontend/dockerfile/cmd/dockerfile-frontend` but will move out of this repository in the future ([#163](https://github.com/moby/buildkit/issues/163)). For automatic build from master branch of this repository `docker/dockerfile-upstream:master` or `docker/dockerfile-upstream:master-labs` image can be used. ```bash buildctl build \ @@ -435,7 +435,7 @@ For Kubernetes deployments, see [`examples/kubernetes`](./examples/kubernetes). ### Daemonless -To run client and an ephemeral daemon in a single container ("daemonless mode"): +To run the client and an ephemeral daemon in a single container ("daemonless mode"): ```bash docker run \ diff --git a/vendor/github.com/moby/buildkit/client/llb/fileop.go b/vendor/github.com/moby/buildkit/client/llb/fileop.go index fdcf9929a8..a2342db693 100644 --- a/vendor/github.com/moby/buildkit/client/llb/fileop.go +++ b/vendor/github.com/moby/buildkit/client/llb/fileop.go @@ -661,6 +661,14 @@ func (f *FileOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, [] pfo := &pb.FileOp{} + if f.constraints.Platform == nil { + p, err := getPlatform(*f.action.state)(ctx) + if err != nil { + return "", nil, nil, nil, err + } + f.constraints.Platform = p + } + pop, md := MarshalConstraints(c, &f.constraints) pop.Op = &pb.Op_File{ File: pfo, diff --git a/vendor/github.com/moby/buildkit/client/llb/source.go b/vendor/github.com/moby/buildkit/client/llb/source.go index af48a1d81c..ddd6097ad4 100644 --- a/vendor/github.com/moby/buildkit/client/llb/source.go +++ b/vendor/github.com/moby/buildkit/client/llb/source.go @@ -5,7 +5,6 @@ import ( _ "crypto/sha256" // for opencontainers/go-digest "encoding/json" "os" - "regexp" "strconv" "strings" @@ -207,8 +206,6 @@ const ( gitProtocolUnknown ) -var gitSSHRegex = regexp.MustCompile("^([a-z0-9]+@)?[^:]+:.*$") - func getGitProtocol(remote string) (string, int) { prefixes := map[string]int{ "http://": gitProtocolHTTP, @@ -224,7 +221,7 @@ func getGitProtocol(remote string) (string, int) { } } - if protocolType == gitProtocolUnknown && gitSSHRegex.MatchString(remote) { + if protocolType == gitProtocolUnknown && sshutil.IsSSHTransport(remote) { protocolType = gitProtocolSSH } @@ -254,6 +251,9 @@ func Git(remote, ref string, opts ...GitOption) State { remote = parts[0] + "/" + parts[1] } } + if protocolType == gitProtocolUnknown { + url = "https://" + url + } id := remote diff --git a/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go b/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go index a543364c75..fc9f7272a4 100644 --- a/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go +++ b/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go @@ -130,7 +130,11 @@ func (c *call) wait(ctx context.Context) (v interface{}, err error) { c.mu.Lock() // detect case where caller has just returned, let it clean up before select { - case <-c.ready: // could return if no error + case <-c.ready: + c.mu.Unlock() + <-c.cleaned + return nil, errRetry + case <-c.ctx.done: // could return if no error c.mu.Unlock() <-c.cleaned return nil, errRetry @@ -141,6 +145,10 @@ func (c *call) wait(ctx context.Context) (v interface{}, err error) { if ok { c.progressState.add(pw) } + + ctx, cancel := context.WithCancel(ctx) + defer cancel() + c.ctxs = append(c.ctxs, ctx) c.mu.Unlock() @@ -149,18 +157,16 @@ func (c *call) wait(ctx context.Context) (v interface{}, err error) { select { case <-ctx.Done(): - select { - case <-c.ctx.Done(): + if c.ctx.checkDone() { // if this cancelled the last context, then wait for function to shut down // and don't accept any more callers <-c.ready return c.result, c.err - default: - if ok { - c.progressState.close(pw) - } - return nil, ctx.Err() } + if ok { + c.progressState.close(pw) + } + return nil, ctx.Err() case <-c.ready: return c.result, c.err // shared not implemented yet } @@ -183,9 +189,6 @@ func (c *call) Deadline() (deadline time.Time, ok bool) { } func (c *call) Done() <-chan struct{} { - c.mu.Lock() - c.ctx.signal() - c.mu.Unlock() return c.ctx.done } @@ -238,23 +241,28 @@ func newContext(c *call) *sharedContext { return &sharedContext{call: c, done: make(chan struct{})} } -// call with lock -func (c *sharedContext) signal() { +func (sc *sharedContext) checkDone() bool { + sc.mu.Lock() select { - case <-c.done: + case <-sc.done: + sc.mu.Unlock() + return true default: - var err error - for _, ctx := range c.ctxs { - select { - case <-ctx.Done(): - err = ctx.Err() - default: - return - } - } - c.err = err - close(c.done) } + var err error + for _, ctx := range sc.ctxs { + select { + case <-ctx.Done(): + err = ctx.Err() + default: + sc.mu.Unlock() + return false + } + } + sc.err = err + close(sc.done) + sc.mu.Unlock() + return true } type rawProgressWriter interface { diff --git a/vendor/github.com/moby/buildkit/util/sshutil/transport_validation.go b/vendor/github.com/moby/buildkit/util/sshutil/transport_validation.go new file mode 100644 index 0000000000..f00a1df223 --- /dev/null +++ b/vendor/github.com/moby/buildkit/util/sshutil/transport_validation.go @@ -0,0 +1,11 @@ +package sshutil + +import ( + "regexp" +) + +var gitSSHRegex = regexp.MustCompile("^[a-zA-Z0-9-_]+@[a-zA-Z0-9-.]+:.*$") + +func IsSSHTransport(s string) bool { + return gitSSHRegex.MatchString(s) +}