This is an automated email from the ASF dual-hosted git repository. dpavlov pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
commit 8b56e5ed8578ade2855e985f5db56b1e0aaa3615 Author: zzzadruga <[email protected]> AuthorDate: Fri Dec 7 15:27:06 2018 +0300 IGNITE-10203 Parent suite is used for JIRA comment: Support for alternative configurations for PR testing. - Fixes #90. Signed-off-by: Dmitriy Pavlov <[email protected]> --- .../main/java/org/apache/ignite/ci/TcHelper.java | 3 +- .../apache/ignite/ci/observer/BuildObserver.java | 5 +- .../org/apache/ignite/ci/observer/BuildsInfo.java | 7 ++- .../tcbot/visa/TcBotTriggerAndSignOffService.java | 37 +++++++++---- .../ignited/buildtype/BuildTypeCompacted.java | 28 +++++----- .../teamcity/ignited/buildtype/BuildTypeDao.java | 5 +- .../ignited/buildtype/BuildTypeRefCompacted.java | 29 +++++++--- .../apache/ignite/ci/web/rest/TriggerBuilds.java | 3 +- .../src/main/webapp/js/common-1.6.js | 19 ++++++- ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js | 11 +++- .../src/main/webapp/js/testfails-2.1.js | 62 +++++++++++----------- .../ignited/IgnitedTcInMemoryIntegrationTest.java | 4 +- 12 files changed, 137 insertions(+), 76 deletions(-) diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java index eb66f30..3ec2840 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java @@ -208,7 +208,8 @@ public class TcHelper implements ITcHelper { * @param webUrl Build URL. * @return Comment, which should be sent to the JIRA ticket. */ - private String generateJiraComment(List<SuiteCurrentStatus> suites, String webUrl, String buildTypeId, ITeamcityIgnited tcIgnited) { + private String generateJiraComment(List<SuiteCurrentStatus> suites, String webUrl, String buildTypeId, + ITeamcityIgnited tcIgnited) { BuildTypeRefCompacted bt = tcIgnited.getBuildTypeRef(buildTypeId); String suiteName = (bt != null ? bt.name(compactor) : buildTypeId); 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 4918c32..3de27fa 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 @@ -92,8 +92,9 @@ public class BuildObserver { * @param branchForTc Branch for TC. * @param ticket JIRA ticket name. */ - public void observe(String srvId, ICredentialsProv prov, String ticket, String branchForTc, Build... builds) { - BuildsInfo buildsInfo = new BuildsInfo(srvId, prov, ticket, branchForTc, builds); + public void observe(String srvId, ICredentialsProv prov, String ticket, String branchForTc, String parentSuiteId, + Build... builds) { + BuildsInfo buildsInfo = new BuildsInfo(srvId, prov, ticket, branchForTc, parentSuiteId, builds); observerTask.addInfo(buildsInfo); } 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 index 89dffc3..ad1b548 100644 --- 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 @@ -17,6 +17,7 @@ package org.apache.ignite.ci.observer; +import com.google.common.base.Strings; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -86,13 +87,15 @@ public class BuildsInfo { * @param ticket Ticket. * @param builds Builds. */ - public BuildsInfo(String srvId, ICredentialsProv prov, String ticket, String branchForTc, Build... builds) { + public BuildsInfo(String srvId, ICredentialsProv prov, String ticket, String branchForTc, String parentSuiteId, + Build... builds) { this.userName = prov.getUser(srvId); this.date = Calendar.getInstance().getTime(); this.srvId = srvId; this.ticket = ticket; this.branchForTc = branchForTc; - this.buildTypeId = builds.length == 1 ? builds[0].buildTypeId : "IgniteTests24Java8_RunAll"; + this.buildTypeId = Strings.isNullOrEmpty(parentSuiteId) ? + (builds.length == 1 ? builds[0].buildTypeId : "IgniteTests24Java8_RunAll") : parentSuiteId; for (Build build : builds) this.builds.add(build.getId()); 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 bbec0a3..910079f 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 @@ -32,8 +32,10 @@ import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.inject.Inject; import javax.ws.rs.QueryParam; +import org.apache.ignite.ci.HelperConfig; import org.apache.ignite.ci.ITcHelper; import org.apache.ignite.ci.IAnalyticsEnabledTeamcity; +import org.apache.ignite.ci.ITeamcity; import org.apache.ignite.ci.github.GitHubUser; import org.apache.ignite.ci.github.PullRequest; import org.apache.ignite.ci.github.ignited.IGitHubConnIgnitedProvider; @@ -50,6 +52,7 @@ import org.apache.ignite.ci.teamcity.ignited.IStringCompactor; import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited; import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider; import org.apache.ignite.ci.teamcity.ignited.SyncMode; +import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeCompacted; import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted; import org.apache.ignite.ci.web.model.ContributionKey; import org.apache.ignite.ci.web.model.VisaRequest; @@ -66,6 +69,7 @@ import static org.apache.ignite.ci.observer.BuildsInfo.CANCELLED_STATUS; import static org.apache.ignite.ci.observer.BuildsInfo.FINISHED_STATUS; import static org.apache.ignite.ci.observer.BuildsInfo.RUNNING_STATUS; import static org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedImpl.DEFAULT_PROJECT_ID; +import static org.apache.ignite.ci.web.rest.parms.FullQueryParams.DEFAULT_TRACKED_BRANCH_NAME; /** * Provides method for TC Bot Visa obtaining @@ -190,6 +194,7 @@ public class TcBotTriggerAndSignOffService { @NotNull public String triggerBuildsAndObserve( @Nullable String srvId, @Nullable String branchForTc, + @Nonnull String parentSuiteId, @Nonnull String suiteIdList, @Nullable Boolean top, @Nullable Boolean observe, @@ -207,7 +212,7 @@ public class TcBotTriggerAndSignOffService { builds[i] = teamcity.triggerBuild(suiteIds[i], branchForTc, false, top != null && top); if (observe != null && observe) - jiraRes = observeJira(srvId, branchForTc, ticketId, prov, builds); + jiraRes = observeJira(srvId, branchForTc, ticketId, prov, parentSuiteId, builds); return jiraRes; } @@ -225,6 +230,7 @@ public class TcBotTriggerAndSignOffService { String branchForTc, @Nullable String ticketFullName, ICredentialsProv prov, + String parentSuiteId, Build... builds ) { if (F.isEmpty(ticketFullName)) { @@ -253,7 +259,7 @@ public class TcBotTriggerAndSignOffService { ticketFullName = ticketFullName.toUpperCase().startsWith("IGNITE-") ? ticketFullName : "IGNITE-" + ticketFullName; } - buildObserverProvider.get().observe(srvId, prov, ticketFullName, branchForTc, builds); + buildObserverProvider.get().observe(srvId, prov, ticketFullName, branchForTc, parentSuiteId, builds); if (!tcHelper.isServerAuthorized()) return "Ask server administrator to authorize the Bot to enable JIRA notifications."; @@ -303,9 +309,7 @@ public class TcBotTriggerAndSignOffService { } if (!Strings.isNullOrEmpty(ticketFullName)) { - BuildsInfo buildsInfo = new BuildsInfo(srvId, prov, ticketFullName, branchForTc); - - buildsInfo.buildTypeId = suiteId; + BuildsInfo buildsInfo = new BuildsInfo(srvId, prov, ticketFullName, branchForTc, suiteId); VisaRequest lastVisaReq = visasHistoryStorage.getLastVisaRequest(buildsInfo.getContributionKey()); @@ -394,14 +398,25 @@ public class TcBotTriggerAndSignOffService { ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(srvId, prov); - List<String> compositeBuildTypes = teamcity - .getCompositeBuildTypesIdsSortedByBuildNumberCounter(DEFAULT_PROJECT_ID); + StringBuilder buildTypeId = new StringBuilder(); + + HelperConfig.getTrackedBranches().get(DEFAULT_TRACKED_BRANCH_NAME) + .ifPresent(b -> b.getChainsStream().filter(c -> c.branchForRest.equals(ITeamcity.DEFAULT)) + .findFirst().ifPresent(ch -> buildTypeId.append(ch.suiteId))); + + BuildTypeCompacted buildType = buildTypeId.length() > 0 ? teamcity.getBuildType(buildTypeId.toString()) : null; + + String projectId = Objects.nonNull(buildType) ? + compactor.getStringFromId(buildType.projectId()) : DEFAULT_PROJECT_ID; + + List<String> compositeBuildTypeIds = teamcity + .getCompositeBuildTypesIdsSortedByBuildNumberCounter(projectId); - for (String buildType : compositeBuildTypes) { - List<BuildRefCompacted> forTests = findBuildsForPr(buildType, prId, teamcity); + for (String btId : compositeBuildTypeIds) { + List<BuildRefCompacted> forTests = findBuildsForPr(btId, prId, teamcity); - statuses.add(forTests.isEmpty() ? new ContributionCheckStatus(buildType, branchForTcA(prId)) : - contributionStatus(srvId, buildType, forTests, teamcity, prId)); + statuses.add(forTests.isEmpty() ? new ContributionCheckStatus(btId, branchForTcA(prId)) : + contributionStatus(srvId, btId, forTests, teamcity, prId)); } return statuses; diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java index 1802f01..92e2d1f 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Objects; import org.apache.ignite.ci.analysis.IVersionedEntity; import org.apache.ignite.ci.db.Persisted; -import org.apache.ignite.ci.tcmodel.conf.BuildType; import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull; import org.apache.ignite.ci.tcmodel.conf.bt.Parameters; import org.apache.ignite.ci.tcmodel.conf.bt.SnapshotDependencies; @@ -87,16 +86,31 @@ public class BuildTypeCompacted extends BuildTypeRefCompacted implements IVersio this.buildNumberCounter = buildNumberCounter; } + /** + * @param compactor Compactor. + */ public BuildTypeFull toBuildType(IStringCompactor compactor) { + return toBuildType(compactor, null); + } + + /** + * @param compactor Compactor. + * @param host Normalized Host address, ends with '/'. + */ + public BuildTypeFull toBuildType(IStringCompactor compactor, @Nullable String host) { BuildTypeFull res = new BuildTypeFull(); - fillBuildTypeRefFields(compactor, res); + super.fillBuildTypeRefFields(compactor, res, host); fillBuildTypeFields(compactor, res); return res; } + /** + * @param compactor Compactor. + * @param res Response. + */ protected void fillBuildTypeFields(IStringCompactor compactor, BuildTypeFull res) { res.setParameters(parameters == null ? new Parameters() : parameters.toParameters(compactor)); res.setSettings(settings == null ? new Parameters() : settings.toParameters(compactor)); @@ -114,16 +128,6 @@ public class BuildTypeCompacted extends BuildTypeRefCompacted implements IVersio res.setSnapshotDependencies(new SnapshotDependencies(snDpList)); } - protected void fillBuildTypeRefFields(IStringCompactor compactor, BuildType res) { - String id = id(compactor); - res.setId(id); - res.setName(compactor.getStringFromId(super.name())); - res.setProjectId(compactor.getStringFromId(super.projectId())); - res.setProjectName(compactor.getStringFromId(super.projectName())); - res.href = getHrefForId(id); - res.setWebUrl(getWebUrlForId(id)); - } - public ParametersCompacted settings() { return settings == null ? new ParametersCompacted() : settings; } diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java index 2a12d44..1772370 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java @@ -19,7 +19,6 @@ package org.apache.ignite.ci.teamcity.ignited.buildtype; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -160,9 +159,7 @@ public class BuildTypeDao { Comparator<BuildTypeCompacted> comp = Comparator.comparingInt(BuildTypeCompacted::buildNumberCounter); - res.sort(comp); - - Collections.reverse(res); + res.sort(comp.reversed()); return res; } diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java index 185bddc..05dbf82 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java @@ -23,6 +23,7 @@ import org.apache.ignite.ci.db.Persisted; import org.apache.ignite.ci.tcmodel.conf.BuildType; import org.apache.ignite.ci.teamcity.ignited.IStringCompactor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; @Persisted public class BuildTypeRefCompacted { @@ -119,23 +120,38 @@ public class BuildTypeRefCompacted { /** * @param compactor Compacter. + * @param host Normalized Host address, ends with '/'. */ - public BuildType toBuildTypeRef(IStringCompactor compactor) { + public BuildType toBuildTypeRef(IStringCompactor compactor, @Nullable String host) { BuildType res = new BuildType(); - fillBuildTypeRefFields(compactor, res); + fillBuildTypeRefFields(compactor, res, host); return res; } - protected void fillBuildTypeRefFields(IStringCompactor compactor, BuildType res) { + /** + * @param compactor Compacter. + */ + public BuildType toBuildTypeRef(IStringCompactor compactor) { + return toBuildTypeRef(compactor, null); + } + + /** + * @param compactor Compactor. + * @param res Response. + * @param host Normalized Host address, ends with '/'. + */ + protected void fillBuildTypeRefFields(IStringCompactor compactor, BuildType res, @Nullable String host) { String id = id(compactor); res.setId(id); res.setName(compactor.getStringFromId(name)); res.setProjectId(compactor.getStringFromId(projectId)); res.setProjectName(compactor.getStringFromId(projectName)); res.href = getHrefForId(id); - res.setWebUrl(getWebUrlForId(id)); + + if (Objects.nonNull(host)) + res.setWebUrl(getWebUrlForId(host, id)); } /** @@ -147,11 +163,12 @@ public class BuildTypeRefCompacted { } /** + * @param host Normalized Host address, ends with '/'. * @param buildTypeId BuildType id. * @return URL to BuildType on Teamcity. */ - @NotNull protected static String getWebUrlForId(String buildTypeId) { - return "http://ci.ignite.apache.org/viewType.html?buildTypeId=" + buildTypeId; + @NotNull protected static String getWebUrlForId(String host, String buildTypeId) { + return host + "viewType.html?buildTypeId=" + buildTypeId; } /** {@inheritDoc} */ diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java index 142885a..f983758 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java @@ -62,6 +62,7 @@ public class TriggerBuilds { public SimpleResult triggerBuilds( @Nullable @QueryParam("serverId") String srvId, @Nullable @QueryParam("branchName") String branchForTc, + @Nonnull @QueryParam("parentSuiteId") String parentSuiteId, @Nonnull @QueryParam("suiteIdList") String suiteIdList, @Nullable @QueryParam("top") Boolean top, @Nullable @QueryParam("observe") Boolean observe, @@ -78,7 +79,7 @@ public class TriggerBuilds { String jiraRes = CtxListener.getInjector(ctx) .getInstance(TcBotTriggerAndSignOffService.class) - .triggerBuildsAndObserve(srvId, branchForTc, suiteIdList, top, observe, ticketId, prov); + .triggerBuildsAndObserve(srvId, branchForTc, parentSuiteId, suiteIdList, top, observe, ticketId, prov); return new SimpleResult("Tests started." + (!jiraRes.isEmpty() ? "<br>" + jiraRes : "")); } diff --git a/ignite-tc-helper-web/src/main/webapp/js/common-1.6.js b/ignite-tc-helper-web/src/main/webapp/js/common-1.6.js index 97149be..b94f4df 100644 --- a/ignite-tc-helper-web/src/main/webapp/js/common-1.6.js +++ b/ignite-tc-helper-web/src/main/webapp/js/common-1.6.js @@ -5,9 +5,23 @@ function isDefinedAndFilled(val) { return typeof val !== 'undefined' && val != null } -function findGetParameter(parameterName) { - var result = null, +/** + * Function return URL parameter from webUrl (if is defined and filled) or from current location of the document. + * + * @returns {string | null} Search parameter or null. + * @param {String} parameterName - Search parameter name. + * @param {String | null} webUrl - URL. + */ +function findGetParameter(parameterName, webUrl) { + if (isDefinedAndFilled(webUrl)) { + let url = new URL(webUrl); + + return url.searchParams.get(parameterName); + } + + let result = null, tmp = []; + location.search .substr(1) .split("&") @@ -15,6 +29,7 @@ function findGetParameter(parameterName) { tmp = item.split("="); if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); }); + return result; } 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 8833ba2..ada8a87 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 @@ -356,6 +356,13 @@ function repaintLater(srvId, suiteId) { function showContributionStatus(status, prId, row, srvId, suiteId) { let tdForPr = $('#showResultFor' + prId); + + if (!isDefinedAndFilled(status)) { + console.log("Status for " + prId + " is undefined. Wait for the Bot to load the suite list."); + + return; + } + let buildIsCompleted = isDefinedAndFilled(status.branchWithFinishedSuite); let hasJiraIssue = isDefinedAndFilled(row.jiraIssueId); let hasQueued = status.queuedBuilds > 0 || status.runningBuilds > 0; @@ -383,8 +390,8 @@ function showContributionStatus(status, prId, row, srvId, suiteId) { let jiraBtn = "<button onclick='" + "commentJira(" + "\"" + srvId + "\", " + - "\"" + suiteId + "\", " + "\"" + finishedBranch + "\", " + + "\"" + suiteId + "\", " + "\"" + row.jiraIssueId + "\"" + "); " + replaintCall + @@ -433,6 +440,7 @@ function showContributionStatus(status, prId, row, srvId, suiteId) { // triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId) defined in test fails let triggerBuildsCall = "triggerBuilds(" + "\"" + srvId + "\", " + + "null, " + "\"" + suiteId + "\", " + "\"" + status.resolvedBranch + "\"," + " false," + @@ -449,6 +457,7 @@ function showContributionStatus(status, prId, row, srvId, suiteId) { // triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId) defined in test fails let trigObserveCall = "triggerBuilds(" + "\"" + srvId + "\", " + + "null, " + "\"" + suiteId + "\", " + "\"" + status.resolvedBranch + "\"," + " false," + 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 10b0189..21c5890 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 @@ -108,18 +108,15 @@ function showChainCurrentStatusData(server, settings) { res += "</td></tr>"; } - let suiteName; + let parentSuitId; - if (isDefinedAndFilled(findGetParameter("suiteId"))) { - suiteName = findGetParameter("suiteId"); - } else if (isDefinedAndFilled(server)) { - let url = new URL(server.webToHist); + if (isDefinedAndFilled(findGetParameter("suiteId"))) + parentSuitId = findGetParameter("suiteId"); + else if (isDefinedAndFilled(server)) + parentSuitId = findGetParameter("buildTypeId", server.webToHist); - suiteName = url.searchParams.get("buildTypeId"); - } - - if (isDefinedAndFilled(suiteName)) { - res += "<tr><td><b> Suite: </b></td><td>[" + suiteName + "] "; + if (isDefinedAndFilled(parentSuitId)) { + res += "<tr><td><b> Suite: </b></td><td>[" + parentSuitId + "] "; res += " <a href='" + server.webToHist + "'>[TC history]</a>"; res += "</td></tr>"; } @@ -165,13 +162,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, false)' "; + mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + parentSuitId + "\", " + + "\"" + 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, false)' "; + mInfo += " onClick='triggerBuilds(\"" + server.serverId + "\", \"" + parentSuitId + "\", " + + "\"" + suitesFailedList + "\", \"" + server.branchName + "\", true, false)' "; mInfo += " title='trigger builds'>on top</a><br>"; } @@ -213,11 +210,9 @@ function showChainCurrentStatusData(server, settings) { // res += "<button onclick='notifyGit()'>Update PR status</button>"; // } - var suiteId = findGetParameter("suiteId"); - if (settings.isJiraAvailable()) { - res += "<button onclick='commentJira(\"" + server.serverId + "\", \"" + suiteId + "\", \"" - + server.branchName + "\")'>Comment JIRA</button> "; + res += "<button onclick='commentJira(\"" + server.serverId + "\", \"" + server.branchName + "\", \"" + + parentSuitId + "\")'>Comment JIRA</button> "; var blockersList = ""; @@ -234,11 +229,12 @@ function showChainCurrentStatusData(server, settings) { } } - res += "<button onclick='triggerBuilds(\"" + server.serverId + "\", \"" + blockersList + "\", \"" + - server.branchName + "\", false, false)'> Re-run possible blockers</button><br>"; + res += "<button onclick='triggerBuilds(\"" + server.serverId + "\", \"" + parentSuitId + "\", \"" + + 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>"; + res += "<button onclick='triggerBuilds(\"" + server.serverId + "\", \"" + parentSuitId + "\", \"" + + blockersList + "\", \"" + server.branchName + "\", false, true)'> " + + "Re-run possible blockers & Comment JIRA</button><br>"; } if (isDefinedAndFilled(server.baseBranchForTc)) { @@ -388,7 +384,7 @@ function notifyGit() { }); } -function triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId) { +function triggerBuilds(serverId, parentSuiteId, suiteIdList, branchName, top, observe, ticketId) { var queueAtTop = isDefinedAndFilled(top) && top; var observeJira = isDefinedAndFilled(observe) && observe; var suiteIdsNotExists = !isDefinedAndFilled(suiteIdList) || suiteIdList.length === 0; @@ -412,6 +408,7 @@ function triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId } var suites = suiteIdList.split(','); + var parentSuite = isDefinedAndFilled(parentSuiteId) ? parentSuiteId : suites[0]; var fewSuites = suites.length > 1; var message = "Trigger build" + (fewSuites ? "s" : "") + " at <b>server:</b> " + serverId + "<br>" + @@ -441,8 +438,9 @@ function triggerBuilds(serverId, suiteIdList, branchName, top, observe, ticketId url: 'rest/build/trigger', data: { "serverId": serverId, - "suiteIdList": suiteIdList, "branchName": branchName, + "parentSuiteId" : parentSuite, + "suiteIdList": suiteIdList, "top": queueAtTop, "observe": observeJira, "ticketId": ticketId @@ -499,7 +497,7 @@ function jiraTicketNumber(ticket) { return regExpr.exec(ticket)[2]; } -function commentJira(serverId, suiteId, branchName, ticketId) { +function commentJira(serverId, branchName, parentSuiteId, ticketId) { var branchNotExists = !isDefinedAndFilled(branchName) || branchName.length === 0; branchName = branchNotExists ? null : branchForTc(branchName); ticketId = (isDefinedAndFilled(ticketId) && ticketId.length > 0) ? jiraTicketNumber(ticketId) : null; @@ -527,7 +525,7 @@ function commentJira(serverId, suiteId, branchName, ticketId) { url: 'rest/build/commentJira', data: { "serverId": serverId, - "suiteId": suiteId, + "suiteId": parentSuiteId, "branchName": branchName, "ticketId": ticketId }, @@ -543,7 +541,7 @@ function commentJira(serverId, suiteId, branchName, ticketId) { ticketId = $("#enterTicketId").val(); - commentJira(serverId, suiteId, branchName, ticketId) + commentJira(serverId, branchName, parentSuiteId, ticketId) }, "Cancel": function () { $(this).dialog("close"); @@ -561,7 +559,7 @@ function commentJira(serverId, suiteId, branchName, ticketId) { var dialog = $("#triggerDialog"); dialog.html("Trigger builds at server: " + serverId + "<br>" + - " Suite: " + suiteId + "<br>Branch:" + branchName + + " Suite: " + parentSuiteId + "<br>Branch:" + branchName + "<br><br> Result: " + result.result + (needTicketId ? ("<br><br>Enter JIRA ticket number: <input type='text' id='enterTicketId'>") : "")); @@ -648,13 +646,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='triggerBuilds(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName - + "\", false, false)' "; + mInfo += " onClick='triggerBuilds(\"" + suite.serverId + "\", null, \"" + + suite.suiteId + "\", \"" + suite.branchName + "\", false, false)' "; mInfo += " title='trigger build' >queue</a> "; mInfo += "<a href='javascript:void(0);' "; - mInfo += " onClick='triggerBuilds(\"" + suite.serverId + "\", \"" + suite.suiteId + "\", \"" + suite.branchName - + "\", true, false)' "; + mInfo += " onClick='triggerBuilds(\"" + suite.serverId + "\", null, \"" + + 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/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java index 371f6e7..1a7d64c 100644 --- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java +++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java @@ -290,13 +290,13 @@ public class IgnitedTcInMemoryIntegrationTest { .findFirst() .orElse(null); - BuildType runAllRefFromCache = srv.getBuildTypeRef(runAll).toBuildTypeRef(compactor); + BuildType runAllRefFromCache = srv.getBuildTypeRef(runAll).toBuildTypeRef(compactor, srv.host()); assertEquals(runAllRef, runAllRefFromCache); BuildTypeFull runAllFull = jaxbTestXml("/" + runAll + ".xml", BuildTypeFull.class); - BuildTypeFull runAllFullFromCache = srv.getBuildType(runAll).toBuildType(compactor); + BuildTypeFull runAllFullFromCache = srv.getBuildType(runAll).toBuildType(compactor, srv.host()); assertEquals(runAllFull, runAllFullFromCache); }
