1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-10-30 23:57:50 +02:00

fix(sonarExecuteScan): error handling for report metrics (#3512)

This commit is contained in:
Matthias Scudlik
2022-02-07 16:41:36 +01:00
committed by GitHub
parent 831c5b0061
commit 907dcd7dc1
4 changed files with 44 additions and 32 deletions

View File

@@ -233,19 +233,7 @@ func runSonar(config sonarExecuteScanOptions, client piperhttp.Downloader, runne
return err
}
componentService := SonarUtils.NewMeasuresComponentService(taskReport.ServerURL, config.Token, taskReport.ProjectKey, config.Organization, config.BranchName, config.ChangeID, apiClient)
cov, err := componentService.GetCoverage()
if err != nil {
return err // No wrap, description already added one level below
}
loc, err := componentService.GetLinesOfCode()
if err != nil {
return err // No wrap, description already added one level below
}
log.Entry().Debugf("Influx values: %v", influx.sonarqube_data.fields)
err = SonarUtils.WriteReport(SonarUtils.ReportData{
reportData := SonarUtils.ReportData{
ServerURL: taskReport.ServerURL,
ProjectKey: taskReport.ProjectKey,
TaskID: taskReport.TaskID,
@@ -258,10 +246,27 @@ func runSonar(config sonarExecuteScanOptions, client piperhttp.Downloader, runne
Major: influx.sonarqube_data.fields.major_issues,
Minor: influx.sonarqube_data.fields.minor_issues,
Info: influx.sonarqube_data.fields.info_issues,
},
Coverage: *cov,
LinesOfCode: *loc,
}, sonar.workingDir, ioutil.WriteFile)
}}
componentService := SonarUtils.NewMeasuresComponentService(taskReport.ServerURL, config.Token, taskReport.ProjectKey, config.Organization, config.BranchName, config.ChangeID, apiClient)
cov, err := componentService.GetCoverage()
if err != nil {
log.Entry().Warnf("failed to retrieve sonar coverage data: %v", err)
} else {
reportData.Coverage = cov
}
loc, err := componentService.GetLinesOfCode()
if err != nil {
log.Entry().Warnf("failed to retrieve sonar lines of code data: %v", err)
} else {
reportData.LinesOfCode = loc
}
log.Entry().Debugf("Influx values: %v", influx.sonarqube_data.fields)
err = SonarUtils.WriteReport(reportData, sonar.workingDir, ioutil.WriteFile)
if err != nil {
return err
}

View File

@@ -77,10 +77,14 @@ func (service *ComponentService) GetLinesOfCode() (*SonarLinesOfCode, error) {
Component: service.Project,
MetricKeys: "ncloc_language_distribution,ncloc",
}
component, response, _ := service.Component(&options)
component, response, err := service.Component(&options)
if err != nil {
return nil, errors.Wrap(err, "Failed to get coverage from Sonar measures/component API")
}
// reuse response verification from sonargo
err := sonargo.CheckResponse(response)
err = sonargo.CheckResponse(response)
if err != nil {
return nil, errors.Wrap(err, "Failed to get lines of code from Sonar measures/component API")
}
@@ -113,10 +117,13 @@ func (service *ComponentService) GetCoverage() (*SonarCoverage, error) {
Component: service.Project,
MetricKeys: "coverage,branch_coverage,line_coverage,uncovered_lines,lines_to_cover,conditions_to_cover,uncovered_conditions",
}
component, response, _ := service.Component(&options)
component, response, err := service.Component(&options)
if err != nil {
return nil, errors.Wrap(err, "Failed to get coverage from Sonar measures/component API")
}
// reuse response verification from sonargo
err := sonargo.CheckResponse(response)
err = sonargo.CheckResponse(response)
if err != nil {
return nil, errors.Wrap(err, "Failed to get coverage from Sonar measures/component API")
}

View File

@@ -10,15 +10,15 @@ const reportFileName = "sonarscan.json"
//ReportData is representing the data of the step report JSON
type ReportData struct {
ServerURL string `json:"serverUrl"`
ProjectKey string `json:"projectKey"`
TaskID string `json:"taskId"`
ChangeID string `json:"changeID,omitempty"`
BranchName string `json:"branchName,omitempty"`
Organization string `json:"organization,omitempty"`
NumberOfIssues Issues `json:"numberOfIssues"`
Coverage SonarCoverage `json:"coverage"`
LinesOfCode SonarLinesOfCode `json:"linesOfCode"`
ServerURL string `json:"serverUrl"`
ProjectKey string `json:"projectKey"`
TaskID string `json:"taskId"`
ChangeID string `json:"changeID,omitempty"`
BranchName string `json:"branchName,omitempty"`
Organization string `json:"organization,omitempty"`
NumberOfIssues Issues `json:"numberOfIssues"`
Coverage *SonarCoverage `json:"coverage,omitempty"`
LinesOfCode *SonarLinesOfCode `json:"linesOfCode,omitempty"`
}
// Issues ...

View File

@@ -30,7 +30,7 @@ func TestWriteReport(t *testing.T) {
Minor: 3,
Info: 4,
},
Coverage: SonarCoverage{
Coverage: &SonarCoverage{
Coverage: 13.7,
BranchCoverage: 42,
LineCoverage: 37.1,
@@ -39,7 +39,7 @@ func TestWriteReport(t *testing.T) {
BranchesToCover: 30,
UncoveredBranches: 3,
},
LinesOfCode: SonarLinesOfCode{
LinesOfCode: &SonarLinesOfCode{
Total: 327,
LanguageDistribution: []SonarLanguageDistribution{{LanguageKey: "java", LinesOfCode: 327}},
},