Skip to content

Commit 362262c

Browse files
fix: capture error exit code for pmd
1 parent 10e9d7c commit 362262c

File tree

2 files changed

+12
-34
lines changed

2 files changed

+12
-34
lines changed

cmd/analyze.go

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"log"
1010
"net/http"
1111
"os"
12-
"os/exec"
1312

1413
"github.com/spf13/cobra"
1514
)
@@ -210,32 +209,7 @@ func runPmdAnalysis(workDirectory string, pathsToCheck []string, outputFile stri
210209
pmd := config.Config.Tools()["pmd"]
211210
pmdBinary := pmd.Binaries["pmd"]
212211

213-
// Build PMD command arguments
214-
args := []string{"check"}
215-
216-
// Add ruleset file if provided
217-
if pmdRulesetFile != "" {
218-
args = append(args, "--rulesets", pmdRulesetFile)
219-
}
220-
221-
// Add format options
222-
if outputFormat == "sarif" {
223-
args = append(args, "--format", "sarif")
224-
}
225-
226-
if outputFile != "" {
227-
args = append(args, "--report-file", outputFile)
228-
}
229-
230-
// Add directory to scan
231-
args = append(args, "--dir", workDirectory)
232-
233-
cmd := exec.Command(pmdBinary, args...)
234-
cmd.Dir = workDirectory
235-
cmd.Stderr = os.Stderr
236-
cmd.Stdout = os.Stdout
237-
238-
err := cmd.Run()
212+
err := tools.RunPmd(workDirectory, pmdBinary, pathsToCheck, outputFile, outputFormat, pmdRulesetFile)
239213
if err != nil {
240214
log.Fatalf("Error running PMD: %v", err)
241215
}

tools/pmdRunner.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@ func RunPmd(repositoryToAnalyseDirectory string, pmdBinary string, pathsToCheck
2323
cmd.Args = append(cmd.Args, "--report-file", outputFile)
2424
}
2525

26-
// Add specific targets or use current directory
27-
if len(pathsToCheck) > 0 {
28-
cmd.Args = append(cmd.Args, pathsToCheck...)
29-
} else {
30-
cmd.Args = append(cmd.Args, ".")
31-
}
26+
// Add directory to scan
27+
cmd.Args = append(cmd.Args, "--dir", repositoryToAnalyseDirectory)
3228

3329
cmd.Dir = repositoryToAnalyseDirectory
3430
cmd.Stderr = os.Stderr
3531
cmd.Stdout = os.Stdout
3632

37-
return cmd.Run()
33+
err := cmd.Run()
34+
if err != nil {
35+
if exitErr, ok := err.(*exec.ExitError); ok && exitErr.ExitCode() == 4 {
36+
// Exit status 4 means violations were found, which is not an error
37+
return nil
38+
}
39+
return err
40+
}
41+
return nil
3842
}

0 commit comments

Comments
 (0)