@@ -4,11 +4,13 @@ import (
44 "errors"
55 "fmt"
66 "net/url"
7+ "os/exec"
78 "sheriff/internal/git"
89 "sheriff/internal/gitlab"
910 "sheriff/internal/patrol"
1011 "sheriff/internal/scanner"
1112 "sheriff/internal/slack"
13+ "strings"
1214
1315 "github.com/urfave/cli/v2"
1416 "github.com/urfave/cli/v2/altsrc"
@@ -35,6 +37,7 @@ const gitlabTokenFlag = "gitlab-token"
3537const slackTokenFlag = "slack-token"
3638
3739var sensitiveFlags = []string {gitlabTokenFlag , slackTokenFlag }
40+ var necessaryScanners = []string {scanner .OsvCommandName }
3841
3942var PatrolFlags = []cli.Flag {
4043 & cli.StringFlag {
@@ -122,6 +125,12 @@ func PatrolAction(cCtx *cli.Context) error {
122125
123126 patrolService := patrol .New (gitlabService , slackService , gitService , osvService )
124127
128+ // Check whether the necessary scanners are available
129+ missingScanners := getMissingScanners (necessaryScanners )
130+ if len (missingScanners ) > 0 {
131+ return fmt .Errorf ("Cannot find all necessary scanners in $PATH, missing: %v" , strings .Join (missingScanners , ", " ))
132+ }
133+
125134 // Do the patrol
126135 if warn , err := patrolService .Patrol (
127136 patrol.PatrolArgs {
@@ -173,3 +182,14 @@ func parseUrls(uris []string) ([]patrol.ProjectLocation, error) {
173182
174183 return locations , nil
175184}
185+
186+ func getMissingScanners (necessary []string ) []string {
187+ missingScanners := make ([]string , 0 , len (necessary ))
188+ for _ , scanner := range necessary {
189+ if _ , err := exec .LookPath (scanner ); err != nil {
190+ missingScanners = append (missingScanners , scanner )
191+ }
192+ }
193+
194+ return missingScanners
195+ }
0 commit comments