diff --git a/.gitignore b/.gitignore index 93c4b28..1f9709d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,8 @@ hs_err_pid* */target/* out/*.jar -target/lib/*.jar \ No newline at end of file +target/lib/*.jar + +.settings/ +.project +.classpath \ No newline at end of file diff --git a/sonar-qualitygates-plugin/jar/gocd-sonar-qualitygates-plugin-2.0.0.jar b/sonar-qualitygates-plugin/jar/gocd-sonar-qualitygates-plugin-2.0.0.jar new file mode 100644 index 0000000..c9b6b78 Binary files /dev/null and b/sonar-qualitygates-plugin/jar/gocd-sonar-qualitygates-plugin-2.0.0.jar differ diff --git a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarClient.java b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarClient.java index 5900cb0..e31e293 100755 --- a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarClient.java +++ b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarClient.java @@ -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; } diff --git a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarParser.java b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarParser.java index d85b8c1..890c9de 100755 --- a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarParser.java +++ b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarParser.java @@ -1,6 +1,5 @@ package com.tw.go.task.sonarqualitygate; -import org.json.JSONArray; import org.json.JSONObject; /** @@ -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; } - - -} +} \ No newline at end of file diff --git a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarScanTask.java b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarScanTask.java index 3494d27..eddb129 100755 --- a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarScanTask.java +++ b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarScanTask.java @@ -100,4 +100,4 @@ private Map getConfigDef() { public GoPluginIdentifier pluginIdentifier() { return new GoPluginIdentifier("task", Arrays.asList("1.0")); } -} +} \ No newline at end of file diff --git a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarTaskExecutor.java b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarTaskExecutor.java index 3c5b599..dfb3d9c 100755 --- a/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarTaskExecutor.java +++ b/sonar-qualitygates-plugin/src/com/tw/go/task/sonarqualitygate/SonarTaskExecutor.java @@ -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; @@ -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; @@ -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."); @@ -82,15 +93,13 @@ 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); @@ -98,15 +107,13 @@ public Result execute() throws Exception { } 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); @@ -178,5 +185,4 @@ protected int compareDates(String date1, String date2) protected String getPluginLogPrefix(){ return "[SonarQube Quality Gate Plugin] "; } - } \ No newline at end of file