mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
vendor: update buildkit to v0.16.0-rc1
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
89
vendor/github.com/moby/buildkit/frontend/dockerfile/linter/linter.go
generated
vendored
89
vendor/github.com/moby/buildkit/frontend/dockerfile/linter/linter.go
generated
vendored
@ -10,42 +10,61 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Warn LintWarnFunc
|
||||
SkipRules []string
|
||||
SkipAll bool
|
||||
ReturnAsError bool
|
||||
ExperimentalAll bool
|
||||
ExperimentalRules []string
|
||||
ReturnAsError bool
|
||||
SkipAll bool
|
||||
SkipRules []string
|
||||
Warn LintWarnFunc
|
||||
}
|
||||
|
||||
type Linter struct {
|
||||
SkippedRules map[string]struct{}
|
||||
CalledRules []string
|
||||
SkipAll bool
|
||||
ReturnAsError bool
|
||||
Warn LintWarnFunc
|
||||
CalledRules []string
|
||||
ExperimentalAll bool
|
||||
ExperimentalRules map[string]struct{}
|
||||
ReturnAsError bool
|
||||
SkipAll bool
|
||||
SkippedRules map[string]struct{}
|
||||
Warn LintWarnFunc
|
||||
}
|
||||
|
||||
func New(config *Config) *Linter {
|
||||
toret := &Linter{
|
||||
SkippedRules: map[string]struct{}{},
|
||||
CalledRules: []string{},
|
||||
Warn: config.Warn,
|
||||
SkippedRules: map[string]struct{}{},
|
||||
ExperimentalRules: map[string]struct{}{},
|
||||
CalledRules: []string{},
|
||||
Warn: config.Warn,
|
||||
}
|
||||
toret.SkipAll = config.SkipAll
|
||||
toret.ExperimentalAll = config.ExperimentalAll
|
||||
toret.ReturnAsError = config.ReturnAsError
|
||||
for _, rule := range config.SkipRules {
|
||||
toret.SkippedRules[rule] = struct{}{}
|
||||
}
|
||||
for _, rule := range config.ExperimentalRules {
|
||||
toret.ExperimentalRules[rule] = struct{}{}
|
||||
}
|
||||
return toret
|
||||
}
|
||||
|
||||
func (lc *Linter) Run(rule LinterRuleI, location []parser.Range, txt ...string) {
|
||||
if lc == nil || lc.Warn == nil || lc.SkipAll || rule.IsDeprecated() {
|
||||
if lc == nil || lc.Warn == nil || rule.IsDeprecated() {
|
||||
return
|
||||
}
|
||||
|
||||
rulename := rule.RuleName()
|
||||
if _, ok := lc.SkippedRules[rulename]; ok {
|
||||
return
|
||||
if rule.IsExperimental() {
|
||||
_, experimentalOk := lc.ExperimentalRules[rulename]
|
||||
if !(lc.ExperimentalAll || experimentalOk) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
_, skipOk := lc.SkippedRules[rulename]
|
||||
if lc.SkipAll || skipOk {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
lc.CalledRules = append(lc.CalledRules, rulename)
|
||||
rule.Run(lc.Warn, location, txt...)
|
||||
}
|
||||
@ -72,14 +91,16 @@ type LinterRuleI interface {
|
||||
RuleName() string
|
||||
Run(warn LintWarnFunc, location []parser.Range, txt ...string)
|
||||
IsDeprecated() bool
|
||||
IsExperimental() bool
|
||||
}
|
||||
|
||||
type LinterRule[F any] struct {
|
||||
Name string
|
||||
Description string
|
||||
Deprecated bool
|
||||
URL string
|
||||
Format F
|
||||
Name string
|
||||
Description string
|
||||
Deprecated bool
|
||||
Experimental bool
|
||||
URL string
|
||||
Format F
|
||||
}
|
||||
|
||||
func (rule *LinterRule[F]) RuleName() string {
|
||||
@ -98,6 +119,10 @@ func (rule *LinterRule[F]) IsDeprecated() bool {
|
||||
return rule.Deprecated
|
||||
}
|
||||
|
||||
func (rule *LinterRule[F]) IsExperimental() bool {
|
||||
return rule.Experimental
|
||||
}
|
||||
|
||||
func LintFormatShort(rulename, msg string, line int) string {
|
||||
msg = fmt.Sprintf("%s: %s", rulename, msg)
|
||||
if line > 0 {
|
||||
@ -114,9 +139,9 @@ func ParseLintOptions(checkStr string) (*Config, error) {
|
||||
return &Config{}, nil
|
||||
}
|
||||
|
||||
parts := strings.SplitN(checkStr, ";", 2)
|
||||
var skipSet []string
|
||||
var errorOnWarn, skipAll bool
|
||||
parts := strings.SplitN(checkStr, ";", 3)
|
||||
var skipSet, experimentalSet []string
|
||||
var errorOnWarn, skipAll, experimentalAll bool
|
||||
for _, p := range parts {
|
||||
k, v, ok := strings.Cut(p, "=")
|
||||
if !ok {
|
||||
@ -134,6 +159,16 @@ func ParseLintOptions(checkStr string) (*Config, error) {
|
||||
skipSet[i] = strings.TrimSpace(rule)
|
||||
}
|
||||
}
|
||||
case "experimental":
|
||||
v = strings.TrimSpace(v)
|
||||
if v == "all" {
|
||||
experimentalAll = true
|
||||
} else {
|
||||
experimentalSet = strings.Split(v, ",")
|
||||
for i, rule := range experimentalSet {
|
||||
experimentalSet[i] = strings.TrimSpace(rule)
|
||||
}
|
||||
}
|
||||
case "error":
|
||||
v, err := strconv.ParseBool(strings.TrimSpace(v))
|
||||
if err != nil {
|
||||
@ -145,8 +180,10 @@ func ParseLintOptions(checkStr string) (*Config, error) {
|
||||
}
|
||||
}
|
||||
return &Config{
|
||||
SkipRules: skipSet,
|
||||
SkipAll: skipAll,
|
||||
ReturnAsError: errorOnWarn,
|
||||
ExperimentalAll: experimentalAll,
|
||||
ExperimentalRules: experimentalSet,
|
||||
SkipRules: skipSet,
|
||||
SkipAll: skipAll,
|
||||
ReturnAsError: errorOnWarn,
|
||||
}, nil
|
||||
}
|
||||
|
1
vendor/github.com/moby/buildkit/frontend/dockerfile/linter/ruleset.go
generated
vendored
1
vendor/github.com/moby/buildkit/frontend/dockerfile/linter/ruleset.go
generated
vendored
@ -163,5 +163,6 @@ var (
|
||||
Format: func(cmd, file string) string {
|
||||
return fmt.Sprintf("Attempting to %s file %q that is excluded by .dockerignore", cmd, file)
|
||||
},
|
||||
Experimental: true,
|
||||
}
|
||||
)
|
||||
|
3
vendor/github.com/moby/buildkit/frontend/dockerfile/shell/lex.go
generated
vendored
3
vendor/github.com/moby/buildkit/frontend/dockerfile/shell/lex.go
generated
vendored
@ -378,6 +378,9 @@ func (sw *shellWord) processDollar() (string, error) {
|
||||
fallthrough
|
||||
case '+', '-', '?', '#', '%':
|
||||
rawEscapes := ch == '#' || ch == '%'
|
||||
if nullIsUnset && rawEscapes {
|
||||
return "", errors.Errorf("unsupported modifier (%s) in substitution", chs)
|
||||
}
|
||||
word, _, err := sw.processStopOn('}', rawEscapes)
|
||||
if err != nil {
|
||||
if sw.scanner.Peek() == scanner.EOF {
|
||||
|
50
vendor/github.com/moby/buildkit/frontend/dockerui/config.go
generated
vendored
50
vendor/github.com/moby/buildkit/frontend/dockerui/config.go
generated
vendored
@ -46,30 +46,28 @@ const (
|
||||
|
||||
// Don't forget to update frontend documentation if you add
|
||||
// a new build-arg: frontend/dockerfile/docs/reference.md
|
||||
keyCacheNSArg = "build-arg:BUILDKIT_CACHE_MOUNT_NS"
|
||||
keyMultiPlatformArg = "build-arg:BUILDKIT_MULTI_PLATFORM"
|
||||
keyHostnameArg = "build-arg:BUILDKIT_SANDBOX_HOSTNAME"
|
||||
keyDockerfileLintArg = "build-arg:BUILDKIT_DOCKERFILE_CHECK"
|
||||
keyContextKeepGitDirArg = "build-arg:BUILDKIT_CONTEXT_KEEP_GIT_DIR"
|
||||
keySourceDateEpoch = "build-arg:SOURCE_DATE_EPOCH"
|
||||
keyCopyIgnoredCheckEnabled = "build-arg:BUILDKIT_DOCKERFILE_CHECK_COPYIGNORED_EXPERIMENT"
|
||||
keyCacheNSArg = "build-arg:BUILDKIT_CACHE_MOUNT_NS"
|
||||
keyMultiPlatformArg = "build-arg:BUILDKIT_MULTI_PLATFORM"
|
||||
keyHostnameArg = "build-arg:BUILDKIT_SANDBOX_HOSTNAME"
|
||||
keyDockerfileLintArg = "build-arg:BUILDKIT_DOCKERFILE_CHECK"
|
||||
keyContextKeepGitDirArg = "build-arg:BUILDKIT_CONTEXT_KEEP_GIT_DIR"
|
||||
keySourceDateEpoch = "build-arg:SOURCE_DATE_EPOCH"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
BuildArgs map[string]string
|
||||
CacheIDNamespace string
|
||||
CgroupParent string
|
||||
Epoch *time.Time
|
||||
ExtraHosts []llb.HostIP
|
||||
Hostname string
|
||||
ImageResolveMode llb.ResolveMode
|
||||
Labels map[string]string
|
||||
NetworkMode pb.NetMode
|
||||
ShmSize int64
|
||||
Target string
|
||||
Ulimits []pb.Ulimit
|
||||
LinterConfig *linter.Config
|
||||
CopyIgnoredCheckEnabled bool
|
||||
BuildArgs map[string]string
|
||||
CacheIDNamespace string
|
||||
CgroupParent string
|
||||
Epoch *time.Time
|
||||
ExtraHosts []llb.HostIP
|
||||
Hostname string
|
||||
ImageResolveMode llb.ResolveMode
|
||||
Labels map[string]string
|
||||
NetworkMode pb.NetMode
|
||||
ShmSize int64
|
||||
Target string
|
||||
Ulimits []pb.Ulimit
|
||||
LinterConfig *linter.Config
|
||||
|
||||
CacheImports []client.CacheOptionsEntry
|
||||
TargetPlatforms []ocispecs.Platform // nil means default
|
||||
@ -291,16 +289,6 @@ func (bc *Client) init() error {
|
||||
}
|
||||
}
|
||||
|
||||
// CopyIgnoredCheckEnabled is an experimental feature to check if COPY is ignored by .dockerignore,
|
||||
// and it is disabled by default. It is expected that this feature will be enabled by default in a future
|
||||
// release, and this build-arg will be removed.
|
||||
if v, ok := opts[keyCopyIgnoredCheckEnabled]; ok {
|
||||
bc.CopyIgnoredCheckEnabled, err = strconv.ParseBool(v)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to parse %s", keyCopyIgnoredCheckEnabled)
|
||||
}
|
||||
}
|
||||
|
||||
bc.localsSessionIDs = parseLocalSessionIDs(opts)
|
||||
|
||||
return nil
|
||||
|
2
vendor/github.com/moby/buildkit/frontend/dockerui/requests.go
generated
vendored
2
vendor/github.com/moby/buildkit/frontend/dockerui/requests.go
generated
vendored
@ -66,7 +66,7 @@ func (bc *Client) HandleSubrequest(ctx context.Context, h RequestHandler) (*clie
|
||||
if warnings == nil {
|
||||
return nil, true, nil
|
||||
}
|
||||
res, err := warnings.ToResult()
|
||||
res, err := warnings.ToResult(nil)
|
||||
return res, true, err
|
||||
}
|
||||
}
|
||||
|
107
vendor/github.com/moby/buildkit/frontend/subrequests/lint/lint.go
generated
vendored
107
vendor/github.com/moby/buildkit/frontend/subrequests/lint/lint.go
generated
vendored
@ -16,6 +16,8 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type SourceInfoMap func(*pb.SourceInfo) *pb.SourceInfo
|
||||
|
||||
const RequestLint = "frontend.lint"
|
||||
|
||||
var SubrequestLintDefinition = subrequests.Request{
|
||||
@ -39,6 +41,27 @@ type Warning struct {
|
||||
Location pb.Location `json:"location,omitempty"`
|
||||
}
|
||||
|
||||
func (w *Warning) PrintTo(wr io.Writer, sources []*pb.SourceInfo, scb SourceInfoMap) error {
|
||||
fmt.Fprintf(wr, "\nWARNING: %s", w.RuleName)
|
||||
if w.URL != "" {
|
||||
fmt.Fprintf(wr, " - %s", w.URL)
|
||||
}
|
||||
fmt.Fprintf(wr, "\n%s\n", w.Detail)
|
||||
|
||||
if w.Location.SourceIndex < 0 {
|
||||
return nil
|
||||
}
|
||||
sourceInfo := sources[w.Location.SourceIndex]
|
||||
if scb != nil {
|
||||
sourceInfo = scb(sourceInfo)
|
||||
}
|
||||
source := errdefs.Source{
|
||||
Info: sourceInfo,
|
||||
Ranges: w.Location.Ranges,
|
||||
}
|
||||
return source.Print(wr)
|
||||
}
|
||||
|
||||
type BuildError struct {
|
||||
Message string `json:"message"`
|
||||
Location pb.Location `json:"location"`
|
||||
@ -93,7 +116,7 @@ func (results *LintResults) AddWarning(rulename, description, url, fmtmsg string
|
||||
})
|
||||
}
|
||||
|
||||
func (results *LintResults) ToResult() (*client.Result, error) {
|
||||
func (results *LintResults) ToResult(scb SourceInfoMap) (*client.Result, error) {
|
||||
res := client.NewResult()
|
||||
dt, err := json.MarshalIndent(results, "", " ")
|
||||
if err != nil {
|
||||
@ -102,7 +125,7 @@ func (results *LintResults) ToResult() (*client.Result, error) {
|
||||
res.AddMeta("result.json", dt)
|
||||
|
||||
b := bytes.NewBuffer(nil)
|
||||
if err := PrintLintViolations(dt, b); err != nil {
|
||||
if err := PrintLintViolations(dt, b, scb); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.AddMeta("result.txt", b.Bytes())
|
||||
@ -117,28 +140,7 @@ func (results *LintResults) ToResult() (*client.Result, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (results *LintResults) validateWarnings() error {
|
||||
for _, warning := range results.Warnings {
|
||||
if int(warning.Location.SourceIndex) >= len(results.Sources) {
|
||||
return errors.Errorf("sourceIndex is out of range")
|
||||
}
|
||||
if warning.Location.SourceIndex > 0 {
|
||||
warningSource := results.Sources[warning.Location.SourceIndex]
|
||||
if warningSource == nil {
|
||||
return errors.Errorf("sourceIndex points to nil source")
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func PrintLintViolations(dt []byte, w io.Writer) error {
|
||||
var results LintResults
|
||||
|
||||
if err := json.Unmarshal(dt, &results); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func (results *LintResults) PrintTo(w io.Writer, scb SourceInfoMap) error {
|
||||
if err := results.validateWarnings(); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -169,21 +171,7 @@ func PrintLintViolations(dt []byte, w io.Writer) error {
|
||||
})
|
||||
|
||||
for _, warning := range results.Warnings {
|
||||
fmt.Fprintf(w, "\nWARNING: %s", warning.RuleName)
|
||||
if warning.URL != "" {
|
||||
fmt.Fprintf(w, " - %s", warning.URL)
|
||||
}
|
||||
fmt.Fprintf(w, "\n%s\n", warning.Detail)
|
||||
|
||||
if warning.Location.SourceIndex < 0 {
|
||||
continue
|
||||
}
|
||||
sourceInfo := results.Sources[warning.Location.SourceIndex]
|
||||
source := errdefs.Source{
|
||||
Info: sourceInfo,
|
||||
Ranges: warning.Location.Ranges,
|
||||
}
|
||||
err := source.Print(w)
|
||||
err := warning.PrintTo(w, results.Sources, scb)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -192,6 +180,47 @@ func PrintLintViolations(dt []byte, w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (results *LintResults) PrintErrorTo(w io.Writer) {
|
||||
// This prints out the error in LintResults to the writer in a format that
|
||||
// is consistent with the warnings for easier downstream consumption.
|
||||
if results.Error == nil {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Fprintln(w, results.Error.Message)
|
||||
sourceInfo := results.Sources[results.Error.Location.SourceIndex]
|
||||
source := errdefs.Source{
|
||||
Info: sourceInfo,
|
||||
Ranges: results.Error.Location.Ranges,
|
||||
}
|
||||
source.Print(w)
|
||||
}
|
||||
|
||||
func (results *LintResults) validateWarnings() error {
|
||||
for _, warning := range results.Warnings {
|
||||
if int(warning.Location.SourceIndex) >= len(results.Sources) {
|
||||
return errors.Errorf("sourceIndex is out of range")
|
||||
}
|
||||
if warning.Location.SourceIndex > 0 {
|
||||
warningSource := results.Sources[warning.Location.SourceIndex]
|
||||
if warningSource == nil {
|
||||
return errors.Errorf("sourceIndex points to nil source")
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func PrintLintViolations(dt []byte, w io.Writer, scb SourceInfoMap) error {
|
||||
var results LintResults
|
||||
|
||||
if err := json.Unmarshal(dt, &results); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return results.PrintTo(w, scb)
|
||||
}
|
||||
|
||||
func sourceInfoEqual(a, b *pb.SourceInfo) bool {
|
||||
if a.Filename != b.Filename || a.Language != b.Language {
|
||||
return false
|
||||
|
Reference in New Issue
Block a user