func ProcessSarif()

in internal/platform/sarif.go [344:407]


func ProcessSarif(sarifPath, analysisId, reportUrl string, printProblems, codeClimate, codeInsights bool) {
	newProblems := 0
	s, err := ReadReport(sarifPath)
	if err != nil {
		log.Fatal(err)
	}
	var codeClimateIssues = make([]CCIssue, 0)
	var codeInsightIssues = make([]bbapi.ReportAnnotation, 0)
	rulesDescriptions := make(map[string]string)
	if printProblems {
		msg.EmptyMessage()
	}
	for _, run := range s.Runs {
		for _, r := range run.Results {
			ruleId := r.RuleId
			message := r.Message.Text
			baselineState := baselineStateEmpty
			if r.BaselineState != nil {
				baselineState = r.BaselineState.(string)
			}
			if baselineState == baselineStateNew || baselineState == baselineStateEmpty {
				newProblems++
			}
			if len(r.Locations) > 0 && baselineState != baselineStateUnchanged {
				if codeClimate {
					codeClimateIssues = append(codeClimateIssues, sarifResultToCodeClimate(&r))
				}
				if codeInsights {
					ruleDescription, ok := rulesDescriptions[ruleId]
					if !ok {
						ruleDescription = getRuleDescription(s, ruleId)
						rulesDescriptions[ruleId] = ruleDescription
					}
					codeInsightIssues = append(codeInsightIssues, buildAnnotation(&r, ruleDescription, reportUrl))
				}
				if printProblems {
					err = printSarifProblem(&r, ruleId, message)
					if err != nil {
						log.Debugf("Failed to print result: %s", err)
					}
				}
			}
		}
	}
	if codeClimate {
		err = writeGlCodeQualityReport(codeClimateIssues, sarifPath)
		if err != nil {
			log.Warnf("Problems writing GitLab CodeQuality report: %v", err)
		}
	}
	if codeInsights {
		err = sendBitBucketReport(codeInsightIssues, s.Runs[0].Tool.Driver.FullName, reportUrl, "qodana-"+analysisId)
		if err != nil {
			log.Warnf("Problems sending BitBucket Code Insights report: %v", err)
		}
	}
	if !qdenv.IsContainer() {
		if newProblems == 0 {
			msg.SuccessMessage(msg.GetProblemsFoundMessage(0))
		} else {
			msg.ErrorMessage(msg.GetProblemsFoundMessage(newProblems))
		}
	}
}