@@ -188,42 +188,33 @@ func getToolName(toolName string, version string) string {
188188 return toolName
189189}
190190
191- func runEslintAnalysis (workDirectory string , pathsToCheck []string , autoFix bool , outputFile string , outputFormat string ) {
191+ func runEslintAnalysis (workDirectory string , pathsToCheck []string , autoFix bool , outputFile string , outputFormat string ) error {
192192 eslint := config .Config .Tools ()["eslint" ]
193193 eslintInstallationDirectory := eslint .InstallDir
194194 nodeRuntime := config .Config .Runtimes ()["node" ]
195195 nodeBinary := nodeRuntime .Binaries ["node" ]
196196
197- tools .RunEslint (workDirectory , eslintInstallationDirectory , nodeBinary , pathsToCheck , autoFix , outputFile , outputFormat )
197+ return tools .RunEslint (workDirectory , eslintInstallationDirectory , nodeBinary , pathsToCheck , autoFix , outputFile , outputFormat )
198198}
199199
200- func runTrivyAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) {
200+ func runTrivyAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) error {
201201 trivy := config .Config .Tools ()["trivy" ]
202202 trivyBinary := trivy .Binaries ["trivy" ]
203203
204- err := tools .RunTrivy (workDirectory , trivyBinary , pathsToCheck , outputFile , outputFormat )
205- if err != nil {
206- log .Fatalf ("Error running Trivy: %v" , err )
207- }
204+ return tools .RunTrivy (workDirectory , trivyBinary , pathsToCheck , outputFile , outputFormat )
208205}
209206
210- func runPmdAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) {
207+ func runPmdAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) error {
211208 pmd := config .Config .Tools ()["pmd" ]
212209 pmdBinary := pmd .Binaries ["pmd" ]
213210
214- err := tools .RunPmd (workDirectory , pmdBinary , pathsToCheck , outputFile , outputFormat , config .Config )
215- if err != nil {
216- log .Fatalf ("Error running PMD: %v" , err )
217- }
211+ return tools .RunPmd (workDirectory , pmdBinary , pathsToCheck , outputFile , outputFormat , config .Config )
218212}
219213
220- func runPylintAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) {
214+ func runPylintAnalysis (workDirectory string , pathsToCheck []string , outputFile string , outputFormat string ) error {
221215 pylint := config .Config .Tools ()["pylint" ]
222216
223- err := tools .RunPylint (workDirectory , pylint , pathsToCheck , outputFile , outputFormat )
224- if err != nil {
225- log .Fatalf ("Error running Pylint: %v" , err )
226- }
217+ return tools .RunPylint (workDirectory , pylint , pathsToCheck , outputFile , outputFormat )
227218}
228219
229220var analyzeCmd = & cobra.Command {
@@ -262,13 +253,22 @@ var analyzeCmd = &cobra.Command{
262253 defer os .RemoveAll (tmpDir )
263254
264255 var sarifOutputs []string
256+ failedTools := make (map [string ]error )
265257 for toolName := range toolsToRun {
266258 log .Printf ("Running %s...\n " , toolName )
267259 tmpFile := filepath .Join (tmpDir , fmt .Sprintf ("%s.sarif" , toolName ))
268- runTool (workDirectory , toolName , args , tmpFile )
260+ if err := runTool (workDirectory , toolName , args , tmpFile ); err != nil {
261+ log .Printf ("Warning: Tool %s failed: %v\n " , toolName , err )
262+ failedTools [toolName ] = err
263+ continue
264+ }
269265 sarifOutputs = append (sarifOutputs , tmpFile )
270266 }
271267
268+ if len (sarifOutputs ) == 0 && len (failedTools ) > 0 {
269+ log .Fatal ("All tools failed to run. No analysis results available." )
270+ }
271+
272272 // create output file tmp file
273273 tmpOutputFile := filepath .Join (tmpDir , "merged.sarif" )
274274
@@ -277,6 +277,22 @@ var analyzeCmd = &cobra.Command{
277277 log .Fatalf ("Failed to merge SARIF outputs: %v" , err )
278278 }
279279
280+ // Add error runs to the merged SARIF
281+ if len (failedTools ) > 0 {
282+ mergedSarif , err := utils .ReadSarifFile (tmpOutputFile )
283+ if err != nil {
284+ log .Fatalf ("Failed to read merged SARIF: %v" , err )
285+ }
286+
287+ for toolName , err := range failedTools {
288+ utils .AddErrorRun (& mergedSarif , toolName , err .Error ())
289+ }
290+
291+ if err := utils .WriteSarifFile (mergedSarif , tmpOutputFile ); err != nil {
292+ log .Fatalf ("Failed to write updated SARIF: %v" , err )
293+ }
294+ }
295+
280296 if outputFile != "" {
281297 // copy tmpOutputFile to outputFile
282298 content , err := os .ReadFile (tmpOutputFile )
@@ -302,17 +318,17 @@ var analyzeCmd = &cobra.Command{
302318 },
303319}
304320
305- func runTool (workDirectory string , toolName string , args []string , outputFile string ) {
321+ func runTool (workDirectory string , toolName string , args []string , outputFile string ) error {
306322 switch toolName {
307323 case "eslint" :
308- runEslintAnalysis (workDirectory , args , autoFix , outputFile , outputFormat )
324+ return runEslintAnalysis (workDirectory , args , autoFix , outputFile , outputFormat )
309325 case "trivy" :
310- runTrivyAnalysis (workDirectory , args , outputFile , outputFormat )
326+ return runTrivyAnalysis (workDirectory , args , outputFile , outputFormat )
311327 case "pmd" :
312- runPmdAnalysis (workDirectory , args , outputFile , outputFormat )
328+ return runPmdAnalysis (workDirectory , args , outputFile , outputFormat )
313329 case "pylint" :
314- runPylintAnalysis (workDirectory , args , outputFile , outputFormat )
330+ return runPylintAnalysis (workDirectory , args , outputFile , outputFormat )
315331 default :
316- log . Printf ( "Warning: Unsupported tool: %s\n " , toolName )
332+ return fmt . Errorf ( "unsupported tool: %s" , toolName )
317333 }
318334}
0 commit comments