Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Update plugin Sonar for support new version GoCD #25

Merged
merged 7 commits into from
Nov 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ hs_err_pid*

*/target/*
out/*.jar
target/lib/*.jar
target/lib/*.jar

.settings/
.project
.classpath
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@ public SonarClient(String apiUrl) throws GeneralSecurityException

public JSONObject getProjectWithQualityGateDetails(String projectKey) throws Exception
{
String uri = getApiUrl() + "/resources?resource=%1$s&metrics=quality_gate_details";
String uri = getApiUrl() + "/qualitygates/project_status?projectKey=%1$s";
uri = String.format(uri, projectKey);
String resultData = requestGet(uri);

JSONArray jsonArray = new JSONArray(resultData);
JSONObject jsonObject = jsonArray.getJSONObject(0);
JSONObject jsonObject = new JSONObject(resultData);

return jsonObject;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.tw.go.task.sonarqualitygate;

import org.json.JSONArray;
import org.json.JSONObject;

/**
Expand All @@ -14,30 +13,14 @@ public SonarParser(JSONObject projectResult){
this.project = projectResult;
}

public JSONObject GetQualityGateDetails()
public String getProjectQualityGateStatus()
{
if (project.has("msr")) {
JSONArray msrList = project.getJSONArray("msr");

for (int i = 0; i < msrList.length(); i++)
{
JSONObject msr = (JSONObject) msrList.get(i);
String key = msr.getString("key");

if("quality_gate_details".equals(key))
{
String data = msr.getString("data");
//data = data.replace("\\", "");
JSONObject resultObj = new JSONObject(data);
return resultObj;
}

if (project.has("projectStatus")) {
JSONObject projectStatus = project.getJSONObject("projectStatus");
if (projectStatus.has("status")) {
return projectStatus.getString("status");
}


}
return null;
}


}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,4 @@ private Map getConfigDef() {
public GoPluginIdentifier pluginIdentifier() {
return new GoPluginIdentifier("task", Arrays.asList("1.0"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.thoughtworks.go.plugin.api.task.JobConsoleLogger;
import com.tw.go.plugin.common.*;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;

import java.security.GeneralSecurityException;
import java.util.Map;
Expand Down Expand Up @@ -44,12 +46,21 @@ public Result execute() throws Exception {
// log(" Requesting project's quality gate anonymously.");
// }

// get quality gate details
//get quality gate details
JSONObject result = sonarClient.getProjectWithQualityGateDetails(sonarProjectKey);
JSONObject project = (JSONObject) result.get("projectStatus");
JSONArray periods = (JSONArray) project.get("periods");
JSONObject lastPeriod = (JSONObject) periods.get(periods.length() - 1);

String lastDate = (String) lastPeriod.get("date");
String lastVersion = (String) lastPeriod.get("parameter");

if (!("".equals(stageName)) && !("".equals(jobName)) && !("".equals(jobCounter))) {
String scheduledTime = getScheduledTime();
String resultDate = result.getString("date");



String resultDate = lastDate;
resultDate = new StringBuilder(resultDate).insert(resultDate.length()-2, ":").toString();

int timeout = 0;
Expand All @@ -64,15 +75,15 @@ public Result execute() throws Exception {

timeout = timeout + timeoutTime;

resultDate = result.getString("date");
resultDate = lastDate;
resultDate = new StringBuilder(resultDate).insert(resultDate.length()-2, ":").toString();

if (timeout > timeLimit) {

log("No new scan has been found !");

log("Date of Sonar scan: " + result.getString("date"));
log("Version of Sonar scan: " + result.getString("version"));
log("Date of Sonar scan: " + lastDate);
log("Version of Sonar scan: " + lastVersion);

return new Result(false, "Failed to get a newer quality gate for " + sonarProjectKey
+ ". The present quality gate is older than the start of the Sonar scan task.");
Expand All @@ -82,31 +93,27 @@ public Result execute() throws Exception {

}

log("Date of Sonar scan: " + result.getString("date"));
log("Version of Sonar scan: " + result.getString("version"));
log("Date of Sonar scan: " + lastDate);
log("Version of Sonar scan: " + lastVersion);

SonarParser parser = new SonarParser(result);

// check that a quality gate is returned
JSONObject qgDetails = parser.GetQualityGateDetails();

String qgResult = qgDetails.getString("level");
String qgResult = parser.getProjectQualityGateStatus();

// get result issues
return parseResult(qgResult, issueTypeFail);

}
else {

log("Date of Sonar scan: " + result.getString("date"));
log("Version of Sonar scan: " + result.getString("version"));
log("Date of Sonar scan: " + lastDate);
log("Version of Sonar scan: " + lastVersion);

SonarParser parser = new SonarParser(result);

// check that a quality gate is returned
JSONObject qgDetails = parser.GetQualityGateDetails();

String qgResult = qgDetails.getString("level");
String qgResult = parser.getProjectQualityGateStatus();

// get result issues
return parseResult(qgResult, issueTypeFail);
Expand Down Expand Up @@ -178,5 +185,4 @@ protected int compareDates(String date1, String date2)
protected String getPluginLogPrefix(){
return "[SonarQube Quality Gate Plugin] ";
}

}