Rename the candidate file validator to forbidden files
This commit is contained in:
@@ -27,8 +27,8 @@ const (
|
||||
MarkdownLinks Check = "markdown-links"
|
||||
// SharedFiles identifies a requested shared file that is unavailable.
|
||||
SharedFiles Check = "shared-files"
|
||||
// UntrackedFiles identifies selected paths present in the committed source.
|
||||
UntrackedFiles Check = "untracked-files"
|
||||
// ForbiddenFiles identifies selected paths present in the committed source.
|
||||
ForbiddenFiles Check = "forbidden-files"
|
||||
)
|
||||
|
||||
// Finding describes a validation observation at an optional source location.
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func checkUntrackedFiles(tree *CandidateTree, names []string) error {
|
||||
func checkForbiddenFiles(tree *CandidateTree, names []string) error {
|
||||
var findings []Finding
|
||||
for _, name := range names {
|
||||
clean := path.Clean(name)
|
||||
@@ -20,5 +20,5 @@ func checkUntrackedFiles(tree *CandidateTree, names []string) error {
|
||||
if len(findings) == 0 {
|
||||
return nil
|
||||
}
|
||||
return &Failure{Check: UntrackedFiles, Findings: findings}
|
||||
return &Failure{Check: ForbiddenFiles, Findings: findings}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestUntrackedFilesUsesCapturedRepositoryPaths(t *testing.T) {
|
||||
func TestForbiddenFilesUsesCapturedRepositoryPaths(t *testing.T) {
|
||||
repository := newTreeRepository(t)
|
||||
writeTreeFile(t, repository, "go.mod", []byte("module example.com/root\n"))
|
||||
writeTreeFile(t, repository, "nested/go.mod", []byte("module example.com/nested\n"))
|
||||
@@ -27,21 +27,21 @@ func TestUntrackedFilesUsesCapturedRepositoryPaths(t *testing.T) {
|
||||
if err := Run(context.Background(), request); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
request.Settings.UntrackedFiles = []string{".releasekit/token", "absent-token"}
|
||||
request.Settings.ForbiddenFiles = []string{".releasekit/token", "absent-token"}
|
||||
if err := Run(context.Background(), request); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
request.Settings.UntrackedFiles = []string{"nested/./token"}
|
||||
request.Settings.ForbiddenFiles = []string{"nested/./token"}
|
||||
err := Run(context.Background(), request)
|
||||
failure, ok := err.(*Failure)
|
||||
if !ok || failure.Check != UntrackedFiles || len(failure.Findings) != 1 || failure.Findings[0].Path != "nested/token" {
|
||||
t.Fatalf("untracked-files error = %v, want committed nested path despite worktree deletion", err)
|
||||
if !ok || failure.Check != ForbiddenFiles || len(failure.Findings) != 1 || failure.Findings[0].Path != "nested/token" {
|
||||
t.Fatalf("forbidden-files error = %v, want committed nested path despite worktree deletion", err)
|
||||
}
|
||||
if strings.Contains(err.Error(), "fixture-secret") {
|
||||
t.Fatal("validation exposed committed token bytes")
|
||||
}
|
||||
for _, invalid := range []string{"", "../token", "/token"} {
|
||||
request.Settings.UntrackedFiles = []string{invalid}
|
||||
request.Settings.ForbiddenFiles = []string{invalid}
|
||||
if err := Run(context.Background(), request); err == nil {
|
||||
t.Fatalf("invalid path %q was accepted", invalid)
|
||||
}
|
||||
@@ -21,7 +21,7 @@ type Settings struct {
|
||||
FullVet bool
|
||||
CompileTargets []Target
|
||||
SharedFiles []string
|
||||
UntrackedFiles []string
|
||||
ForbiddenFiles []string
|
||||
GoFormat bool
|
||||
Markdown *MarkdownSettings
|
||||
ModuleDistribution ModuleDistributionSettings
|
||||
@@ -135,7 +135,7 @@ func Run(ctx context.Context, request Request) (result error) {
|
||||
}
|
||||
}
|
||||
needsSharedSelection := len(request.Settings.SharedFiles) != 0
|
||||
if request.Settings.GoFormat || request.Settings.ModuleDistribution.WorkspaceFiles || request.Settings.ModuleDistribution.LocalReplacements || request.Settings.FileSize != nil || request.Settings.Markdown != nil || needsSharedSelection || len(request.Settings.UntrackedFiles) != 0 {
|
||||
if request.Settings.GoFormat || request.Settings.ModuleDistribution.WorkspaceFiles || request.Settings.ModuleDistribution.LocalReplacements || request.Settings.FileSize != nil || request.Settings.Markdown != nil || needsSharedSelection || len(request.Settings.ForbiddenFiles) != 0 {
|
||||
tree, err := request.ReadCandidateTree(ctx)
|
||||
if err != nil {
|
||||
var failure *Failure
|
||||
@@ -155,8 +155,8 @@ func Run(ctx context.Context, request Request) (result error) {
|
||||
if request.Settings.GoFormat {
|
||||
check = GoFormat
|
||||
}
|
||||
if len(request.Settings.UntrackedFiles) != 0 {
|
||||
check = UntrackedFiles
|
||||
if len(request.Settings.ForbiddenFiles) != 0 {
|
||||
check = ForbiddenFiles
|
||||
}
|
||||
return &Failure{Check: check, Cause: err}
|
||||
}
|
||||
@@ -170,7 +170,7 @@ func Run(ctx context.Context, request Request) (result error) {
|
||||
}
|
||||
}
|
||||
}()
|
||||
if err := checkUntrackedFiles(tree, request.Settings.UntrackedFiles); err != nil {
|
||||
if err := checkForbiddenFiles(tree, request.Settings.ForbiddenFiles); err != nil {
|
||||
return err
|
||||
}
|
||||
if request.Settings.GoFormat {
|
||||
|
||||
Reference in New Issue
Block a user