diff --git a/src/main/java/io/jenkins/plugins/pipelinegraphview/utils/AbstractPipelineViewAction.java b/src/main/java/io/jenkins/plugins/pipelinegraphview/utils/AbstractPipelineViewAction.java index 5576e671..afd95c8d 100644 --- a/src/main/java/io/jenkins/plugins/pipelinegraphview/utils/AbstractPipelineViewAction.java +++ b/src/main/java/io/jenkins/plugins/pipelinegraphview/utils/AbstractPipelineViewAction.java @@ -1,19 +1,11 @@ package io.jenkins.plugins.pipelinegraphview.utils; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import hudson.model.Action; -import hudson.model.BallColor; -import hudson.model.Item; -import hudson.model.Queue; -import hudson.security.Permission; -import hudson.util.HttpResponses; import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.logging.Level; import java.util.logging.Logger; -import net.sf.json.JSONObject; + import org.jenkins.ui.icon.IconSpec; import org.jenkinsci.plugins.workflow.cps.replay.ReplayAction; import org.jenkinsci.plugins.workflow.job.WorkflowRun; @@ -23,6 +15,19 @@ import org.kohsuke.stapler.bind.JavaScriptMethod; import org.kohsuke.stapler.interceptor.RequirePOST; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import hudson.model.Action; +import hudson.model.BallColor; +import hudson.model.Item; +import hudson.model.Queue; +import hudson.model.Run; +import hudson.model.queue.QueueTaskFuture; +import hudson.security.Permission; +import hudson.util.HttpResponses; +import net.sf.json.JSONObject; + public abstract class AbstractPipelineViewAction implements Action, IconSpec { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final Logger LOGGER = Logger.getLogger(AbstractPipelineViewAction.class.getName()); @@ -56,7 +61,11 @@ public String getBuildDisplayName() { */ @RequirePOST @JavaScriptMethod - public boolean doRebuild() throws IOException, ExecutionException { + public JSONObject doRebuild() throws IOException, ExecutionException, Exception { + JSONObject result = new JSONObject(); + result.put("success",false); + result.put("url",""); + if (run != null) { run.checkAnyPermission(Item.BUILD); ReplayAction replayAction = run.getAction(ReplayAction.class); @@ -64,11 +73,25 @@ public boolean doRebuild() throws IOException, ExecutionException { replayAction.run2(replayAction.getOriginalScript(), replayAction.getOriginalLoadedScripts()); if (item == null) { - return false; + return result; } - return true; + + QueueTaskFuture> f = (QueueTaskFuture) item.getFuture(); + if (f == null) { + return result; + } + Run b = f.waitForStart(); + + Integer number = b.getNumber(); + + result.put("success", true); + result.put("url", run.getUrl().replace("/" + run.getNumber() + "/", "/" + number + "/") + + "pipeline-graph/"); + + return result; } - return false; + + return result; } public String getFullBuildDisplayName() { diff --git a/src/main/webapp/js/build.js b/src/main/webapp/js/build.js index 530d8aae..83688b94 100644 --- a/src/main/webapp/js/build.js +++ b/src/main/webapp/js/build.js @@ -6,7 +6,7 @@ if (rebuildButton) { const rebuildAction = window[`${rebuildButton.dataset.proxyName}`]; rebuildAction.doRebuild(function (success) { const result = success.responseJSON; - if (result) { + if (result && result.success) { window.hoverNotification(rebuildButton.dataset.successMessage, rebuildButton); } });