func MergeSarifReports()

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
}