Rename the candidate file validator to forbidden files

This commit is contained in:
2026-11-01 16:02:51 +00:00
parent 792bfc4eca
commit ac78e7db73
16 changed files with 39 additions and 39 deletions

View File

@@ -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.

View File

@@ -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}
}

View File

@@ -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)
}

View File

@@ -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 {