From 5873b8b0549065fbec29333f2929d45dfc781669 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sun, 17 May 2026 03:53:28 +0000 Subject: [PATCH] Remove dead code from `act/` (#971) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes code that whole-program reachability analysis (`deadcode` from `golang.org/x/tools`) confirmed unreachable, plus the `act/workflowpattern` package which no file outside its own directory imports. - `act/common/draw.go` — CLI box-drawing helpers left over from nektos/act's dropped CLI - `act/common/file.go` — `CopyFile`/`CopyDir` package-level helpers (container types have their own `CopyDir` methods, kept) - `act/common/executor.go` — `Warning` type and `Warningf`. The `case Warning:` arm in `(Executor).Then`'s type switch was dead too (no code ever constructed a `Warning`); the switch is replaced with `if err != nil { return err }` - `act/lookpath/env.go` — `LookPath` no-arg wrapper and `defaultEnv` struct. Only `LookPath2(file, env)` was used externally; the `Env` interface is kept - `act/runner/action_cache_offline_mode.go` — `GoGitActionCacheOfflineMode` wrapper, never instantiated - `act/workflowpattern/` — entire package, never imported Net `-943` lines. --- This PR was written with the help of Claude Opus 4.7 --------- Co-authored-by: Nicolas Reviewed-on: https://gitea.com/gitea/runner/pulls/971 Reviewed-by: Nicolas Co-authored-by: silverwind Co-committed-by: silverwind --- act/common/draw.go | 146 ------- act/common/executor.go | 28 +- act/common/file.go | 77 ---- act/lookpath/env.go | 12 - act/runner/action_cache_offline_mode.go | 45 -- act/workflowpattern/trace_writer.go | 22 - act/workflowpattern/workflow_pattern.go | 199 --------- act/workflowpattern/workflow_pattern_test.go | 418 ------------------- 8 files changed, 2 insertions(+), 945 deletions(-) delete mode 100644 act/common/draw.go delete mode 100644 act/common/file.go delete mode 100644 act/runner/action_cache_offline_mode.go delete mode 100644 act/workflowpattern/trace_writer.go delete mode 100644 act/workflowpattern/workflow_pattern.go delete mode 100644 act/workflowpattern/workflow_pattern_test.go diff --git a/act/common/draw.go b/act/common/draw.go deleted file mode 100644 index 2705c3a5..00000000 --- a/act/common/draw.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2026 The Gitea Authors. All rights reserved. -// Copyright 2020 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package common - -import ( - "fmt" - "io" - "os" - "strings" -) - -// Style is a specific style -type Style int - -// Styles -const ( - StyleDoubleLine = iota - StyleSingleLine - StyleDashedLine - StyleNoLine -) - -// NewPen creates a new pen -func NewPen(style Style, color int) *Pen { - bgcolor := 49 - if os.Getenv("CLICOLOR") == "0" { - color = 0 - bgcolor = 0 - } - return &Pen{ - style: style, - color: color, - bgcolor: bgcolor, - } -} - -type styleDef struct { - cornerTL string - cornerTR string - cornerBL string - cornerBR string - lineH string - lineV string -} - -var styleDefs = []styleDef{ - {"\u2554", "\u2557", "\u255a", "\u255d", "\u2550", "\u2551"}, - {"\u256d", "\u256e", "\u2570", "\u256f", "\u2500", "\u2502"}, - {"\u250c", "\u2510", "\u2514", "\u2518", "\u254c", "\u254e"}, - {" ", " ", " ", " ", " ", " "}, -} - -// Pen struct -type Pen struct { - style Style - color int - bgcolor int -} - -// Drawing struct -type Drawing struct { - buf *strings.Builder - width int -} - -func (p *Pen) drawTopBars(buf io.Writer, labels ...string) { - style := styleDefs[p.style] - for _, label := range labels { - bar := strings.Repeat(style.lineH, len(label)+2) - fmt.Fprintf(buf, " ") - fmt.Fprintf(buf, "\x1b[%d;%dm", p.color, p.bgcolor) - fmt.Fprintf(buf, "%s%s%s", style.cornerTL, bar, style.cornerTR) - fmt.Fprintf(buf, "\x1b[%dm", 0) - } - fmt.Fprintf(buf, "\n") -} - -func (p *Pen) drawBottomBars(buf io.Writer, labels ...string) { - style := styleDefs[p.style] - for _, label := range labels { - bar := strings.Repeat(style.lineH, len(label)+2) - fmt.Fprintf(buf, " ") - fmt.Fprintf(buf, "\x1b[%d;%dm", p.color, p.bgcolor) - fmt.Fprintf(buf, "%s%s%s", style.cornerBL, bar, style.cornerBR) - fmt.Fprintf(buf, "\x1b[%dm", 0) - } - fmt.Fprintf(buf, "\n") -} - -func (p *Pen) drawLabels(buf io.Writer, labels ...string) { - style := styleDefs[p.style] - for _, label := range labels { - fmt.Fprintf(buf, " ") - fmt.Fprintf(buf, "\x1b[%d;%dm", p.color, p.bgcolor) - fmt.Fprintf(buf, "%s %s %s", style.lineV, label, style.lineV) - fmt.Fprintf(buf, "\x1b[%dm", 0) - } - fmt.Fprintf(buf, "\n") -} - -// DrawArrow between boxes -func (p *Pen) DrawArrow() *Drawing { - drawing := &Drawing{ - buf: new(strings.Builder), - width: 1, - } - fmt.Fprintf(drawing.buf, "\x1b[%dm", p.color) - fmt.Fprintf(drawing.buf, "\u2b07") - fmt.Fprintf(drawing.buf, "\x1b[%dm", 0) - return drawing -} - -// DrawBoxes to draw boxes -func (p *Pen) DrawBoxes(labels ...string) *Drawing { - width := 0 - for _, l := range labels { - width += len(l) + 2 + 2 + 1 - } - drawing := &Drawing{ - buf: new(strings.Builder), - width: width, - } - p.drawTopBars(drawing.buf, labels...) - p.drawLabels(drawing.buf, labels...) - p.drawBottomBars(drawing.buf, labels...) - - return drawing -} - -// Draw to writer -func (d *Drawing) Draw(writer io.Writer, centerOnWidth int) { - padSize := max((centerOnWidth-d.GetWidth())/2, 0) - for l := range strings.SplitSeq(d.buf.String(), "\n") { - if len(l) > 0 { - padding := strings.Repeat(" ", padSize) - fmt.Fprintf(writer, "%s%s\n", padding, l) - } - } -} - -// GetWidth of drawing -func (d *Drawing) GetWidth() int { - return d.width -} diff --git a/act/common/executor.go b/act/common/executor.go index 90fed4d1..cc44cde7 100644 --- a/act/common/executor.go +++ b/act/common/executor.go @@ -12,24 +12,6 @@ import ( log "github.com/sirupsen/logrus" ) -// Warning that implements `error` but safe to ignore -type Warning struct { - Message string -} - -// Error the contract for error -func (w Warning) Error() string { - return w.Message -} - -// Warningf create a warning -func Warningf(format string, args ...any) Warning { - w := Warning{ - Message: fmt.Sprintf(format, args...), - } - return w -} - // Executor define contract for the steps of a workflow type Executor func(ctx context.Context) error @@ -162,14 +144,8 @@ func NewParallelExecutor(parallel int, executors ...Executor) Executor { // Then runs another executor if this executor succeeds func (e Executor) Then(then Executor) Executor { return func(ctx context.Context) error { - err := e(ctx) - if err != nil { - switch err.(type) { - case Warning: - Logger(ctx).Warning(err.Error()) - default: - return err - } + if err := e(ctx); err != nil { + return err } if ctx.Err() != nil { return ctx.Err() diff --git a/act/common/file.go b/act/common/file.go deleted file mode 100644 index d3a492d0..00000000 --- a/act/common/file.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2022 The Gitea Authors. All rights reserved. -// Copyright 2020 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package common - -import ( - "fmt" - "io" - "os" -) - -// CopyFile copy file -func CopyFile(source, dest string) (err error) { - sourcefile, err := os.Open(source) - if err != nil { - return err - } - - defer sourcefile.Close() - - destfile, err := os.Create(dest) - if err != nil { - return err - } - - defer destfile.Close() - - _, err = io.Copy(destfile, sourcefile) - if err == nil { - sourceinfo, err := os.Stat(source) - if err != nil { - _ = os.Chmod(dest, sourceinfo.Mode()) - } - } - - return err -} - -// CopyDir recursive copy of directory -func CopyDir(source, dest string) (err error) { - // get properties of source dir - sourceinfo, err := os.Stat(source) - if err != nil { - return err - } - - // create dest dir - - err = os.MkdirAll(dest, sourceinfo.Mode()) - if err != nil { - return err - } - - objects, err := os.ReadDir(source) - - for _, obj := range objects { - sourcefilepointer := source + "/" + obj.Name() - - destinationfilepointer := dest + "/" + obj.Name() - - if obj.IsDir() { - // create sub-directories - recursively - err = CopyDir(sourcefilepointer, destinationfilepointer) - if err != nil { - fmt.Println(err) //nolint:forbidigo // pre-existing issue from nektos/act - } - } else { - // perform copy - err = CopyFile(sourcefilepointer, destinationfilepointer) - if err != nil { - fmt.Println(err) //nolint:forbidigo // pre-existing issue from nektos/act - } - } - } - return err -} diff --git a/act/lookpath/env.go b/act/lookpath/env.go index a78ae056..b492d997 100644 --- a/act/lookpath/env.go +++ b/act/lookpath/env.go @@ -4,18 +4,6 @@ package lookpath -import "os" - type Env interface { Getenv(name string) string } - -type defaultEnv struct{} - -func (*defaultEnv) Getenv(name string) string { - return os.Getenv(name) -} - -func LookPath(file string) (string, error) { - return LookPath2(file, &defaultEnv{}) -} diff --git a/act/runner/action_cache_offline_mode.go b/act/runner/action_cache_offline_mode.go deleted file mode 100644 index 710bd0d5..00000000 --- a/act/runner/action_cache_offline_mode.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2024 The Gitea Authors. All rights reserved. -// Copyright 2024 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package runner - -import ( - "context" - "io" - "path" - - git "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" -) - -type GoGitActionCacheOfflineMode struct { - Parent GoGitActionCache -} - -func (c GoGitActionCacheOfflineMode) Fetch(ctx context.Context, cacheDir, url, ref, token string) (string, error) { - sha, fetchErr := c.Parent.Fetch(ctx, cacheDir, url, ref, token) - gitPath := path.Join(c.Parent.Path, safeFilename(cacheDir)+".git") - gogitrepo, err := git.PlainOpen(gitPath) - if err != nil { - return "", fetchErr - } - refName := plumbing.ReferenceName("refs/action-cache-offline/" + ref) - r, err := gogitrepo.Reference(refName, true) - if fetchErr == nil { - if err != nil || sha != r.Hash().String() { - if err == nil { - refName = r.Name() - } - ref := plumbing.NewHashReference(refName, plumbing.NewHash(sha)) - _ = gogitrepo.Storer.SetReference(ref) - } - } else if err == nil { - return r.Hash().String(), nil - } - return sha, fetchErr -} - -func (c GoGitActionCacheOfflineMode) GetTarArchive(ctx context.Context, cacheDir, sha, includePrefix string) (io.ReadCloser, error) { - return c.Parent.GetTarArchive(ctx, cacheDir, sha, includePrefix) -} diff --git a/act/workflowpattern/trace_writer.go b/act/workflowpattern/trace_writer.go deleted file mode 100644 index 37a4c850..00000000 --- a/act/workflowpattern/trace_writer.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2023 The Gitea Authors. All rights reserved. -// Copyright 2023 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package workflowpattern - -import "fmt" - -type TraceWriter interface { - Info(string, ...any) -} - -type EmptyTraceWriter struct{} - -func (*EmptyTraceWriter) Info(string, ...any) { -} - -type StdOutTraceWriter struct{} - -func (*StdOutTraceWriter) Info(format string, args ...any) { - fmt.Printf(format+"\n", args...) //nolint:forbidigo // pre-existing issue from nektos/act -} diff --git a/act/workflowpattern/workflow_pattern.go b/act/workflowpattern/workflow_pattern.go deleted file mode 100644 index 9f598618..00000000 --- a/act/workflowpattern/workflow_pattern.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2023 The Gitea Authors. All rights reserved. -// Copyright 2023 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package workflowpattern - -import ( - "fmt" - "regexp" - "strings" -) - -type WorkflowPattern struct { - Pattern string - Negative bool - Regex *regexp.Regexp -} - -func CompilePattern(rawpattern string) (*WorkflowPattern, error) { - negative := false - pattern := rawpattern - if strings.HasPrefix(rawpattern, "!") { - negative = true - pattern = rawpattern[1:] - } - rpattern, err := PatternToRegex(pattern) - if err != nil { - return nil, err - } - regex, err := regexp.Compile(rpattern) - if err != nil { - return nil, err - } - return &WorkflowPattern{ - Pattern: pattern, - Negative: negative, - Regex: regex, - }, nil -} - -func PatternToRegex(pattern string) (string, error) { - var rpattern strings.Builder - rpattern.WriteString("^") - pos := 0 - errors := map[int]string{} - for pos < len(pattern) { - switch pattern[pos] { - case '*': - if pos+1 < len(pattern) && pattern[pos+1] == '*' { - if pos+2 < len(pattern) && pattern[pos+2] == '/' { - rpattern.WriteString("(.+/)?") - pos += 3 - } else { - rpattern.WriteString(".*") - pos += 2 - } - } else { - rpattern.WriteString("[^/]*") - pos++ - } - case '+', '?': - if pos > 0 { - rpattern.WriteByte(pattern[pos]) - } else { - rpattern.WriteString(regexp.QuoteMeta(string([]byte{pattern[pos]}))) - } - pos++ - case '[': - rpattern.WriteByte(pattern[pos]) - pos++ - if pos < len(pattern) && pattern[pos] == ']' { - errors[pos] = "Unexpected empty brackets '[]'" - pos++ - break - } - validChar := func(a, b, test byte) bool { - return test >= a && test <= b - } - startPos := pos - for pos < len(pattern) && pattern[pos] != ']' { - switch pattern[pos] { - case '-': - if pos <= startPos || pos+1 >= len(pattern) { - errors[pos] = "Invalid range" - pos++ - break - } - validRange := func(a, b byte) bool { - return validChar(a, b, pattern[pos-1]) && validChar(a, b, pattern[pos+1]) && pattern[pos-1] <= pattern[pos+1] - } - if !validRange('A', 'z') && !validRange('0', '9') { - errors[pos] = "Ranges can only include a-z, A-Z, A-z, and 0-9" - pos++ - break - } - rpattern.WriteString(pattern[pos : pos+2]) - pos += 2 - default: - if !validChar('A', 'z', pattern[pos]) && !validChar('0', '9', pattern[pos]) { - errors[pos] = "Ranges can only include a-z, A-Z and 0-9" - pos++ - break - } - rpattern.WriteString(regexp.QuoteMeta(string([]byte{pattern[pos]}))) - pos++ - } - } - if pos >= len(pattern) || pattern[pos] != ']' { - errors[pos] = "Missing closing bracket ']' after '['" - pos++ - } - rpattern.WriteString("]") - pos++ - case '\\': - if pos+1 >= len(pattern) { - errors[pos] = "Missing symbol after \\" - pos++ - break - } - rpattern.WriteString(regexp.QuoteMeta(string([]byte{pattern[pos+1]}))) - pos += 2 - default: - rpattern.WriteString(regexp.QuoteMeta(string([]byte{pattern[pos]}))) - pos++ - } - } - if len(errors) > 0 { - var errorMessage strings.Builder - for position, err := range errors { - if errorMessage.Len() > 0 { - errorMessage.WriteString(", ") - } - fmt.Fprintf(&errorMessage, "Position: %d Error: %s", position, err) - } - return "", fmt.Errorf("invalid Pattern '%s': %s", pattern, errorMessage.String()) - } - rpattern.WriteString("$") - return rpattern.String(), nil -} - -func CompilePatterns(patterns ...string) ([]*WorkflowPattern, error) { - ret := []*WorkflowPattern{} - for _, pattern := range patterns { - cp, err := CompilePattern(pattern) - if err != nil { - return nil, err - } - ret = append(ret, cp) - } - return ret, nil -} - -// returns true if the workflow should be skipped paths/branches -func Skip(sequence []*WorkflowPattern, input []string, traceWriter TraceWriter) bool { - if len(sequence) == 0 { - return false - } - for _, file := range input { - matched := false - for _, item := range sequence { - if item.Regex.MatchString(file) { - pattern := item.Pattern - if item.Negative { - matched = false - traceWriter.Info("%s excluded by pattern %s", file, pattern) - } else { - matched = true - traceWriter.Info("%s included by pattern %s", file, pattern) - } - } - } - if matched { - return false - } - } - return true -} - -// returns true if the workflow should be skipped paths-ignore/branches-ignore -func Filter(sequence []*WorkflowPattern, input []string, traceWriter TraceWriter) bool { - if len(sequence) == 0 { - return false - } - for _, file := range input { - matched := false - for _, item := range sequence { - if item.Regex.MatchString(file) == !item.Negative { - pattern := item.Pattern - traceWriter.Info("%s ignored by pattern %s", file, pattern) - matched = true - break - } - } - if !matched { - return false - } - } - return true -} diff --git a/act/workflowpattern/workflow_pattern_test.go b/act/workflowpattern/workflow_pattern_test.go deleted file mode 100644 index 980b0838..00000000 --- a/act/workflowpattern/workflow_pattern_test.go +++ /dev/null @@ -1,418 +0,0 @@ -// Copyright 2023 The Gitea Authors. All rights reserved. -// Copyright 2023 The nektos/act Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package workflowpattern - -import ( - "strings" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestMatchPattern(t *testing.T) { - kases := []struct { - inputs []string - patterns []string - skipResult bool - filterResult bool - }{ - { - patterns: []string{"*"}, - inputs: []string{"path/with/slash"}, - skipResult: true, - filterResult: false, - }, - { - patterns: []string{"path/a", "path/b", "path/c"}, - inputs: []string{"meta", "path/b", "otherfile"}, - skipResult: false, - filterResult: false, - }, - { - patterns: []string{"path/a", "path/b", "path/c"}, - inputs: []string{"path/b"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"path/a", "path/b", "path/c"}, - inputs: []string{"path/c", "path/b"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"path/a", "path/b", "path/c"}, - inputs: []string{"path/c", "path/b", "path/a"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"path/a", "path/b", "path/c"}, - inputs: []string{"path/c", "path/b", "path/d", "path/a"}, - skipResult: false, - filterResult: false, - }, - { - patterns: []string{}, - inputs: []string{}, - skipResult: false, - filterResult: false, - }, - { - patterns: []string{"\\!file"}, - inputs: []string{"!file"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"escape\\\\backslash"}, - inputs: []string{"escape\\backslash"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{".yml"}, - inputs: []string{"fyml"}, - skipResult: true, - filterResult: false, - }, - // https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#patterns-to-match-branches-and-tags - { - patterns: []string{"feature/*"}, - inputs: []string{"feature/my-branch"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"feature/*"}, - inputs: []string{"feature/your-branch"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"feature/**"}, - inputs: []string{"feature/beta-a/my-branch"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"feature/**"}, - inputs: []string{"feature/beta-a/my-branch"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"feature/**"}, - inputs: []string{"feature/mona/the/octocat"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"main", "releases/mona-the-octocat"}, - inputs: []string{"main"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"main", "releases/mona-the-octocat"}, - inputs: []string{"releases/mona-the-octocat"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*"}, - inputs: []string{"main"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*"}, - inputs: []string{"releases"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**"}, - inputs: []string{"all/the/branches"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**"}, - inputs: []string{"every/tag"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*feature"}, - inputs: []string{"mona-feature"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*feature"}, - inputs: []string{"feature"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*feature"}, - inputs: []string{"ver-10-feature"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"v2*"}, - inputs: []string{"v2"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"v2*"}, - inputs: []string{"v2.0"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"v2*"}, - inputs: []string{"v2.9"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"v[12].[0-9]+.[0-9]+"}, - inputs: []string{"v1.10.1"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"v[12].[0-9]+.[0-9]+"}, - inputs: []string{"v2.0.0"}, - skipResult: false, - filterResult: true, - }, - // https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#patterns-to-match-file-paths - { - patterns: []string{"*"}, - inputs: []string{"README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*"}, - inputs: []string{"server.rb"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.jsx?"}, - inputs: []string{"page.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.jsx?"}, - inputs: []string{"page.jsx"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**"}, - inputs: []string{"all/the/files.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.js"}, - inputs: []string{"app.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.js"}, - inputs: []string{"index.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**.js"}, - inputs: []string{"index.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**.js"}, - inputs: []string{"js/index.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**.js"}, - inputs: []string{"src/js/app.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/*"}, - inputs: []string{"docs/README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/*"}, - inputs: []string{"docs/file.txt"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/**"}, - inputs: []string{"docs/README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/**"}, - inputs: []string{"docs/mona/octocat.txt"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/**/*.md"}, - inputs: []string{"docs/README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/**/*.md"}, - inputs: []string{"docs/mona/hello-world.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"docs/**/*.md"}, - inputs: []string{"docs/a/markdown/file.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/docs/**"}, - inputs: []string{"docs/hello.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/docs/**"}, - inputs: []string{"dir/docs/my-file.txt"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/docs/**"}, - inputs: []string{"space/docs/plan/space.doc"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/README.md"}, - inputs: []string{"README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/README.md"}, - inputs: []string{"js/README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/*src/**"}, - inputs: []string{"a/src/app.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/*src/**"}, - inputs: []string{"my-src/code/js/app.js"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/*-post.md"}, - inputs: []string{"my-post.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/*-post.md"}, - inputs: []string{"path/their-post.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/migrate-*.sql"}, - inputs: []string{"migrate-10909.sql"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/migrate-*.sql"}, - inputs: []string{"db/migrate-v1.0.sql"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"**/migrate-*.sql"}, - inputs: []string{"db/sept/migrate-v1.sql"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md"}, - inputs: []string{"hello.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md"}, - inputs: []string{"README.md"}, - skipResult: true, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md"}, - inputs: []string{"docs/hello.md"}, - skipResult: true, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md", "README*"}, - inputs: []string{"hello.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md", "README*"}, - inputs: []string{"README.md"}, - skipResult: false, - filterResult: true, - }, - { - patterns: []string{"*.md", "!README.md", "README*"}, - inputs: []string{"README.doc"}, - skipResult: false, - filterResult: true, - }, - } - - for _, kase := range kases { - t.Run(strings.Join(kase.patterns, ","), func(t *testing.T) { - patterns, err := CompilePatterns(kase.patterns...) - assert.NoError(t, err) //nolint:testifylint // pre-existing issue from nektos/act - - assert.EqualValues(t, kase.skipResult, Skip(patterns, kase.inputs, &StdOutTraceWriter{}), "skipResult") //nolint:testifylint // pre-existing issue from nektos/act - assert.EqualValues(t, kase.filterResult, Filter(patterns, kase.inputs, &StdOutTraceWriter{}), "filterResult") //nolint:testifylint // pre-existing issue from nektos/act - }) - } -}