You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/10/10 17:30:46 UTC

[ignite-teamcity-bot] branch pr-check-stages-in-ui updated: Steps to get visa adding to UI: Trigger build stage and buttons was supported

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch pr-check-stages-in-ui
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/pr-check-stages-in-ui by this push:
     new 0a6bc1a  Steps to get visa adding to UI: Trigger build stage and buttons was supported
0a6bc1a is described below

commit 0a6bc1aee5d203c5f22059682ff4d865817c948c
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Oct 10 20:30:45 2018 +0300

    Steps to get visa adding to UI: Trigger build stage and buttons was supported
---
 .../ci/tcbot/visa/ContributionCheckStatus.java     |  6 +++-
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  | 39 +++++++++++++++++-----
 .../apache/ignite/ci/tcmodel/hist/BuildRef.java    | 12 +++++++
 .../ci/teamcity/ignited/ITeamcityIgnited.java      |  2 +-
 .../ignite/ci/web/rest/visa/TcBotVisaService.java  | 17 ----------
 ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js | 31 ++++++++++++-----
 6 files changed, 72 insertions(+), 35 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
index 538fcc7..55b0c3f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
@@ -22,5 +22,9 @@ package org.apache.ignite.ci.tcbot.visa;
 @SuppressWarnings("PublicField") public class ContributionCheckStatus {
     public int queuedBuilds;
     public int runningBuilds;
-    public String finishedRunAllForBranch;
+    /** Branch with finished run all results, null if run all is running or in case there was no run alls at all. */
+    public String branchWithFinishedRunAll;
+
+    /** Resolved run all branch: Some branch probably with finished or queued builds in in, or default pull/nnnn/head. */
+    public String resolvedBranch;
 }
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 3a4365a..b071fd6 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
@@ -19,9 +19,11 @@ package org.apache.ignite.ci.tcbot.visa;
 
 import com.google.common.base.Strings;
 import com.google.inject.Provider;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import javax.ws.rs.QueryParam;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
@@ -190,8 +192,7 @@ public class TcBotTriggerAndSignOffService {
     }
 
     public List<ContributionToCheck> getContributionsToCheck(String srvId) {
-        IGitHubConnIgnited gitHubConn = gitHubConnIgnitedProvider.server(srvId);
-        List<PullRequest> requests = gitHubConn.getPullRequests();
+        List<PullRequest> requests = gitHubConnIgnitedProvider.server(srvId).getPullRequests();
         if (requests == null)
             return null;
 
@@ -213,21 +214,23 @@ public class TcBotTriggerAndSignOffService {
         }).collect(Collectors.toList());
     }
 
-    @Nullable public String findBranchForPr(String srvId, ICredentialsProv prov, String suiteId, String prId) {
+    @Nonnull private List<BuildRef> findRunAllsForPr(String srvId, ICredentialsProv prov, String suiteId, String prId) {
         ITeamcityIgnited srv = teamcityIgnitedProvider.server(srvId, prov);
 
         String branchName = branchForTcA(prId);
         List<BuildRef> buildHist = srv.getBuildHistory(suiteId, branchName);
 
         if (!buildHist.isEmpty())
-            return buildHist.get(0).branchName();
+            return buildHist;
 
+
+        //todo multibranch requestst
         buildHist = srv.getBuildHistory(suiteId, branchForTcB(prId));
 
         if (!buildHist.isEmpty())
-            return buildHist.get(0).branchName();
+            return buildHist;
 
-        return null;
+        return Collections.emptyList();
     }
 
     String branchForTcA(String prId) {
@@ -244,10 +247,30 @@ public class TcBotTriggerAndSignOffService {
      * @param suiteId Suite id.
      * @param prId Pr id.
      */
-    public ContributionCheckStatus contributionStatus(String srvId, ICredentialsProv prov, String suiteId, String prId) {
+    public ContributionCheckStatus contributionStatus(String srvId, ICredentialsProv prov, String suiteId,
+        String prId) {
         ContributionCheckStatus status = new ContributionCheckStatus();
 
-        status.finishedRunAllForBranch = findBranchForPr(srvId, prov, suiteId, prId);
+        List<BuildRef> allRunAlls = findRunAllsForPr(srvId, prov, suiteId, prId);
+
+        boolean finishedRunAllPresent = allRunAlls.stream().anyMatch(BuildRef::isFinished);
+
+        status.branchWithFinishedRunAll = finishedRunAllPresent ? allRunAlls.get(0).branchName : null;
+
+        if (status.branchWithFinishedRunAll == null) {
+            if (!allRunAlls.isEmpty())
+                status.resolvedBranch = allRunAlls.get(0).branchName;
+            else
+                status.resolvedBranch = branchForTcA(prId);
+        }
+        else
+            //todo take into account running/queued
+            status.resolvedBranch = status.branchWithFinishedRunAll;
+
+
+        //todo take into accounts not only run alls:
+        status.queuedBuilds = (int)allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isQueued).count();
+        status.runningBuilds = (int)allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isRunning).count();
 
         return status;
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/hist/BuildRef.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/hist/BuildRef.java
index 6d35959..10d312d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/hist/BuildRef.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/hist/BuildRef.java
@@ -170,4 +170,16 @@ public class BuildRef extends AbstractRef {
     public String state() {
         return state;
     }
+
+    public boolean isFinished() {
+        return STATE_FINISHED.equals(state());
+    }
+
+    public boolean isQueued() {
+        return STATE_QUEUED.equals(state());
+    }
+
+    public boolean isRunning() {
+        return STATE_RUNNING.equals(state());
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
index 67ac302..4bdd2cf 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
@@ -27,7 +27,7 @@ public interface ITeamcityIgnited {
     /**
      * @param buildTypeId
      * @param branchName
-     * @return list of builds in history
+     * @return list of builds in history, includes all statuses: queued, running, etc
      */
     public List<BuildRef> getBuildHistory(
         @Nullable String buildTypeId,
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
index a78ee90..5bc1cbf 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
@@ -73,21 +73,4 @@ public class TcBotVisaService {
 
         return instance.contributionStatus(srvId, prov, suiteId, prId);
     }
-
-    @Deprecated
-    @GET
-    @Path("findBranchForPr")
-    public SimpleResult findBranchForPr(@Nullable @QueryParam("serverId") String srvId,
-        @Nonnull @QueryParam("suiteId") String suiteId,
-        @QueryParam("prId") String prId) {
-        ICredentialsProv prov = ICredentialsProv.get(req);
-        if (!prov.hasAccess(srvId))
-            throw ServiceUnauthorizedException.noCreds(srvId);
-
-
-        TcBotTriggerAndSignOffService instance = CtxListener.getInjector(ctx)
-            .getInstance(TcBotTriggerAndSignOffService.class);
-
-        return new SimpleResult(instance.findBranchForPr(srvId, prov, suiteId, prId));
-    }
 }
diff --git a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
index 06e0f4d..62d142e 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
@@ -151,7 +151,7 @@ function formatContributionDetails(row, srvId, suiteId) {
         "                <th><span class='visaStage' id='visaStage_1_" + prId + "'></span></th>\n" +
         "                <th><span class='visaStage' id='visaStage_2_" + prId + "'></span></th>\n" +
         "                <th><span class='visaStage' id='visaStage_3_" + prId + "'></span></th>\n" +
-        "                <th><span class='visaStage' id='visaStage_4_" + prId + "'></span></th>\n" +
+        //  "                <th><span class='visaStage' id='visaStage_4_" + prId + "'></span></th>\n" +
         //todo validityCheck;"                <th><span class='visaStage' id='visaStage_5_" + prId + "'></span></th>\n" +
         "            </tr>\n";
 
@@ -160,17 +160,18 @@ function formatContributionDetails(row, srvId, suiteId) {
         "                <td>PR with issue name</td>\n" +
         "                <td>Build is triggered</td>\n" +
         "                <td>Results ready</td>\n" +
-        "                <td>JIRA comment</td>\n" +
+        // "                <td>JIRA comment</td>\n" +
         //todo  "                <td>Validity check</td>\n" +
         "            </tr>\n";
 
     //action for stage
     res += "        <tr>\n" +
-        "            <td>Edit PR: "+"<a href='" + row.prHtmlUrl + "'>#" + row.prNumber + "</a>"+"</td>\n" +
+        "            <td>Edit PR: " + "<a href='" + row.prHtmlUrl + "'>#" + row.prNumber + "</a>" + "</td>\n" +
         "               <td id='triggerBuildFor" + prId + "'>Loading builds...</td>\n" +
         "               <td id='showResultFor" + prId + "'>Loading builds...</td>\n" +
         "        </tr>" +
         "    </table>";
+
     res += "</div>";
 
 
@@ -180,21 +181,35 @@ function formatContributionDetails(row, srvId, suiteId) {
             "&prId=" + prId,
         success:
             function (result) {
-                let branchName = result.finishedRunAllForBranch;
+                let finishedBranch = result.branchWithFinishedRunAll;
                 let tdForPr = $('#showResultFor' + prId);
-                let buildIsCompleted = isDefinedAndFilled(branchName);
+                let buildIsCompleted = isDefinedAndFilled(finishedBranch);
                 if (buildIsCompleted) {
-                    tdForPr.html("<a id='link_" + prId + "' href='" + prShowHref(srvId, suiteId, branchName) +  "'>" +
-                        "<button id='show_" + prId + "'>Show " + branchName + " report</button></a>");
+                    tdForPr.html("<a id='link_" + prId + "' href='" + prShowHref(srvId, suiteId, finishedBranch) +  "'>" +
+                        "<button id='show_" + prId + "'>Show " + finishedBranch + " report</button></a>");
                 } else {
                     tdForPr.html("No builds, please trigger " + suiteId);
                 }
 
+                let hasQueued = result.queuedBuilds > 0 || result.runningBuilds > 0;
 
                 let jiraIssue = isDefinedAndFilled(row.jiraIssueId);
                 showStageResult(1, prId, jiraIssue, !jiraIssue);
-                showStageResult(2, prId, buildIsCompleted, false);
+                let noNeedToTrigger = hasQueued || buildIsCompleted;
+                showStageResult(2, prId, noNeedToTrigger, false);
                 showStageResult(3, prId, buildIsCompleted, false);
+
+                if(isDefinedAndFilled(result.resolvedBranch)) {
+                    var trig ="";
+                    trig+= "<button onClick='triggerBuilds(\"" + srvId + "\", \"" + suiteId + "\", \"" +
+                        result.resolvedBranch + "\", false, false)'" ;
+
+                    if(noNeedToTrigger) {
+                        trig+=" class='disabledbtn'";
+                    }
+                    trig+=">Trigger build</button>";
+                    $('#triggerBuildFor' + prId).html(trig);
+                }
             }
     });
     return res;