You've already forked sap-jenkins-library
							
							
				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:
		| @@ -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 | ||||
| 	} | ||||
|   | ||||
| @@ -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") | ||||
| 	} | ||||
|   | ||||
| @@ -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 ... | ||||
|   | ||||
| @@ -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}}, | ||||
| 		}, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user