You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by GitBox <gi...@apache.org> on 2018/10/10 11:50:57 UTC

[GitHub] asfgit closed pull request #27: IGNITE-9770 Add 'Re-run possible blockers' button

asfgit closed pull request #27: IGNITE-9770 Add 'Re-run possible blockers' button
URL: https://github.com/apache/ignite-teamcity-bot/pull/27
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildInfo.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildInfo.java
deleted file mode 100644
index 9de4dd3..0000000
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildInfo.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ci.observer;
-
-import org.apache.ignite.ci.tcmodel.result.Build;
-import org.apache.ignite.ci.user.ICredentialsProv;
-
-/**
- *
- */
-public class BuildInfo {
-    /** Build. */
-    public final Build build;
-
-    /** Server id. */
-    public final String srvId;
-
-    /** */
-    public final ICredentialsProv prov;
-
-    /** JIRA ticket full name. */
-    public final String ticket;
-
-    /**
-     * @param build Build.
-     * @param srvId Server id.
-     * @param prov Credentials.
-     * @param ticket JIRA ticket name.
-     */
-    BuildInfo(Build build, String srvId, ICredentialsProv prov, String ticket) {
-        this.build = build;
-        this.srvId = srvId;
-        this.prov = prov;
-        this.ticket = ticket;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        BuildInfo info = (BuildInfo)o;
-
-        if (!build.equals(info.build))
-            return false;
-        if (!srvId.equals(info.srvId))
-            return false;
-        if (!prov.equals(info.prov))
-            return false;
-
-        return ticket.equals(info.ticket);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = build.hashCode();
-
-        res = 31 * res + srvId.hashCode();
-        res = 31 * res + prov.hashCode();
-        res = 31 * res + ticket.hashCode();
-
-        return res;
-    }
-}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
index 8603d34..a6d302f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
@@ -54,12 +54,11 @@ public void stop() {
     }
 
     /**
-     * @param build Build id.
      * @param srvId Server id.
      * @param prov Credentials.
      * @param ticket JIRA ticket name.
      */
-    public void observe(Build build, String srvId, ICredentialsProv prov, String ticket) {
-        observerTask.builds.add(new BuildInfo(build, srvId, prov, ticket));
+    public void observe(String srvId, ICredentialsProv prov, String ticket, Build... builds) {
+        observerTask.builds.add(new BuildsInfo(srvId, prov, ticket, builds));
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
new file mode 100644
index 0000000..2dd3060
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.observer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.apache.ignite.ci.IAnalyticsEnabledTeamcity;
+import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.user.ICredentialsProv;
+
+public class BuildsInfo {
+    /** Finished. */
+    public static final String FINISHED = "finished";
+
+    /** Server id. */
+    public final String srvId;
+
+    /** Build type id. */
+    public final String buildTypeId;
+
+    /** Branch name. */
+    public final String branchName;
+
+    /** Credentials. */
+    public final ICredentialsProv prov;
+
+    /** JIRA ticket full name. */
+    public final String ticket;
+
+    /** Finished builds. */
+    private final Map<Build, Boolean> finishedBuilds = new HashMap<>();
+
+    /**
+     * @param srvId Server id.
+     * @param prov Prov.
+     * @param ticket Ticket.
+     * @param builds Builds.
+     */
+    public BuildsInfo(String srvId, ICredentialsProv prov, String ticket, Build[] builds) {
+        this.srvId = srvId;
+        this.prov = prov;
+        this.ticket = ticket;
+        this.buildTypeId = builds.length > 1 ? "IgniteTests24Java8_RunAll" : builds[0].buildTypeId;
+        this.branchName = builds[0].branchName;
+
+        for (Build build : builds)
+            finishedBuilds.put(build, false);
+    }
+
+    /**
+     * @param teamcity Teamcity.
+     */
+    public boolean isFinished(IAnalyticsEnabledTeamcity teamcity) {
+        for (Map.Entry<Build, Boolean> entry : finishedBuilds.entrySet()) {
+            if (!entry.getValue()) {
+                Build build = teamcity.getBuild(entry.getKey().getId());
+                entry.setValue(build.state.equals(FINISHED));
+            }
+        }
+
+        return !finishedBuilds.containsValue(false);
+    }
+
+    /**
+     * Return builds count.
+     */
+    public int buildsCount(){
+        return finishedBuilds.size();
+    }
+
+    /**
+     * Return finished builds count.
+     */
+    public int finishedBuildsCount(){
+        return (int)finishedBuilds.values().stream().filter(v -> v).count();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object o) {
+        if (this == o)
+            return true;
+
+        if (!(o instanceof BuildsInfo))
+            return false;
+
+        BuildsInfo info = (BuildsInfo)o;
+
+        return Objects.equals(srvId, info.srvId) &&
+            Objects.equals(buildTypeId, info.buildTypeId) &&
+            Objects.equals(branchName, info.branchName) &&
+            Objects.equals(prov, info.prov) &&
+            Objects.equals(ticket, info.ticket) &&
+            Objects.equals(finishedBuilds, info.finishedBuilds);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return Objects.hash(srvId, buildTypeId, branchName, prov, ticket, finishedBuilds);
+    }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
index 374099b..a27fe03 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
@@ -28,7 +28,6 @@
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.MonitoredTask;
 import org.apache.ignite.ci.jira.IJiraIntegration;
-import org.apache.ignite.ci.tcmodel.result.Build;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,7 +47,7 @@
     @Inject private IJiraIntegration jiraIntegration;
 
     /** Builds. */
-    final Queue<BuildInfo> builds;
+    final Queue<BuildsInfo> builds;
 
     /**
      */
@@ -73,23 +72,22 @@
     @MonitoredTask(name = "Build Observer")
     protected String runObserverTask() {
         int checkedBuilds = 0;
-        int notFinihedBuilds = 0;
+        int notFinishedBuilds = 0;
         Set<String> ticketsNotified = new HashSet<>();
 
-        for (BuildInfo info : builds) {
-            checkedBuilds++;
-            IAnalyticsEnabledTeamcity teamcity = srvProvider.server(info.srvId, info.prov);
+        for (BuildsInfo info : builds) {
+            checkedBuilds += info.buildsCount();
 
-            Build build = teamcity.getBuild(info.build.getId());
+            IAnalyticsEnabledTeamcity teamcity = srvProvider.server(info.srvId, info.prov);
 
-            if (!"finished".equals(build.state)) {
-                notFinihedBuilds++;
+            if (!info.isFinished(teamcity)) {
+                notFinishedBuilds += info.buildsCount() - info.finishedBuildsCount();
 
                 continue;
             }
 
-            String jiraRes = jiraIntegration.notifyJira(info.srvId, info.prov, info.build.buildTypeId,
-                info.build.branchName, info.ticket);
+            String jiraRes = jiraIntegration.notifyJira(info.srvId, info.prov, info.buildTypeId,
+                info.branchName, info.ticket);
 
             if (JIRA_COMMENTED.equals(jiraRes)) {
                 ticketsNotified.add(info.ticket);
@@ -98,6 +96,6 @@ protected String runObserverTask() {
             }
         }
 
-        return "Checked " + checkedBuilds + " not finished " + notFinihedBuilds + " notified: " + ticketsNotified;
+        return "Checked " + checkedBuilds + " not finished " + notFinishedBuilds + " notified: " + ticketsNotified;
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
index d3429e3..5fdd812 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
@@ -20,6 +20,7 @@
 import com.google.common.base.Strings;
 import com.google.inject.Provider;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.ws.rs.QueryParam;
@@ -74,10 +75,10 @@
         return ticketId;
     }
 
-    @NotNull public String triggerBuildAndObserve(
+    @NotNull public String triggerBuildsAndObserve(
         @Nullable String srvId,
         @Nullable String branchForTc,
-        @Nullable String suiteId,
+        @Nullable String suiteIdList,
         @Nullable Boolean top,
         @Nullable Boolean observe,
         @Nullable String ticketId,
@@ -86,10 +87,15 @@
 
         final ITeamcity teamcity = tcServerProvider.server(srvId, prov);
 
-        Build build = teamcity.triggerBuild(suiteId, branchForTc, false, top != null && top);
+        String[] suiteIds = Objects.requireNonNull(suiteIdList).split(",");
+
+        Build[] builds = new Build[suiteIds.length];
+
+        for (int i = 0; i < suiteIds.length; i++)
+            builds[i] = teamcity.triggerBuild(suiteIds[i], branchForTc, false, top != null && top);
 
         if (observe != null && observe)
-            jiraRes = observeJira(srvId, branchForTc, ticketId, teamcity, build, prov);
+            jiraRes = observeJira(srvId, branchForTc, ticketId, teamcity, prov, builds);
 
         return jiraRes;
     }
@@ -99,8 +105,8 @@
      * @param branchForTc Branch for TeamCity.
      * @param ticketId JIRA ticket number.
      * @param teamcity TeamCity.
-     * @param build Build.
      * @param prov Credentials.
+     * @param builds Builds.
      * @return Message with result.
      */
     private String observeJira(
@@ -108,8 +114,8 @@ private String observeJira(
         String branchForTc,
         @Nullable String ticketId,
         ITeamcity teamcity,
-        Build build,
-        ICredentialsProv prov
+        ICredentialsProv prov,
+        Build... builds
     ) {
         if (F.isEmpty(ticketId)) {
             try {
@@ -134,7 +140,7 @@ private String observeJira(
             }
         }
 
-        buildObserverProvider.get().observe(build, srvId, prov, "ignite-" + ticketId);
+        buildObserverProvider.get().observe(srvId, prov, "ignite-" + ticketId, builds);
 
         return "JIRA ticket IGNITE-" + ticketId + " will be notified after the tests are completed.";
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuild.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
similarity index 77%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuild.java
rename to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
index 63539fb..e86886d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuild.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
@@ -19,7 +19,6 @@
 
 import com.google.inject.Injector;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -44,9 +43,11 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import static com.google.common.base.Strings.isNullOrEmpty;
+
 @Path("build")
 @Produces(MediaType.APPLICATION_JSON)
-public class TriggerBuild {
+public class TriggerBuilds {
     /** Servlet Context. */
     @Context
     private ServletContext ctx;
@@ -57,10 +58,10 @@
 
     @GET
     @Path("trigger")
-    public SimpleResult triggerBuild(
+    public SimpleResult triggerBuilds(
         @Nullable @QueryParam("serverId") String srvId,
         @Nullable @QueryParam("branchName") String branchForTc,
-        @Nullable @QueryParam("suiteId") String suiteId,
+        @Nullable @QueryParam("suiteIdList") String suiteIdList,
         @Nullable @QueryParam("top") Boolean top,
         @Nullable @QueryParam("observe") Boolean observe,
         @Nullable @QueryParam("ticketId") String ticketId
@@ -71,14 +72,16 @@ public SimpleResult triggerBuild(
         if (!prov.hasAccess(srvId))
             throw ServiceUnauthorizedException.noCreds(srvId);
 
+        if (isNullOrEmpty(suiteIdList))
+            return new SimpleResult("Error: nothing to run.");
+
         String jiraRes = CtxListener.getInjector(ctx)
             .getInstance(TcBotTriggerAndSignOffService.class)
-            .triggerBuildAndObserve(srvId, branchForTc, suiteId, top, observe, ticketId, prov);
+            .triggerBuildsAndObserve(srvId, branchForTc, suiteIdList, top, observe, ticketId, prov);
 
         return new SimpleResult("Tests started." + (!jiraRes.isEmpty() ? "<br>" + jiraRes : ""));
     }
 
-
     @GET
     @Path("commentJira")
     public SimpleResult commentJira(
@@ -97,36 +100,6 @@ public SimpleResult commentJira(
             .commentJiraEx(srvId, branchForTc, suiteId, ticketId, prov);
     }
 
-    @GET
-    @Path("triggerBuilds")
-    public SimpleResult triggerBuilds(
-        @Nullable @QueryParam("serverId") String serverId,
-        @Nullable @QueryParam("branchName") String branchName,
-        @NotNull @QueryParam("suiteIdList") String suiteIdList,
-        @Nullable @QueryParam("top") Boolean top) {
-
-        final ICredentialsProv prov = ICredentialsProv.get(req);
-
-        if (!prov.hasAccess(serverId))
-            throw ServiceUnauthorizedException.noCreds(serverId);
-
-        List<String> strings = Arrays.asList(suiteIdList.split(","));
-        if (strings.isEmpty())
-            return new SimpleResult("Error: nothing to run");
-
-        final ITeamcity helper = CtxListener.getTcHelper(ctx).server(serverId, prov);
-
-        boolean queueToTop = top != null && top;
-
-        for (String suiteId : strings) {
-            System.out.println("Triggering [ " + suiteId + "," + branchName + "," + "top=" + queueToTop + "]");
-
-            helper.triggerBuild(suiteId, branchName, false, queueToTop);
-        }
-
-        return new SimpleResult("OK");
-    }
-
     @GET
     @Path("integrationUrls")
     public Set<ServerIntegrationLinks> getIntegrationUrls(@NotNull @QueryParam("serverIds") String srvIds) {
diff --git a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
index b61189b..5f23118 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
@@ -65,7 +65,6 @@ function showChainResultsWithSettings(result, settings) {
         res += showChainCurrentStatusData(server, settings);
     }
 
-
     setTimeout(initMoreInfo, 100);
 
     return res;
@@ -125,11 +124,13 @@ function showChainCurrentStatusData(server, settings) {
     if (suitesFailedList.length !== 0 && isDefinedAndFilled(server.serverId) && isDefinedAndFilled(server.branchName)) {
         mInfo += "Trigger failed " + cntFailed + " builds";
         mInfo += " <a href='javascript:void(0);' ";
-        mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + suitesFailedList + "\", \"" + server.branchName + "\", false)' ";
+        mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + suitesFailedList + "\", \"" +
+            server.branchName + "\", false, false)' ";
         mInfo += " title='trigger builds'>in queue</a> ";
 
         mInfo += " <a href='javascript:void(0);' ";
-        mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + suitesFailedList + "\", \"" + server.branchName + "\", true)' ";
+        mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + suitesFailedList + "\", \"" +
+            server.branchName + "\", true, false)' ";
         mInfo += " title='trigger builds'>on top</a><br>";
     }
 
@@ -171,7 +172,28 @@ function showChainCurrentStatusData(server, settings) {
 
     if (settings.isJiraAvailable()) {
         res += "<button onclick='commentJira(\"" + server.serverId + "\", \"IgniteTests24Java8_RunAll\", \""
-            + server.branchName + "\")'>Comment JIRA</button>";
+            + server.branchName + "\")'>Comment JIRA</button>&nbsp;&nbsp;";
+
+        var blockersList = "";
+
+        for (var i = 0; i < server.suites.length; i++) {
+            var suite = server.suites[i];
+
+            suite = suiteWithCriticalFailuresOnly(suite);
+
+            if (suite != null) {
+                if (blockersList.length !== 0)
+                    blockersList += ",";
+
+                blockersList += suite.suiteId;
+            }
+        }
+
+        res += "<button onclick='triggerBuilds(\"" + server.serverId + "\", \"" + blockersList + "\", \"" +
+            server.branchName + "\", false, false)'> Re-run possible blockers</button><br>";
+
+        res += "<button onclick='triggerBuilds(\"" + server.serverId + "\", \"" + blockersList + "\", \"" +
+            server.branchName + "\", false, true)'> Re-run possible blockers & Comment JIRA</button><br>";
     }
 
     if (isDefinedAndFilled(server.baseBranchForTc)) {
@@ -321,96 +343,137 @@ function notifyGit() {
     });
 }
 
-function triggerBuild(serverId, suiteId, branchName, top, observe, ticketId) {
+function triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId) {
     var queueAtTop = isDefinedAndFilled(top) && top;
+    var observeJira = isDefinedAndFilled(observe) && observe;
+    var suiteIdsNotExists = !isDefinedAndFilled(suiteIdList) || suiteIdList.length === 0;
+    var branchNotExists = !isDefinedAndFilled(branchName) || branchName.length === 0;
+    branchName = branchNotExists ? null : branchForTc(branchName);
+    ticketId = (isDefinedAndFilled(ticketId) && ticketId.length > 0) ? jiraTicketNumber(ticketId) : null;
 
-    $.ajax({
-        url: 'rest/build/trigger',
-        data: {
-            "serverId": serverId,
-            "suiteId": suiteId,
-            "branchName": branchName,
-            "top": queueAtTop,
-            "observe": observe,
-            "ticketId": ticketId
-        },
-        success: function(result) {
-            var dialog = $("#triggerDialog");
+    var triggerConfirm = $("#triggerConfirm");
 
-            dialog.html("Trigger builds at server: " + serverId + "<br>" +
-                " Suite: " + suiteId + "<br>Branch:" + branchName + "<br>Top: " + top +
-                "<br><br> Result: " + result.result);
-            dialog.dialog({
-                modal: true,
-                buttons: {
-                    "Ok": function() {
-                        $(this).dialog("close");
-                    }
-                }
-            });
+    if (suiteIdsNotExists || branchNotExists) {
+        triggerConfirm.html("No " + (suiteIdsNotExists ? "suites" +
+            (branchNotExists ? " and branch" : "") : "branch") + " to run!");
+        triggerConfirm.dialog({
+            modal: true,
+            buttons: {
+                "Ok" : closeDialog
+            }
+        });
 
-            loadData(); // should be defined by page
-        },
-        error: showErrInLoadStatus
-    });
-}
+        return;
+    }
 
-function triggerBuilds(serverId, suiteIdList, branchName, top) {
-    var res = "Trigger builds at server: " + serverId + "<br>" +
-        "Branch:" + branchName + "<br>Top: " + top + "<br>";
+    var suites = suiteIdList.split(',');
+    var fewSuites = suites.length > 1;
 
-    var partsOfStr = suiteIdList.split(',');
+    var message = "Trigger build" + (fewSuites ? "s" : "") + " at <b>server:</b> " + serverId + "<br>" +
+    "<b>Branch:</b> " + branchName + "<br><b>Top:</b> " + top + "<br>" +
+    "<b>Suite ID" + (fewSuites ? "s" : "") + ":</b> ";
 
-    for (var i = 0; i < partsOfStr.length; i++) {
-        var suite = partsOfStr[i];
-        res += "Suite ID: " + suite + "<br>";
-    }
-    var triggerConfirm = $("#triggerConfirm");
+    for (var i = 0; i < suites.length; i++)
+        message += suites[i] + "<br>";
 
-    triggerConfirm.html(res);
-
-    triggerConfirm.dialog({
-        modal: true,
-        buttons: {
-            "Run": function() {
-                $(this).dialog("close");
-
-                var queueAtTop = isDefinedAndFilled(top) && top
-                $.ajax({
-                    url: 'rest/build/triggerBuilds',
-                    data: {
-                        "serverId": serverId,
-                        "suiteIdList": suiteIdList,
-                        "branchName": branchName,
-                        "top": queueAtTop
-                    },
-                    success: function(result) {
-                        var dialog = $("#triggerDialog");
-
-                        dialog.html("Trigger builds at server: " + serverId + "<br>" +
-                            " Suites " + suiteIdList + "<br>Branch:" + branchName + "<br>Top: " + top +
-                            "<br><br> Result: " + result.result);
-                        dialog.dialog({
-                            modal: true,
-                            buttons: {
-                                "Ok": function() {
-                                    $(this).dialog("close");
-                                }
-                            }
-                        });
-                        loadData(); // should be defined by page
-                    },
-                    error: showErrInLoadStatus
-                });
+    if (fewSuites) {
+        triggerConfirm.html(message);
+        triggerConfirm.dialog({
+            modal: true,
+            buttons: {
+                "Run" : function () {
+                    $(this).dialog("close");
+                    sendGetRequest();
+                },
+                "Cancel": closeDialog
+            }
+        });
+    } else
+        sendGetRequest();
+
+    function sendGetRequest() {
+        $.ajax({
+            url: 'rest/build/trigger',
+            data: {
+                "serverId": serverId,
+                "suiteIdList": suiteIdList,
+                "branchName": branchName,
+                "top": queueAtTop,
+                "observe": observeJira,
+                "ticketId": ticketId
             },
-            Cancel: function() {
-                $(this).dialog("close");
+            success: successDialog,
+            error: showErrInLoadStatus
+        });
+    }
+
+    function successDialog(result) {
+        var triggerDialog = $("#triggerDialog");
+
+        triggerDialog.html(message + "<br><b>Result:</b> " + result.result);
+        triggerDialog.dialog({
+            modal: true,
+            buttons: {
+                "Ok": closeDialog
             }
-        }
-    });
+        });
+
+        loadData();
+    }
+
+    function closeDialog() {
+        $(this).dialog("close");
+    }
+}
+
+/**
+ * Converts PR number to branch for TeamCity.
+ *
+ * @param pr - Pull Request number.
+ * @returns {String} Branch for TeamCity.
+ */
+function branchForTc(pr) {
+    var regExpr = /(\d*)/i;
+
+    if (regExpr.exec(pr)[0] === pr)
+        return "pull/" + regExpr.exec(pr)[0] + "/head";
+
+    return pr;
+}
+
+/**
+ * Converts JIRA ticket full name to the tickets number.
+ *
+ * @param ticket - JIRA ticket.
+ * @returns {string} JIRA ticket number.
+ */
+function jiraTicketNumber(ticket) {
+    var regExpr = /(ignite-)?(\d*)/i;
+
+    return regExpr.exec(ticket)[2];
 }
 
 function commentJira(serverId, suiteId, branchName, ticketId) {
+    var branchNotExists = !isDefinedAndFilled(branchName) || branchName.length === 0;
+    branchName = branchNotExists ? null : branchForTc(branchName);
+    ticketId = (isDefinedAndFilled(ticketId) && ticketId.length > 0) ? jiraTicketNumber(ticketId) : null;
+
+    if (branchNotExists) {
+        var triggerConfirm = $("#triggerConfirm");
+
+        triggerConfirm.html("No branch to run!");
+        triggerConfirm.dialog({
+            modal: true,
+            buttons: {
+                "Ok" : function () {
+                    $(this).dialog("close");
+                }
+            }
+        });
+
+        return;
+    }
+
     $("#notifyJira").html("<img src='https://www.wallies.com/filebin/images/loading_apple.gif' width=20px height=20px>" +
         " Please wait. First action for PR run-all data may require significant time.");
 
@@ -540,11 +603,13 @@ function showSuiteData(suite, settings) {
     if (isDefinedAndFilled(suite.serverId) && isDefinedAndFilled(suite.suiteId) && isDefinedAndFilled(suite.branchName)) {
         mInfo += " Trigger build: ";
         mInfo += "<a href='javascript:void(0);' ";
-        mInfo += " onClick='triggerBuild(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName + "\", false)' ";
+        mInfo += " onClick='triggerBuilds(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName
+            + "\", false, false)' ";
         mInfo += " title='trigger build' >queue</a> ";
 
         mInfo += "<a href='javascript:void(0);' ";
-        mInfo += " onClick='triggerBuild(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName + "\", true)' ";
+        mInfo += " onClick='triggerBuilds(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName
+            + "\", true, false)' ";
         mInfo += " title='trigger build at top of queue'>top</a><br>";
     }
 
diff --git a/ignite-tc-helper-web/src/main/webapp/prs.html b/ignite-tc-helper-web/src/main/webapp/prs.html
index 0bf9b07..d6cad13 100644
--- a/ignite-tc-helper-web/src/main/webapp/prs.html
+++ b/ignite-tc-helper-web/src/main/webapp/prs.html
@@ -212,10 +212,10 @@
 
             var srvId = fields.namedItem("serverId").value;
             var suiteId = fields.namedItem("suiteId").value;
-            var branchName = branchForTc(fields.namedItem("branchForTc").value);
-            var ticketId = jiraTicketNumber(fields.namedItem("ticketId").value);
+            var branchName = fields.namedItem("branchForTc").value;
+            var ticketId = fields.namedItem("ticketId").value;
 
-            triggerBuild(srvId, suiteId, branchName, false, trigCase !== "tests", ticketId)
+            triggerBuilds(srvId, suiteId, branchName, false, trigCase !== "tests", ticketId)
         }
 
         /**
@@ -226,39 +226,12 @@
 
             var srvId = fields.namedItem("serverId").value;
             var suiteId = fields.namedItem("suiteId").value;
-            var branchName = branchForTc(fields.namedItem("branchForTc").value);
-            var ticketId = jiraTicketNumber(fields.namedItem("ticketId").value);
+            var branchName = fields.namedItem("branchForTc").value;
+            var ticketId = fields.namedItem("ticketId").value;
 
             commentJira(srvId, suiteId, branchName, ticketId)
         }
 
-        /**
-         * Converts PR number to branch for TeamCity.
-         *
-         * @param pr - Pull Request number.
-         * @returns {String} Branch for TeamCity.
-         */
-        function branchForTc(pr) {
-            var regExpr = /(\d*)/i;
-
-            if (regExpr.exec(pr)[0] === pr)
-                return "pull/" + regExpr.exec(pr)[0] + "/head";
-
-            return pr;
-        }
-
-        /**
-         * Converts JIRA ticket full name to the tickets number.
-         *
-         * @param ticket - JIRA ticket.
-         * @returns {string} JIRA ticket number.
-         */
-        function jiraTicketNumber(ticket) {
-            var regExpr = /(ignite-)?(\d*)/i;
-
-            return regExpr.exec(ticket)[2];
-        }
-
         function showFormAndSuitesForPrCheck(result) {
             var res = "";
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services