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 <dpav...@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;