Skip to content

Commit e1d3abc

Browse files
✨ scdiff: Limit generating results to specific checks (#3535)
* accept checks arg when generating golden. Signed-off-by: Spencer Schrock <[email protected]> * dont shadow import Signed-off-by: Spencer Schrock <[email protected]> --------- Signed-off-by: Spencer Schrock <[email protected]>
1 parent 64c491b commit e1d3abc

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

cmd/internal/scdiff/app/generate.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"fmt"
2020
"io"
2121
"os"
22+
"strings"
2223

2324
"github.com/spf13/cobra"
2425

@@ -32,11 +33,13 @@ func init() {
3233
rootCmd.AddCommand(generateCmd)
3334
generateCmd.PersistentFlags().StringVarP(&repoFile, "repos", "r", "", "path to newline-delimited repo file")
3435
generateCmd.PersistentFlags().StringVarP(&outputFile, "output", "o", "", "write to file instead of stdout")
36+
generateCmd.PersistentFlags().StringVar(&checksArg, "checks", "", "Comma separated list of checks to run")
3537
}
3638

3739
var (
3840
repoFile string
3941
outputFile string
42+
checksArg string
4043

4144
generateCmd = &cobra.Command{
4245
Use: "generate [flags] repofile",
@@ -57,7 +60,8 @@ var (
5760
defer outputF.Close()
5861
output = outputF
5962
}
60-
r := runner.New()
63+
checks := strings.Split(checksArg, ",")
64+
r := runner.New(checks)
6165
return generate(&r, input, output)
6266
},
6367
}

cmd/internal/scdiff/app/runner/runner.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package runner
1616

1717
import (
1818
"context"
19+
"strings"
1920

2021
"github.com/ossf/scorecard/v4/checker"
2122
"github.com/ossf/scorecard/v4/checks"
@@ -42,7 +43,8 @@ type Runner struct {
4243
vuln clients.VulnerabilitiesClient
4344
}
4445

45-
func New() Runner {
46+
// Creates a Runner which will run the listed checks. If no checks are provided, all will run.
47+
func New(enabledChecks []string) Runner {
4648
ctx := context.Background()
4749
logger := log.NewLogger(log.DefaultLevel)
4850
return Runner{
@@ -52,7 +54,7 @@ func New() Runner {
5254
ossFuzz: ossfuzz.CreateOSSFuzzClient(ossfuzz.StatusURL),
5355
cii: clients.DefaultCIIBestPracticesClient(),
5456
vuln: clients.DefaultVulnerabilitiesClient(),
55-
enabledChecks: checks.GetAll(),
57+
enabledChecks: parseChecks(enabledChecks),
5658
}
5759
}
5860

@@ -73,3 +75,20 @@ func (r *Runner) log(msg string) {
7375
r.logger.Info(msg)
7476
}
7577
}
78+
79+
func parseChecks(c []string) checker.CheckNameToFnMap {
80+
all := checks.GetAll()
81+
if len(c) == 0 {
82+
return all
83+
}
84+
85+
ret := checker.CheckNameToFnMap{}
86+
for _, requested := range c {
87+
for key, fn := range all {
88+
if strings.EqualFold(key, requested) {
89+
ret[key] = fn
90+
}
91+
}
92+
}
93+
return ret
94+
}

cmd/internal/scdiff/app/runner/runner_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,15 @@ import (
2525
)
2626

2727
func TestNew(t *testing.T) {
28-
r := New()
28+
r := New(nil)
2929
if len(r.enabledChecks) == 0 {
3030
t.Errorf("runner has no checks to run: %v", r.enabledChecks)
3131
}
32+
requestedChecks := []string{"Code-Review"}
33+
r = New(requestedChecks)
34+
if len(r.enabledChecks) != len(requestedChecks) {
35+
t.Errorf("requested %d checks but only got: %v", len(requestedChecks), r.enabledChecks)
36+
}
3237
}
3338

3439
func TestRunner_Run(t *testing.T) {

0 commit comments

Comments
 (0)