in internal/platform/sarif.go [53:99]
func MergeSarifReports(c thirdpartyscan.Context, deviceId string) (int, error) {
tmpResultsDir := GetTmpResultsDir(c.ResultsDir())
files, err := findSarifFiles(tmpResultsDir)
sort.Strings(files)
if err != nil {
return 0, fmt.Errorf("error locating SARIF files: %s", err)
}
if len(files) == 0 {
return 0, fmt.Errorf("no SARIF files (file names ending with .sarif.json) found in %s", tmpResultsDir)
}
ch := make(chan *sarif.Report)
go collectReports(files, ch)
finalReport, err := mergeReports(ch)
if err != nil || finalReport == nil {
return 0, fmt.Errorf("error merging SARIF files: %s", err)
}
for _, result := range finalReport.Runs[0].Results {
// update locations[].physicalLocation.artifactLocation.uri by removing the projectDir prefix
for _, location := range result.Locations {
if (location.PhysicalLocation == nil) || (location.PhysicalLocation.ArtifactLocation == nil) {
continue
}
toReplace := c.ProjectDir()
if !strings.HasSuffix(toReplace, string(os.PathSeparator)) {
toReplace += string(os.PathSeparator)
}
location.PhysicalLocation.ArtifactLocation.Uri = strings.TrimPrefix(
location.PhysicalLocation.ArtifactLocation.Uri,
toReplace,
)
}
}
finalReport.Runs[0].Results = removeDuplicates(finalReport.Runs[0].Results)
SetVersionControlParams(c, deviceId, finalReport)
totalProblems := len(finalReport.Runs[0].Results)
err = WriteReport(GetSarifPath(c.ResultsDir()), finalReport)
if err != nil {
return 0, err
}
return totalProblems, nil
}