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 2019/06/09 17:02:55 UTC
[ignite-teamcity-bot] branch master updated: TC Bot engine module
introduced: refactoring of TC Bot config
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
The following commit(s) were added to refs/heads/master by this push:
new 6b72596 TC Bot engine module introduced: refactoring of TC Bot config
6b72596 is described below
commit 6b725961e58c576a2aaef4681b22a6eadcd79a49
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Sun Jun 9 20:02:48 2019 +0300
TC Bot engine module introduced: refactoring of TC Bot config
---
conf/mail.auth.properties | 2 +-
.../java/org/apache/ignite/ci/HelperConfig.java | 43 -------
.../ci/github/ignited/GitHubConnIgnitedImpl.java | 2 +-
.../ci/github/ignited/IGitHubConnIgnited.java | 4 +-
.../ci/github/pure/GitHubConnectionImpl.java | 4 +-
.../ignite/ci/github/pure/IGitHubConnection.java | 2 +-
.../ignite/ci/jira/ignited/IJiraIgnited.java | 2 +-
.../apache/ignite/ci/jira/ignited/JiraIgnited.java | 2 +-
.../ignite/ci/jira/ignited/JiraTicketSync.java | 2 +-
.../ignite/ci/jira/pure/IJiraIntegration.java | 2 +-
.../java/org/apache/ignite/ci/jira/pure/Jira.java | 4 +-
.../org/apache/ignite/ci/jobs/CheckQueueJob.java | 142 ++++++++++-----------
.../org/apache/ignite/ci/mail/EmailSender.java | 2 +-
.../org/apache/ignite/ci/mail/SlackSender.java | 4 +-
.../ci/tcbot/TcBotBusinessServicesModule.java | 6 +-
.../tcbot/chain/TrackedBranchChainsProcessor.java | 36 +++---
.../apache/ignite/ci/tcbot/conf/BranchTracked.java | 10 +-
.../apache/ignite/ci/tcbot/conf/ChainAtServer.java | 8 +-
.../ignite/ci/tcbot/conf/ChainAtServerTracked.java | 37 ++++--
.../apache/ignite/ci/tcbot/conf/GitHubConfig.java | 2 +
.../ignite/ci/tcbot/conf/JiraServerConfig.java | 2 +
.../ci/tcbot/conf/LocalFilesBasedConfig.java | 41 +++++-
.../{BranchesTracked.java => TcBotJsonConfig.java} | 39 ++----
.../ignite/ci/tcbot/conf/TcServerConfig.java | 1 -
.../ignite/ci/tcbot/issue/IssueDetector.java | 65 ++++------
.../ci/tcbot/trends/MasterTrendsService.java | 2 +-
.../ignite/ci/tcbot/visa/BranchTicketMatcher.java | 6 +-
.../tcbot/visa/TcBotTriggerAndSignOffService.java | 14 +-
.../org/apache/ignite/ci/user/TcHelperUser.java | 4 +-
.../ignite/ci/web/auth/AuthenticationFilter.java | 2 +-
.../ignite/ci/web/model/trends/BuildsHistory.java | 2 +-
.../ignite/ci/web/rest/GetTrackedBranches.java | 27 ++--
.../apache/ignite/ci/web/rest/TriggerBuilds.java | 4 +-
.../ci/web/rest/build/GetBuildTestFailures.java | 2 +-
.../org/apache/ignite/ci/web/rest/login/Login.java | 4 +-
.../ignite/ci/web/rest/login/UserService.java | 11 +-
.../rest/tracked/GetTrackedBranchTestResults.java | 2 +-
.../org/apache/ignite/ci/di/DiContextTest.java | 2 +-
.../ci/tcbot/chain/MockBasedTcBotModule.java | 21 +--
.../ci/tcbot/chain/TrackedBranchProcessorTest.java | 4 +-
.../ignite/ci/tcbot/issue/IssueDetectorTest.java | 4 +-
.../IgnitedTcInMemoryIntegrationTest.java | 10 +-
.../tcbot/common/conf/IBuildParameterSpec.java | 3 +
...pplier.java => IDataSourcesConfigSupplier.java} | 6 +-
.../ignite/tcbot/common}/conf/IGitHubConfig.java | 2 +-
.../tcbot/common}/conf/IJiraServerConfig.java | 5 +-
.../ignite/tcbot/common/conf/ITcServerConfig.java | 5 +
.../ignite/tcbot/common}/conf/PasswordEncoder.java | 26 ++--
.../ignite/tcbot/common}/util/CryptUtil.java | 6 +-
.../ignite/tcbot/engine}/conf/EmailSettings.java | 2 +-
.../tcbot/engine}/conf/INotificationChannel.java | 2 +-
.../tcbot/engine/conf/INotificationsConfig.java | 7 +-
.../ignite/tcbot/engine}/conf/ITcBotConfig.java | 20 +--
.../ignite/tcbot/engine/conf/ITrackedBranch.java | 19 ++-
.../tcbot/engine/conf/ITrackedBranchesConfig.java | 23 +++-
.../ignite/tcbot/engine/conf/ITrackedChain.java | 29 ++++-
.../tcbot/engine}/conf/NotificationChannel.java | 2 +-
.../tcbot/engine}/conf/NotificationsConfig.java | 59 +++++++--
.../ignite/tcignited/TcIgnitedCachingProvider.java | 4 +-
.../ignite/tcignited/history/RunHistSync.java | 4 +-
.../tcservice/TeamcityServiceConnection.java | 5 +-
61 files changed, 445 insertions(+), 369 deletions(-)
diff --git a/conf/mail.auth.properties b/conf/mail.auth.properties
index cb3a6b6..de96546 100644
--- a/conf/mail.auth.properties
+++ b/conf/mail.auth.properties
@@ -2,7 +2,7 @@
#Enter email to send messages from, dev-list subsricption may be required
username=
-#Use org.apache.ignite.ci.tcbot.conf.PasswordEncoder to encode password
+#Use org.apache.ignite.tcbot.common.conf.PasswordEncoder to encode password
encoded_password=
#Specify slack Auth token
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
index 4b0e55a..33683f6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
@@ -18,21 +18,14 @@
package org.apache.ignite.ci;
import com.google.common.base.Preconditions;
-import com.google.gson.Gson;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Properties;
-import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
-import org.apache.ignite.tcbot.common.util.Base64Util;
-import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
-import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty;
/**
@@ -40,10 +33,7 @@ import static com.google.common.base.Strings.isNullOrEmpty;
*/
public class HelperConfig {
public static final String CONFIG_FILE_NAME = "auth.properties";
- public static final String MAIL_PROPS = "mail.auth.properties";
public static final String HOST = "host";
- public static final String USERNAME = "username";
- public static final String ENCODED_PASSWORD = "encoded_password";
/** GitHub authorization token property name. */
public static final String GITHUB_AUTH_TOKEN = "github.auth_token";
@@ -64,10 +54,6 @@ public class HelperConfig {
@Deprecated
public static final String JIRA_TICKET_TEMPLATE = "jira.ticket_template";
- /** Slack authorization token property name. */
- public static final String SLACK_AUTH_TOKEN = "slack.auth_token";
- @Deprecated
- public static final String SLACK_CHANNEL = "slack.channel";
public static final String LOGS = "logs";
public static Properties loadAuthProperties(File workDir, String cfgFileName) {
@@ -107,33 +93,4 @@ public class HelperConfig {
return isNullOrEmpty(tcName) ? name : (tcName + "." + name);
}
- @NotNull public static String userPwdToToken(String user, String pwd) {
- return Base64Util.encodeUtf8String(user + ":" + pwd);
- }
-
- public static BranchesTracked getTrackedBranches() {
- final File workDir = TcBotWorkDir.resolveWorkDir();
- final File file = new File(workDir, "branches.json");
-
- try (FileReader json = new FileReader(file)) {
- return new Gson().fromJson(json, BranchesTracked.class);
- }
- catch (IOException e) {
- throw ExceptionUtil.propagateException(e);
- }
- }
-
- public static Properties loadEmailSettings() {
- try {
- String respConf = prefixedWithServerName(null, MAIL_PROPS);
- final File workDir = TcBotWorkDir.resolveWorkDir();
- File file = new File(workDir, respConf);
- return loadProps(file);
- }
- catch (IOException e) {
- e.printStackTrace();
- return new Properties();
- }
- }
-
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/GitHubConnIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/GitHubConnIgnitedImpl.java
index 96f50a3..3415a83 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/GitHubConnIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/GitHubConnIgnitedImpl.java
@@ -38,7 +38,7 @@ import org.apache.ignite.ci.github.GitHubBranchKey;
import org.apache.ignite.ci.github.GitHubBranchShort;
import org.apache.ignite.ci.github.PullRequest;
import org.apache.ignite.ci.github.pure.IGitHubConnection;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/IGitHubConnIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/IGitHubConnIgnited.java
index e40800a..125cc37 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/IGitHubConnIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/ignited/IGitHubConnIgnited.java
@@ -18,8 +18,8 @@ package org.apache.ignite.ci.github.ignited;
import java.util.List;
import org.apache.ignite.ci.github.PullRequest;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
/**
*
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/GitHubConnectionImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/GitHubConnectionImpl.java
index c3696f6..8d5a41e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/GitHubConnectionImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/GitHubConnectionImpl.java
@@ -23,8 +23,8 @@ import com.google.gson.reflect.TypeToken;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.ci.github.GitHubBranchShort;
import org.apache.ignite.ci.github.PullRequest;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcbot.common.util.HttpUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/IGitHubConnection.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/IGitHubConnection.java
index 0866703..8f8f420 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/IGitHubConnection.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/github/pure/IGitHubConnection.java
@@ -22,7 +22,7 @@ import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.ignite.ci.github.GitHubBranchShort;
import org.apache.ignite.ci.github.PullRequest;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java
index 0934ab4..24a3086 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java
@@ -19,7 +19,7 @@ package org.apache.ignite.ci.jira.ignited;
import java.io.IOException;
import java.util.Set;
import org.apache.ignite.ci.jira.pure.Ticket;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
/**
*
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java
index f7d6750..38190e1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java
@@ -21,7 +21,7 @@ import java.util.Set;
import javax.inject.Inject;
import org.apache.ignite.ci.jira.pure.IJiraIntegration;
import org.apache.ignite.ci.jira.pure.Ticket;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
import org.apache.ignite.tcignited.ITeamcityIgnited;
/**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
index 4a8ca25..0813879 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
@@ -30,7 +30,7 @@ import org.apache.ignite.ci.jira.pure.Fields;
import org.apache.ignite.ci.jira.pure.IJiraIntegration;
import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
import org.apache.ignite.ci.jira.pure.Ticket;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
import org.apache.ignite.tcignited.ITeamcityIgnited;
import org.apache.ignite.internal.util.typedef.F;
import org.jetbrains.annotations.NotNull;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java
index 2b9a0dc..cfced3c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java
@@ -19,7 +19,7 @@ package org.apache.ignite.ci.jira.pure;
import java.io.IOException;
import org.apache.ignite.ci.jira.Tickets;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
/**
* Reperesents methods to provide interaction with Jira servers.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java
index 5e80a9b..cdef647 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java
@@ -21,8 +21,8 @@ import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.ci.jira.Tickets;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcbot.common.util.HttpUtil;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.slf4j.Logger;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index 9a808ea..d77b915 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -17,34 +17,32 @@
package org.apache.ignite.ci.jobs;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import javax.inject.Inject;
-import org.apache.ignite.ci.tcbot.conf.BranchTracked;
-import org.apache.ignite.ci.tcbot.conf.ChainAtServerTracked;
+import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
+import org.apache.ignite.ci.user.ITcBotUserCreds;
+import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
+import org.apache.ignite.tcbot.engine.conf.ITrackedChain;
+import org.apache.ignite.tcbot.persistence.IStringCompactor;
+import org.apache.ignite.tcignited.ITeamcityIgnited;
+import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.tcservice.model.agent.Agent;
import org.apache.ignite.tcservice.model.result.Build;
import org.apache.ignite.tcservice.model.result.Triggered;
import org.apache.ignite.tcservice.model.user.User;
-import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
-import org.apache.ignite.tcbot.persistence.IStringCompactor;
-import org.apache.ignite.tcignited.ITeamcityIgnited;
-import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
-import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
-import org.apache.ignite.ci.user.ITcBotUserCreds;
-import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.inject.Inject;
+import java.text.MessageFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
/**
* Trigger build if half of agents are available and there is no self-triggered builds in build queue.
*/
@@ -72,7 +70,7 @@ public class CheckQueueJob implements Runnable {
@Inject private ITcBotConfig cfg;
/** */
- private final Map<ChainAtServerTracked, Long> startTimes = new HashMap<>();
+ private final Map<ITrackedChain, Long> startTimes = new HashMap<>();
/**
* @param creds Background credentials provider.
@@ -104,25 +102,23 @@ public class CheckQueueJob implements Runnable {
return msg;
}
- List<BranchTracked> tracked = cfg.getTrackedBranches().getBranches();
+ Stream<ITrackedBranch> tracked = cfg.getTrackedBranches().branchesStream();
+
+ int srvsChecked = 0, chainsChecked = 0;
- if (tracked == null || tracked.isEmpty()) {
+ Map<String, List<ITrackedChain>> chainsBySrv = mapChainsByServer(tracked);
+ if (chainsBySrv.isEmpty()) {
final String msg = "Background check queue skipped - no config set for tracked branches.";
logger.info(msg);
return msg;
}
+ for (Map.Entry<String, List<ITrackedChain>> entry : chainsBySrv.entrySet()) {
+ String srvCode = entry.getKey();
- int srvsChecked = 0, chainsChecked = 0;
-
- Map<String, List<ChainAtServerTracked>> chainsBySrv = mapChainsByServer(tracked);
-
- for (Map.Entry<String, List<ChainAtServerTracked>> entry : chainsBySrv.entrySet()) {
- String srvId = entry.getKey();
-
- List<ChainAtServerTracked> chainsAll = entry.getValue();
- List<ChainAtServerTracked> chains = chainsAll.stream()
- .filter(c -> Objects.equals(c.serverId, srvId))
+ List<ITrackedChain> chainsAll = entry.getValue();
+ List<ITrackedChain> chains = chainsAll.stream()
+ .filter(c -> Objects.equals(c.serverCode(), srvCode))
.collect(Collectors.toList());
srvsChecked++;
@@ -130,7 +126,7 @@ public class CheckQueueJob implements Runnable {
chainsChecked += chainsAll.size();
try {
- checkQueue(srvId, chains);
+ checkQueue(srvCode, chains);
}
catch (Exception e) {
logger.error("Unable to check queue: " + e.getMessage(), e);
@@ -149,9 +145,7 @@ public class CheckQueueJob implements Runnable {
@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
@AutoProfiling
@MonitoredTask(name = "Check Server Queue", nameExtArgIndex = 0)
- protected String checkQueue(String srvId,
- List<ChainAtServerTracked> chains) {
-
+ protected String checkQueue(String srvId, List<ITrackedChain> chains) {
ITeamcityIgnited tcIgn = tcIgnitedProv.server(srvId, creds);
List<Agent> agents = tcIgn.agents(true, true);
@@ -180,13 +174,13 @@ public class CheckQueueJob implements Runnable {
StringBuilder res = new StringBuilder();
- for (ChainAtServerTracked chain : chains) {
- if(!Objects.equals(chain.serverId, srvId))
+ for (ITrackedChain chain : chains) {
+ if(!Objects.equals(chain.serverCode(), srvId))
continue;
boolean trigger = true;
- List<BuildRefCompacted> buildsForBr = tcIgn.getQueuedBuildsCompacted(chain.branchForRest);
+ List<BuildRefCompacted> buildsForBr = tcIgn.getQueuedBuildsCompacted(chain.tcBranch());
for (BuildRefCompacted refComp : buildsForBr) {
Integer buildId = refComp.getId();
@@ -217,7 +211,7 @@ public class CheckQueueJob implements Runnable {
final String msg
= MessageFormat.format("Queued build {0} was early triggered " +
"(user {1}, branch {2}, suite {3})." +
- " Will not start Ignite build.", buildId, login, chain.branchForRest, build.buildTypeId);
+ " Will not start Ignite build.", buildId, login, chain.tcBranch(), build.buildTypeId);
logger.info(msg);
@@ -233,7 +227,7 @@ public class CheckQueueJob implements Runnable {
continue;
long curr = System.currentTimeMillis();
- long delay = chain.getTriggerBuildQuietPeriod();
+ long delay = chain.triggerBuildQuietPeriod();
if (delay > 0) {
Long lastStart = startTimes.get(chain);
@@ -245,8 +239,8 @@ public class CheckQueueJob implements Runnable {
final String msg = MessageFormat.format("Skip triggering build, timeout has not expired " +
"(server={0}, suite={1}, branch={2}, delay={3} mins, passed={4} mins)",
- chain.getServerId(), chain.getSuiteIdMandatory(), chain.getBranchForRestMandatory(),
- chain.getTriggerBuildQuietPeriod(), minsPassed);
+ chain.serverCode(), chain.tcSuiteId(), chain.tcBranch(),
+ chain.triggerBuildQuietPeriod(), minsPassed);
logger.info(msg);
res.append(msg).append("; ");
@@ -257,10 +251,10 @@ public class CheckQueueJob implements Runnable {
startTimes.put(chain, curr);
- Map<String, Object> parms = chain.buildParameters();
- tcIgn.triggerBuild(chain.suiteId, chain.branchForRest(), true, false, parms);
+ tcIgn.triggerBuild(chain.tcSuiteId(), chain.tcBranch(), true, false,
+ chain.generateBuildParameters());
- res.append(chain.branchForRest).append(" ").append(chain.suiteId).append(" triggered; ");
+ res.append(chain.tcBranch()).append(" ").append(chain.tcBranch()).append(" triggered; ");
}
return res.toString();
@@ -270,32 +264,36 @@ public class CheckQueueJob implements Runnable {
* @param branchesTracked Tracked branches.
* @return Mapped chains to server identifier.
*/
- private Map<String, List<ChainAtServerTracked>> mapChainsByServer(List<BranchTracked> branchesTracked) {
- Map<String, List<ChainAtServerTracked>> chainsBySrv = new HashMap<>();
-
- for(BranchTracked branchTracked: branchesTracked) {
- for (ChainAtServerTracked chain : branchTracked.getChains()) {
- String srv = chain.serverId;
-
- if (!tcIgnitedProv.hasAccess(srv, creds)) {
- logger.warn("Background operations credentials does not grant access to server \"{}\"," +
- " build queue trigger will not work.", srv);
-
- continue;
- }
-
- if (!chain.isTriggerBuild()) {
- logger.info("Build triggering disabled for server={}, suite={}, branch={}",
- srv, chain.getSuiteIdMandatory(), chain.getBranchForRestMandatory());
-
- continue;
- }
-
- logger.info("Checking queue for server {}.", srv);
-
- chainsBySrv.computeIfAbsent(srv, v -> new ArrayList<>()).add(chain);
- }
- }
+ private Map<String, List<ITrackedChain>> mapChainsByServer(Stream<ITrackedBranch> branchesTracked) {
+ Map<String, List<ITrackedChain>> chainsBySrv = new HashMap<>();
+
+ branchesTracked.flatMap(ITrackedBranch::chainsStream)
+ .filter(chain -> {
+ String srv = chain.serverCode();
+
+ if (!tcIgnitedProv.hasAccess(srv, creds)) {
+ logger.warn("Background operations credentials does not grant access to server \"{}\"," +
+ " build queue trigger will not work.", srv);
+
+ return false;
+ }
+
+ return true;
+ })
+ .filter(chain -> {
+ if (!chain.triggerBuild()) {
+ logger.info("Build triggering disabled for server={}, suite={}, branch={}",
+ chain.serverCode(), chain.tcBranch(), chain.tcBranch());
+
+ return false;
+ }
+ return true;
+ })
+ .forEach(chain -> {
+ logger.info("Checking queue for server {}.", chain.serverCode());
+
+ chainsBySrv.computeIfAbsent(chain.serverCode(), v -> new ArrayList<>()).add(chain);
+ });
return chainsBySrv;
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
index f047312..3f8f075 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
@@ -29,7 +29,7 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
-import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
/**
* Class for sending email with configured credentials.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/SlackSender.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/SlackSender.java
index b190a67..d15d337 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/SlackSender.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/SlackSender.java
@@ -25,8 +25,8 @@ import com.ullink.slack.simpleslackapi.SlackUser;
import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory;
import com.ullink.slack.simpleslackapi.replies.SlackMessageReply;
import java.io.IOException;
-import org.apache.ignite.ci.HelperConfig;
-import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
+
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
index dcd1252..aaedf62 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
@@ -20,13 +20,13 @@ import com.google.inject.AbstractModule;
import com.google.inject.internal.SingletonScope;
import org.apache.ignite.ci.issue.IssuesStorage;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.conf.LocalFilesBasedConfig;
import org.apache.ignite.ci.tcbot.issue.IIssuesStorage;
import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
import org.apache.ignite.ci.tcbot.user.UserAndSessionsStorage;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
/**
* TC Bot self services mapping (without 3rd party integrations configuration.
@@ -36,7 +36,7 @@ public class TcBotBusinessServicesModule extends AbstractModule {
@Override protected void configure() {
bind(ITcBotConfig.class).to(LocalFilesBasedConfig.class).in(new SingletonScope());
//todo remove
- bind(ITcServerConfigSupplier.class).to(LocalFilesBasedConfig.class).in(new SingletonScope());
+ bind(IDataSourcesConfigSupplier.class).to(LocalFilesBasedConfig.class).in(new SingletonScope());
bind(IUserStorage.class).to(UserAndSessionsStorage.class).in(new SingletonScope());
bind(IIssuesStorage.class).to(IssuesStorage.class).in(new SingletonScope());
bind(MasterTrendsService.class).in(new SingletonScope());
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
index 1f1c8b4..c46b097 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
@@ -21,13 +21,13 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import javax.inject.Inject;
+import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcbot.engine.chain.FullChainRunCtx;
import org.apache.ignite.tcbot.engine.chain.LatestRebuildMode;
import org.apache.ignite.tcbot.engine.chain.ProcessLogsMode;
-import org.apache.ignite.ci.tcbot.conf.BranchTracked;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
-import org.apache.ignite.ci.tcbot.conf.TcServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnited;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
@@ -68,20 +68,20 @@ public class TrackedBranchChainsProcessor {
final TestFailuresSummary res = new TestFailuresSummary();
final AtomicInteger runningUpdates = new AtomicInteger();
- final String branchNn = isNullOrEmpty(branch) ? TcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
+ final String branchNn = isNullOrEmpty(branch) ? ITcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
res.setTrackedBranch(branchNn);
- final BranchTracked tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
+ final ITrackedBranch tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
- tracked.chains.stream()
- .filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverId, creds))
+ tracked.chainsStream()
+ .filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverCode(), creds))
.map(chainTracked -> {
- final String srvCode = chainTracked.serverId;
+ final String srvCode = chainTracked.serverCode();
- final String branchForTc = chainTracked.getBranchForRestMandatory();
+ final String branchForTc = chainTracked.tcBranch();
//branch is tracked, so fail rate should be taken from this branch data (otherwise it is specified).
- final String baseBranchTc = chainTracked.getBaseBranchForTc().orElse(branchForTc);
+ final String baseBranchTc = chainTracked.tcBaseBranch().orElse(branchForTc);
ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvCode, creds);
@@ -91,7 +91,7 @@ public class TrackedBranchChainsProcessor {
chainStatus.baseBranchForTc = baseBranchTc;
- String suiteIdMandatory = chainTracked.getSuiteIdMandatory();
+ String suiteIdMandatory = chainTracked.tcSuiteId();
List<Integer> chains = tcIgnited.getLastNBuildsFromHistory(suiteIdMandatory, branchForTc, buildResMergeCnt);
@@ -143,19 +143,19 @@ public class TrackedBranchChainsProcessor {
ITcBotUserCreds creds) {
FullLRTestsSummary summary = new FullLRTestsSummary();
- final String branchNn = isNullOrEmpty(branch) ? TcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
- final BranchTracked tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
+ final String branchNn = isNullOrEmpty(branch) ? ITcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
+ final ITrackedBranch tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
- tracked.chains.stream()
- .filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverId, creds))
+ tracked.chainsStream()
+ .filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverCode(), creds))
.map(chainTracked -> {
- final String srvId = chainTracked.serverId;
+ final String srvId = chainTracked.serverCode();
- final String branchForTc = chainTracked.getBranchForRestMandatory();
+ final String branchForTc = chainTracked.tcBranch();
ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvId, creds);
- List<Integer> hist = tcIgnited.getLastNBuildsFromHistory(chainTracked.getSuiteIdMandatory(), branchForTc, 1);
+ List<Integer> hist = tcIgnited.getLastNBuildsFromHistory(chainTracked.tcSuiteId(), branchForTc, 1);
return chainProc.loadLongRunningTestsSummary(tcIgnited, hist);
})
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchTracked.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchTracked.java
index 20eff29..8f87e96 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchTracked.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchTracked.java
@@ -23,12 +23,14 @@ import java.util.List;
import java.util.stream.Stream;
import javax.validation.constraints.NotNull;
import org.apache.ignite.ci.issue.IssueType;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
+import org.apache.ignite.tcbot.engine.conf.ITrackedChain;
import org.jetbrains.annotations.Nullable;
/**
* One tracked branch, probably on several servers
*/
-public class BranchTracked {
+public class BranchTracked implements ITrackedBranch {
/** ID for internal REST and for config file. */
public String id;
@@ -42,7 +44,7 @@ public class BranchTracked {
/**
* @return internal identifier of the branch.
*/
- public String getId() {
+ public String name() {
return id;
}
@@ -52,8 +54,8 @@ public class BranchTracked {
}
/** */
- public Stream<ChainAtServerTracked> getChainsStream() {
- return getChains().stream();
+ public Stream<ITrackedChain> chainsStream() {
+ return chains.stream().map(t->t);
}
/**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServer.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServer.java
index 9daccb7..72f42f1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServer.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServer.java
@@ -17,6 +17,8 @@
package org.apache.ignite.ci.tcbot.conf;
+import org.apache.ignite.tcbot.engine.conf.ITrackedChain;
+
import java.util.Objects;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -36,9 +38,9 @@ public class ChainAtServer {
}
- public ChainAtServer(ChainAtServer o) {
- this.serverId = o.serverId;
- this.suiteId = o.suiteId;
+ public ChainAtServer(ITrackedChain o) {
+ this.serverId = o.serverCode();
+ this.suiteId = o.tcSuiteId();
}
/** {@inheritDoc} */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
index f60cd2e..585e5db 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
@@ -27,6 +27,8 @@ import java.util.Optional;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
+import org.apache.ignite.tcbot.engine.conf.ITrackedChain;
import org.jetbrains.annotations.NotNull;
import static com.google.common.base.Preconditions.checkState;
@@ -36,7 +38,7 @@ import static com.google.common.base.Strings.isNullOrEmpty;
* Chain on particular TC server, which is tracked by the Bot.
*/
@SuppressWarnings("PublicField")
-public class ChainAtServerTracked extends ChainAtServer {
+public class ChainAtServerTracked extends ChainAtServer implements ITrackedChain {
/** Branch identifier by TC identification for REST API. */
@Nonnull public String branchForRest;
@@ -49,7 +51,7 @@ public class ChainAtServerTracked extends ChainAtServer {
/** Automatic build triggering quiet period in minutes. */
@Nullable private Integer triggerBuildQuietPeriod;
- /** Build parameters for Triggerring. */
+ /** Build parameters for Triggering. */
@Nullable private List<BuildParameterSpec> triggerParameters;
/** @return {@link #suiteId} */
@@ -68,14 +70,13 @@ public class ChainAtServerTracked extends ChainAtServer {
}
/**
- * @return base (etalon) branch in TC indentification t builds
+ * @return base (etalon) branch in TC identification t builds
*/
- @Nonnull
- public Optional<String> getBaseBranchForTc() {
+ @Nonnull public Optional<String> tcBaseBranch() {
if (Strings.isNullOrEmpty(baseBranchForTc))
return Optional.empty();
- return Optional.ofNullable(baseBranchForTc);
+ return Optional.of(baseBranchForTc);
}
/** {@inheritDoc} */
@@ -102,21 +103,26 @@ public class ChainAtServerTracked extends ChainAtServer {
/**
* @return {@code True} If automatic build triggering enabled.
*/
- public boolean isTriggerBuild() {
+ public boolean triggerBuild() {
return triggerBuild == null ? false : triggerBuild;
}
/**
* @return Quiet period in minutes between triggering builds or zero if period is not set and should be ignored.
*/
- public int getTriggerBuildQuietPeriod() {
+ public int triggerBuildQuietPeriod() {
return triggerBuildQuietPeriod == null ? 0 : triggerBuildQuietPeriod;
}
+ @Override
+ public String tcSuiteId() {
+ return suiteId;
+ }
+
/**
* @return Map with parameter values for current run.
*/
- @NotNull public Map<String, Object> buildParameters() {
+ @Nonnull public Map<String, Object> generateBuildParameters() {
if (triggerParameters == null || triggerParameters.isEmpty())
return Collections.emptyMap();
@@ -142,8 +148,17 @@ public class ChainAtServerTracked extends ChainAtServer {
return triggerParameters.stream().map(BuildParameterSpec::name);
}
- /** */
- public String branchForRest() {
+ @Override
+ public String tcBranch() {
return branchForRest;
}
+
+ /**
+ * @return Server ID to access configs within IDataSourceCfgSupplier.
+ */
+ @Override
+ public String serverCode() {
+ return serverId;
+ }
+
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/GitHubConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/GitHubConfig.java
index eff42da..a5daac4 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/GitHubConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/GitHubConfig.java
@@ -20,6 +20,8 @@ import com.google.common.base.Strings;
import java.util.Properties;
import javax.annotation.Nullable;
import org.apache.ignite.ci.HelperConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.PasswordEncoder;
import org.jetbrains.annotations.NotNull;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
index 43441df..0de7cd5 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
@@ -20,6 +20,8 @@ import com.google.common.base.Strings;
import java.util.Properties;
import org.apache.ignite.ci.HelperConfig;
import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.conf.PasswordEncoder;
import org.jetbrains.annotations.Nullable;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
index 11f72ff..e684c25 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
@@ -19,26 +19,48 @@ package org.apache.ignite.ci.tcbot.conf;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.util.Objects;
import java.util.Properties;
+
+import com.google.gson.Gson;
import org.apache.ignite.ci.HelperConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranchesConfig;
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
/**
*
*/
public class LocalFilesBasedConfig implements ITcBotConfig {
+ private static TcBotJsonConfig reloadConfig() {
+ final File workDir = TcBotWorkDir.resolveWorkDir();
+ final File file = new File(workDir, "branches.json");
+
+ try (FileReader json = new FileReader(file)) {
+ return new Gson().fromJson(json, TcBotJsonConfig.class);
+ }
+ catch (IOException e) {
+ throw ExceptionUtil.propagateException(e);
+ }
+ }
+
/** {@inheritDoc} */
@GuavaCached(softValues = true, expireAfterWriteSecs = 3 * 60)
- @Override public BranchesTracked getTrackedBranches() {
- return HelperConfig.getTrackedBranches();
+ protected TcBotJsonConfig getConfig() {
+ return reloadConfig();
}
/** {@inheritDoc} */
@Override public ITcServerConfig getTeamcityConfig(String srvCode) {
- return getTrackedBranches().getTcConfig(srvCode)
+ return getConfig().getTcConfig(srvCode)
.orElseGet(() -> {
TcServerConfig tcCfg = new TcServerConfig();
@@ -54,7 +76,7 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
/** {@inheritDoc} */
@Override public IJiraServerConfig getJiraConfig(String srvCode) {
- return getTrackedBranches().getJiraConfig(srvCode)
+ return getConfig().getJiraConfig(srvCode)
.orElseGet(() -> new JiraServerConfig()
.code(srvCode)
.properties(loadOldAuthProps(srvCode)));
@@ -62,7 +84,7 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
/** {@inheritDoc} */
@Override public IGitHubConfig getGitConfig(String srvCode) {
- GitHubConfig cfg = getTrackedBranches().getGitHubConfig(srvCode)
+ GitHubConfig cfg = getConfig().getGitHubConfig(srvCode)
.orElseGet(() -> new GitHubConfig()
.code(srvCode)
.properties(loadOldAuthProps(srvCode)));
@@ -74,7 +96,7 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
/** {@inheritDoc} */
@Override public NotificationsConfig notifications() {
- NotificationsConfig notifications = getTrackedBranches().notifications();
+ NotificationsConfig notifications = getConfig().notifications();
if (notifications != null && !notifications.isEmpty())
return notifications;
@@ -83,11 +105,16 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
/** {@inheritDoc} */
@Override public String primaryServerCode() {
- String srvCode = getTrackedBranches().primaryServerCode();
+ String srvCode = getConfig().primaryServerCode();
return Strings.isNullOrEmpty(srvCode) ? ITcBotConfig.DEFAULT_SERVER_CODE : srvCode;
}
+ @Override
+ public ITrackedBranchesConfig getTrackedBranches() {
+ return getConfig();
+ }
+
@GuavaCached(softValues = true, expireAfterWriteSecs = 3 * 60)
protected Properties loadOldAuthProps(String srvCode) {
File workDir = TcBotWorkDir.resolveWorkDir();
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchesTracked.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcBotJsonConfig.java
similarity index 74%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchesTracked.java
rename to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcBotJsonConfig.java
index f5dbf3d..95c2ed3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BranchesTracked.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcBotJsonConfig.java
@@ -17,6 +17,11 @@
package org.apache.ignite.ci.tcbot.conf;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranchesConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedChain;
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -30,7 +35,7 @@ import javax.annotation.Nullable;
* TC Bot main JSON config file, Historically.
* Config file for tracked branches.
*/
-public class BranchesTracked {
+public class TcBotJsonConfig implements ITrackedBranchesConfig {
/** Branches. */
private List<BranchTracked> branches = new ArrayList<>();
@@ -49,38 +54,18 @@ public class BranchesTracked {
/** Notifications settings & tokens. */
private NotificationsConfig notifications = new NotificationsConfig();
- /**
- * @return list of internal identifiers of branch.
- */
- public List<String> getIds() {
- return branches.stream().map(BranchTracked::getId).collect(Collectors.toList());
- }
-
- /**
- * Get Unique suites involved into tracked branches
- */
- public Set<ChainAtServer> getSuitesUnique() {
- return branches.stream()
- .flatMap(BranchTracked::getChainsStream)
- .map(ChainAtServer::new) // to produce object with another equals
- .collect(Collectors.toSet());
- }
-
- public Optional<BranchTracked> get(String branch) {
- return branches.stream().filter(b -> branch.equals(b.getId())).findAny();
- }
-
- public BranchTracked getBranchMandatory(String branch) {
- return get(branch).orElseThrow(() -> new RuntimeException("Branch not found: " + branch));
+ @Override
+ public Stream<ITrackedBranch> branchesStream() {
+ return branches.stream().map(t->t);
}
/**
*
*/
public Set<String> getServerIds() {
- Stream<String> srvsInTracked = branches.stream()
- .flatMap(BranchTracked::getChainsStream)
- .map(ChainAtServer::getServerId);
+ Stream<String> srvsInTracked = branchesStream()
+ .flatMap(ITrackedBranch::chainsStream)
+ .map(ITrackedChain::serverCode);
return Stream.concat(srvsInTracked,
tcServers.stream().map(TcServerConfig::getCode))
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
index a29e6ac..fbd72b7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
@@ -33,7 +33,6 @@ import org.jetbrains.annotations.Nullable;
* Teamcity connection configuration or reference to another config.
*/
public class TcServerConfig implements ITcServerConfig {
- public static final String DEFAULT_TRACKED_BRANCH_NAME = "master";
private static final String DEFAULT_HOST = "https://ci.ignite.apache.org/";
/** TC server name. */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index d309443..b74487d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -19,42 +19,12 @@ package org.apache.ignite.ci.tcbot.issue;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.Nonnull;
-import javax.inject.Inject;
-import javax.inject.Provider;
-
-import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
-import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
-import org.apache.ignite.ci.issue.EventTemplate;
-import org.apache.ignite.ci.issue.EventTemplates;
-import org.apache.ignite.ci.issue.Issue;
-import org.apache.ignite.ci.issue.IssueKey;
-import org.apache.ignite.ci.issue.IssueType;
+import org.apache.ignite.ci.issue.*;
import org.apache.ignite.ci.jobs.CheckQueueJob;
import org.apache.ignite.ci.mail.EmailSender;
import org.apache.ignite.ci.mail.SlackSender;
import org.apache.ignite.ci.tcbot.chain.TrackedBranchChainsProcessor;
-import org.apache.ignite.ci.tcbot.conf.INotificationChannel;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
-import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
-import org.apache.ignite.tcignited.history.IRunHistory;
-import org.apache.ignite.tcbot.persistence.IStringCompactor;
-import org.apache.ignite.tcignited.ITeamcityIgnited;
-import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
-import org.apache.ignite.tcignited.SyncMode;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.apache.ignite.ci.teamcity.ignited.runhist.InvocationData;
@@ -64,10 +34,31 @@ import org.apache.ignite.ci.web.model.current.ChainAtServerCurrentStatus;
import org.apache.ignite.ci.web.model.current.SuiteCurrentStatus;
import org.apache.ignite.ci.web.model.current.TestFailure;
import org.apache.ignite.ci.web.model.current.TestFailuresSummary;
+import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
+import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
+import org.apache.ignite.tcbot.engine.conf.INotificationChannel;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
+import org.apache.ignite.tcbot.persistence.IStringCompactor;
+import org.apache.ignite.tcignited.ITeamcityIgnited;
+import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.tcignited.SyncMode;
+import org.apache.ignite.tcignited.history.IRunHistory;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.Nonnull;
+import javax.inject.Inject;
+import javax.inject.Provider;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
import static org.apache.ignite.tcignited.history.RunHistSync.normalizeBranch;
/**
@@ -472,19 +463,15 @@ public class IssueDetector {
*
*/
private void checkFailures() {
- List<String> ids = cfg.getTrackedBranchesIds();
-
- for (String tbranchName : ids) {
+ cfg.getTrackedBranches().branchesStream().forEach(tb -> {
try {
- checkFailuresEx(tbranchName);
- }
- catch (Exception e) {
+ checkFailuresEx(tb.name());
+ } catch (Exception e) {
e.printStackTrace();
logger.error("Failure periodic check failed: " + e.getMessage(), e);
}
- }
-
+ });
}
/**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
index 599c2a4..dfc4f5f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
@@ -42,7 +42,7 @@ import javax.inject.Provider;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcservice.model.hist.BuildRef;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrence;
import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java
index 7c927c1..390e71b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java
@@ -25,9 +25,9 @@ import org.apache.ignite.ci.github.pure.IGitHubConnection;
import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
import org.apache.ignite.ci.jira.ignited.TicketCompacted;
import org.apache.ignite.ci.jira.pure.Ticket;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
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 594c111..a742f7d 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
@@ -50,9 +50,9 @@ import org.apache.ignite.ci.observer.BuildObserver;
import org.apache.ignite.ci.observer.BuildsInfo;
import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcservice.model.mute.MuteInfo;
import org.apache.ignite.tcservice.model.result.Build;
@@ -635,11 +635,11 @@ public class TcBotTriggerAndSignOffService {
cfg.getTrackedBranches()
.get(trBranch)
.ifPresent(
- b -> b.getChainsStream()
- .filter(c -> Objects.equals(realTcId, c.serverId))
- .filter(c -> c.branchForRest.equals(ITeamcity.DEFAULT))
+ b -> b.chainsStream()
+ .filter(c -> Objects.equals(realTcId, c.serverCode()))
+ .filter(c -> ITeamcity.DEFAULT.equals(c.tcBranch()))
.findFirst()
- .ifPresent(ch -> buildTypeId.append(ch.suiteId)));
+ .ifPresent(ch -> buildTypeId.append(ch.tcSuiteId())));
return buildTypeId.toString();
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
index f79cdd1..52b6b26 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
@@ -28,9 +28,9 @@ import java.util.TreeSet;
import javax.annotation.Nullable;
import org.apache.ignite.tcbot.persistence.IVersionedEntity;
import org.apache.ignite.tcbot.persistence.Persisted;
-import org.apache.ignite.ci.tcbot.conf.INotificationChannel;
+import org.apache.ignite.tcbot.engine.conf.INotificationChannel;
import org.apache.ignite.tcservice.model.user.User;
-import org.apache.ignite.ci.util.CryptUtil;
+import org.apache.ignite.tcbot.common.util.CryptUtil;
import static javax.xml.bind.DatatypeConverter.printHexBinary;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/auth/AuthenticationFilter.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/auth/AuthenticationFilter.java
index 32ece86..92d08b1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/auth/AuthenticationFilter.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/auth/AuthenticationFilter.java
@@ -43,7 +43,7 @@ import org.apache.ignite.ci.user.ITcBotUserCreds;
import org.apache.ignite.ci.user.TcHelperUser;
import org.apache.ignite.ci.user.UserSession;
import org.apache.ignite.tcbot.common.util.Base64Util;
-import org.apache.ignite.ci.util.CryptUtil;
+import org.apache.ignite.tcbot.common.util.CryptUtil;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.ci.web.CtxListener;
import org.apache.ignite.tcbot.common.exeption.ServiceUnauthorizedException;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/trends/BuildsHistory.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/trends/BuildsHistory.java
index cd2554b..3fa1f95 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/trends/BuildsHistory.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/trends/BuildsHistory.java
@@ -29,7 +29,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.ignite.tcservice.ITeamcity;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
index 0e07f95..e0af5c6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
@@ -33,10 +33,11 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
-import org.apache.ignite.ci.tcbot.conf.BranchTracked;
import org.apache.ignite.ci.tcbot.conf.ChainAtServer;
import org.apache.ignite.ci.tcbot.TcBotGeneralService;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranchesConfig;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.ci.user.ITcBotUserCreds;
import org.apache.ignite.ci.web.CtxListener;
@@ -71,14 +72,25 @@ public class GetTrackedBranches {
ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
- return cfg.getTrackedBranches().getBranches()
- .stream()
+ return cfg.getTrackedBranches().branchesStream()
.filter(bt ->
- bt.getChains().stream().anyMatch(chain-> tcProv.hasAccess(chain.serverId, prov)))
- .map(BranchTracked::getId)
+ bt.chainsStream().anyMatch(chain-> tcProv.hasAccess(chain.serverCode(), prov)))
+ .map(ITrackedBranch::name)
.collect(Collectors.toList());
}
+
+ /**
+ * Get Unique suites involved into tracked branches
+ * @param trackedBranches
+ */
+ public Set<ChainAtServer> getSuitesUnique(ITrackedBranchesConfig trackedBranches) {
+ return trackedBranches.branchesStream()
+ .flatMap(ITrackedBranch::chainsStream)
+ .map(ChainAtServer::new) // to produce object with another equals
+ .collect(Collectors.toSet());
+ }
+
/**
* Return all suites involved into tracked branches.
*
@@ -92,8 +104,7 @@ public class GetTrackedBranches {
ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
- return cfg.getTrackedBranches()
- .getSuitesUnique()
+ return getSuitesUnique(cfg.getTrackedBranches())
.stream()
.filter(chainAtSrv ->
Strings.isNullOrEmpty(srvId)
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 10baad3..54de527 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
@@ -33,8 +33,8 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.apache.ignite.ci.github.pure.IGitHubConnection;
import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.trigger.TriggerResult;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.ci.user.ITcBotUserCreds;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
index 4d57e58..c88cc31 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
@@ -34,7 +34,7 @@ import org.apache.ignite.tcbot.engine.chain.FullChainRunCtx;
import org.apache.ignite.tcbot.engine.chain.LatestRebuildMode;
import org.apache.ignite.tcbot.engine.chain.ProcessLogsMode;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
import org.apache.ignite.ci.user.ITcBotUserCreds;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
index 74333b3..37337bf 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ci.web.rest.login;
import com.google.common.base.Preconditions;
import com.google.inject.Injector;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
import org.apache.ignite.tcservice.model.user.User;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.tcservice.login.ITcLogin;
import org.apache.ignite.ci.user.TcHelperUser;
import org.apache.ignite.tcbot.common.util.Base64Util;
-import org.apache.ignite.ci.util.CryptUtil;
+import org.apache.ignite.tcbot.common.util.CryptUtil;
import org.apache.ignite.ci.web.CtxListener;
import org.apache.ignite.ci.user.LoginResponse;
import org.apache.ignite.ci.user.UserSession;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
index 17beee2..dfaf340 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
@@ -32,10 +32,11 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.issue.IssueDetector;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranch;
import org.apache.ignite.tcservice.model.user.User;
import org.apache.ignite.tcservice.login.ITcLogin;
import org.apache.ignite.ci.user.ITcBotUserCreds;
@@ -48,6 +49,8 @@ import org.apache.ignite.ci.web.model.UserMenuResult;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.stream.Collectors;
+
@Path(UserService.USER)
@Produces(MediaType.APPLICATION_JSON)
@@ -118,7 +121,11 @@ public class UserService {
IUserStorage users = injector.getInstance(IUserStorage.class);
final TcHelperUser user = users.getUser(login);
- final TcHelperUserUi tcHelperUserUi = new TcHelperUserUi(user, cfg.getTrackedBranchesIds());
+ //todo can filter accessibliity
+ final TcHelperUserUi tcHelperUserUi = new TcHelperUserUi(user,
+ cfg.getTrackedBranches().branchesStream()
+ .map(ITrackedBranch::name)
+ .collect(Collectors.toList()) );
//if principal is not null, can do only brief check of credentials.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
index a1961f3..a02a798 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
@@ -28,7 +28,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.apache.ignite.ci.tcbot.chain.TrackedBranchChainsProcessor;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService;
import org.apache.ignite.ci.user.ITcBotUserCreds;
import org.apache.ignite.ci.web.CtxListener;
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
index c9c009c..12c6e04 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
@@ -27,7 +27,7 @@ import org.apache.ignite.ci.observer.BuildObserver;
import org.apache.ignite.ci.observer.ObserverTask;
import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.web.TcUpdatePool;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
index be1b4aa..8755a59 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
@@ -31,12 +31,13 @@ import org.apache.ignite.ci.jira.ignited.IJiraIgnited;
import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
import org.apache.ignite.ci.jira.pure.IJiraIntegration;
import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
-import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
-import org.apache.ignite.ci.tcbot.conf.IGitHubConfig;
-import org.apache.ignite.ci.tcbot.conf.IJiraServerConfig;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
-import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
+import org.apache.ignite.tcbot.engine.conf.ITrackedBranchesConfig;
+import org.apache.ignite.tcbot.engine.conf.NotificationsConfig;
import org.apache.ignite.ci.tcbot.conf.TcServerConfig;
import org.apache.ignite.ci.tcbot.issue.IIssuesStorage;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
@@ -44,7 +45,7 @@ import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.ci.teamcity.ignited.InMemoryStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedProviderMock;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
import org.apache.ignite.tcignited.buildlog.IBuildLogProcessor;
import org.mockito.Mockito;
@@ -59,9 +60,9 @@ import static org.mockito.Mockito.when;
* Setup TC bot context with Ignited services mocks: - TC: {@link TeamcityIgnitedProviderMock}
*/
public class MockBasedTcBotModule extends AbstractModule {
- private BranchesTracked tracked = new BranchesTracked();
+ private TcBotJsonConfig tracked = new TcBotJsonConfig();
- public MockBasedTcBotModule(BranchesTracked tracked) {
+ public MockBasedTcBotModule(TcBotJsonConfig tracked) {
this.tracked = tracked;
}
@@ -94,7 +95,7 @@ public class MockBasedTcBotModule extends AbstractModule {
}
@Override
- public BranchesTracked getTrackedBranches() {
+ public ITrackedBranchesConfig getTrackedBranches() {
return tracked;
}
@@ -128,7 +129,7 @@ public class MockBasedTcBotModule extends AbstractModule {
}
};
bind(ITcBotConfig.class).toInstance(cfg);
- bind(ITcServerConfigSupplier.class).toInstance(cfg);
+ bind(IDataSourcesConfigSupplier.class).toInstance(cfg);
bind(IIssuesStorage.class).toInstance(Mockito.mock(IIssuesStorage.class));
bind(IUserStorage.class).toInstance(Mockito.mock(IUserStorage.class));
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
index 40ad6b4..a1a21fa 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
@@ -28,7 +28,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.ignite.tcservice.ITeamcity;
import org.apache.ignite.ci.tcbot.conf.BranchTracked;
import org.apache.ignite.ci.tcbot.conf.ChainAtServerTracked;
-import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
+import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.tcignited.SyncMode;
@@ -66,7 +66,7 @@ public class TrackedBranchProcessorTest {
private Map<Integer, FatBuildCompacted> apacheBuilds = new ConcurrentHashMap<>();
/** Branches tracked. */
- private BranchesTracked branchesTracked = new BranchesTracked();
+ private TcBotJsonConfig branchesTracked = new TcBotJsonConfig();
/**
* Injector.
*/
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
index b62568c..c48106c 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
@@ -31,7 +31,7 @@ import org.apache.ignite.tcservice.ITeamcity;
import org.apache.ignite.ci.tcbot.conf.BranchTracked;
import org.apache.ignite.ci.tcbot.conf.ChainAtServerTracked;
import org.apache.ignite.ci.tcbot.chain.MockBasedTcBotModule;
-import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
+import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrenceFull;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
@@ -61,7 +61,7 @@ public class IssueDetectorTest {
private Map<Integer, FatBuildCompacted> apacheBuilds = new ConcurrentHashMap<>();
/** Config Branches tracked. */
- private BranchesTracked branchesTracked = new BranchesTracked();
+ private TcBotJsonConfig branchesTracked = new TcBotJsonConfig();
/**
* Injector.
*/
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
index 6bd753f..6afa380 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
@@ -28,8 +28,8 @@ import org.apache.ignite.ci.db.TcHelperDb;
import org.apache.ignite.ci.di.scheduler.DirectExecNoWaitScheduler;
import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
import org.apache.ignite.ci.tcbot.chain.PrChainsProcessorTest;
-import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
import org.apache.ignite.tcignited.buildref.BuildRefDao;
import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
@@ -41,7 +41,7 @@ import org.apache.ignite.ci.user.ITcBotUserCreds;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcbot.persistence.IgniteStringCompactor;
import org.apache.ignite.tcbot.persistence.TcBotPersistenceModule;
@@ -739,10 +739,10 @@ public class IgnitedTcInMemoryIntegrationTest {
when(tcCfg.host()).thenReturn("http://ci.ignite.apache.org/");
when(tcCfg.trustedSuites()).thenReturn(new ArrayList<>());
when(cfg.getTeamcityConfig(anyString())).thenReturn(tcCfg);
- when(cfg.getTrackedBranches()).thenReturn(new BranchesTracked());
+ when(cfg.getTrackedBranches()).thenReturn(new TcBotJsonConfig());
bind(ITcBotConfig.class).toInstance(cfg);
- bind(ITcServerConfigSupplier.class).toInstance(cfg);
+ bind(IDataSourcesConfigSupplier.class).toInstance(cfg);
install(new TcBotPersistenceModule());
}
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
index 4e7f34d..6d1223e 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
@@ -18,6 +18,9 @@ package org.apache.ignite.tcbot.common.conf;
import java.util.Collection;
+/**
+ * Teamcity build parameter for filtering and for triggering specification.
+ */
public interface IBuildParameterSpec {
String name();
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
similarity index 88%
copy from tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java
copy to tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
index 4a20a7e..9ef5b1f 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
@@ -17,7 +17,9 @@
package org.apache.ignite.tcbot.common.conf;
-@Deprecated
-public interface ITcServerConfigSupplier {
+/**
+ * 3rd party data sources (services/servers) configurations.
+ */
+public interface IDataSourcesConfigSupplier {
public ITcServerConfig getTeamcityConfig(String srvCode);
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IGitHubConfig.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IGitHubConfig.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IGitHubConfig.java
rename to tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IGitHubConfig.java
index 63580d3..8016983 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IGitHubConfig.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IGitHubConfig.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.common.conf;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IJiraServerConfig.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IJiraServerConfig.java
similarity index 96%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IJiraServerConfig.java
rename to tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IJiraServerConfig.java
index b4d719b..33b8276 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/IJiraServerConfig.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IJiraServerConfig.java
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.common.conf;
import com.google.common.base.Strings;
-import org.jetbrains.annotations.Nullable;
+
+import javax.annotation.Nullable;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfig.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfig.java
index a7b421b..918868a 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfig.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfig.java
@@ -26,6 +26,11 @@ import java.util.Collection;
*/
public interface ITcServerConfig {
/**
+ * Default tracked branch in case it was not specified.
+ */
+ String DEFAULT_TRACKED_BRANCH_NAME = "master";
+
+ /**
* @return Another TC Server (service) config name to use settings from. Filled only for server aliases.
*/
@Nullable
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/PasswordEncoder.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/PasswordEncoder.java
similarity index 85%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/PasswordEncoder.java
rename to tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/PasswordEncoder.java
index fa693ee..e86801b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/PasswordEncoder.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/PasswordEncoder.java
@@ -15,17 +15,18 @@
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.common.conf;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import org.apache.ignite.tcbot.common.util.Base64Util;
+import org.apache.ignite.tcbot.common.util.CryptUtil;
+
import java.security.SecureRandom;
+import javax.annotation.Nonnull;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
-import org.apache.ignite.ci.HelperConfig;
-import org.apache.ignite.ci.util.CryptUtil;
-import org.jetbrains.annotations.NotNull;
import static javax.xml.bind.DatatypeConverter.parseHexBinary;
import static javax.xml.bind.DatatypeConverter.printHexBinary;
@@ -68,7 +69,7 @@ public class PasswordEncoder {
return CryptUtil.aesEcbPkcs5PaddedCrypt(k(), data, Cipher.DECRYPT_MODE);
}
- @NotNull private static SecretKeySpec k() {
+ @Nonnull private static SecretKeySpec k() {
int reqBytes = 128 / 8;
String ptrn = "Ignite";
byte[] raw = Strings.repeat(ptrn, reqBytes / ptrn.length() + 1).substring(0, reqBytes).getBytes();
@@ -90,7 +91,12 @@ public class PasswordEncoder {
public static void main0(String[] args) {
String pass = "324aadfe23....";
String encode = encode(pass);
- System.err.println("Encoded: " + HelperConfig.GITHUB_AUTH_TOKEN + "=" + encode);
+ System.err.println("Encoded: " +
+ "\"gitHubConfigs\": [\n" +
+ " {\n" +
+ " \"authTok\": \"\",\n" +
+ "" + encode + " }\n" +
+ " ],");
String decode = decode(encode);
Preconditions.checkState(decode.equals(pass));
}
@@ -116,10 +122,14 @@ public class PasswordEncoder {
}
public static void encodeJiraTok(String user, String pwd) {
- String tok = HelperConfig.userPwdToToken(user, pwd);
+ String tok = userPwdToToken(user, pwd);
String encode = encode(tok);
- System.err.println("Encoded: " + HelperConfig.JIRA_AUTH_TOKEN + "=" + encode);
+ System.err.println("Encoded: " + "=" + encode);
String decode = decode(encode);
Preconditions.checkState(decode.equals(tok));
}
+
+ @Nonnull public static String userPwdToToken(String user, String pwd) {
+ return Base64Util.encodeUtf8String(user + ":" + pwd);
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/CryptUtil.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/CryptUtil.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/CryptUtil.java
rename to tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/CryptUtil.java
index d6e8467..b56f44d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/CryptUtil.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/CryptUtil.java
@@ -15,11 +15,11 @@
* limitations under the License.
*/
-package org.apache.ignite.ci.util;
+package org.apache.ignite.tcbot.common.util;
import com.google.common.base.Throwables;
-import org.jetbrains.annotations.NotNull;
+import javax.annotation.Nonnull;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
@@ -92,7 +92,7 @@ public class CryptUtil {
return aesEcbPkcs5PaddedCrypt(aesKey(userKey), data, Cipher.DECRYPT_MODE);
}
- @NotNull
+ @Nonnull
private static SecretKeySpec aesKey(byte[] userKey) {
return new SecretKeySpec(userKey, "AES");
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java
index 55b028e..0c130f9 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/EmailSettings.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.engine.conf;
public class EmailSettings {
/** Email to send notifications from. */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/INotificationChannel.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationChannel.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/INotificationChannel.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationChannel.java
index 9dc19d8..fc2157e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/INotificationChannel.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationChannel.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.engine.conf;
import javax.annotation.Nullable;
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationsConfig.java
similarity index 83%
rename from tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationsConfig.java
index 4a20a7e..61c9fe2 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/ITcServerConfigSupplier.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/INotificationsConfig.java
@@ -14,10 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.ignite.tcbot.engine.conf;
-package org.apache.ignite.tcbot.common.conf;
-
-@Deprecated
-public interface ITcServerConfigSupplier {
- public ITcServerConfig getTeamcityConfig(String srvCode);
+public interface INotificationsConfig {
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITcBotConfig.java
similarity index 77%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITcBotConfig.java
index 9703287..3c9af9a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITcBotConfig.java
@@ -14,18 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.engine.conf;
+import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
+import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import java.util.Collection;
-import java.util.List;
/**
* Teamcity Bot configuration access interface.
*/
-public interface ITcBotConfig extends ITcServerConfigSupplier {
+public interface ITcBotConfig extends IDataSourcesConfigSupplier {
/** Default server code. */
public String DEFAULT_SERVER_CODE = "apache";
@@ -35,17 +36,10 @@ public interface ITcBotConfig extends ITcServerConfigSupplier {
/**
* @return Tracked branches configuration for TC Bot.
*/
- public BranchesTracked getTrackedBranches();
+ public ITrackedBranchesConfig getTrackedBranches();
/**
- * @return list of internal TC Bot identifiers of all tracked branches.
- */
- public default List<String> getTrackedBranchesIds() {
- return getTrackedBranches().getIds();
- }
-
- /**
- * @return list of servers (services) identifiers involved into tracked branhes processing.
+ * @return list of servers (services) identifiers involved into tracked branches processing.
*/
public default Collection<String> getServerIds() {
return getTrackedBranches().getServerIds();
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranch.java
similarity index 68%
copy from tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
copy to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranch.java
index 4e7f34d..5c5c986 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranch.java
@@ -14,14 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.tcbot.common.conf;
+package org.apache.ignite.tcbot.engine.conf;
-import java.util.Collection;
+import javax.annotation.Nonnull;
+import java.util.List;
+import java.util.stream.Stream;
-public interface IBuildParameterSpec {
- String name();
-
- boolean isFilled();
+/**
+ *
+ */
+public interface ITrackedBranch {
+ public String name();
+ public Stream<ITrackedChain> chainsStream();
- Collection<? extends IParameterValueSpec> selection();
+ /** Disable notifications for the following issue types. */
+ @Nonnull public List<String> disableIssueTypes();
}
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranchesConfig.java
similarity index 59%
copy from tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
copy to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranchesConfig.java
index 4e7f34d..64a1154 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedBranchesConfig.java
@@ -14,14 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.tcbot.common.conf;
+package org.apache.ignite.tcbot.engine.conf;
import java.util.Collection;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+/**
+ *
+ */
+public interface ITrackedBranchesConfig {
+ Stream<ITrackedBranch> branchesStream();
+
+ Collection<String> getServerIds();
+
+ public default Optional<ITrackedBranch> get(String branch) {
+ return branchesStream().filter(b -> branch.equals(b.name())).findAny();
+ }
-public interface IBuildParameterSpec {
- String name();
- boolean isFilled();
+ public default ITrackedBranch getBranchMandatory(String branch) {
+ return get(branch).orElseThrow(() -> new RuntimeException("Branch not found: " + branch));
+ }
- Collection<? extends IParameterValueSpec> selection();
}
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedChain.java
similarity index 59%
copy from tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
copy to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedChain.java
index 4e7f34d..e88c042 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IBuildParameterSpec.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/ITrackedChain.java
@@ -14,14 +14,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.tcbot.common.conf;
+package org.apache.ignite.tcbot.engine.conf;
-import java.util.Collection;
+import javax.annotation.Nonnull;
+import java.util.Map;
+import java.util.Optional;
-public interface IBuildParameterSpec {
- String name();
+/**
+ *
+ */
+public interface ITrackedChain {
+ public String serverCode();
+
+ public String tcBranch();
+
+ @Nonnull public Optional<String> tcBaseBranch();
+
+ /**
+ * @return trigger build quiet period, milliseconds.
+ */
+ public int triggerBuildQuietPeriod();
+
+ @Nonnull
+ public Map<String, Object> generateBuildParameters();
- boolean isFilled();
+ public String tcSuiteId();
- Collection<? extends IParameterValueSpec> selection();
+ public boolean triggerBuild();
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationChannel.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java
similarity index 98%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationChannel.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java
index d3b524b..181753b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationChannel.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationChannel.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.engine.conf;
import com.google.common.base.MoreObjects;
import com.google.common.base.Strings;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java
similarity index 62%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java
index 31b6fa3..7927c29 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/conf/NotificationsConfig.java
@@ -15,25 +15,30 @@
* limitations under the License.
*/
-package org.apache.ignite.ci.tcbot.conf;
+package org.apache.ignite.tcbot.engine.conf;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
+import org.apache.ignite.tcbot.common.conf.PasswordEncoder;
+import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import javax.annotation.Nonnull;
-import org.apache.ignite.ci.HelperConfig;
-import org.jetbrains.annotations.NotNull;
import static com.google.common.base.Strings.isNullOrEmpty;
/**
* Notifications Config
*/
-public class NotificationsConfig {
+public class NotificationsConfig implements INotificationsConfig {
/** (Source) Email. */
private EmailSettings email = new EmailSettings();
@@ -43,28 +48,58 @@ public class NotificationsConfig {
/** Channels to send notifications to. */
private List<NotificationChannel> channels = new ArrayList<>();
- @NotNull static NotificationsConfig backwardConfig() {
- Properties cfgProps = HelperConfig.loadEmailSettings();
+ private static final String MAIL_PROPS = "mail.auth.properties";
+ private static final String USERNAME = "username";
+ private static final String ENCODED_PASSWORD = "encoded_password";
+ /** Slack authorization token property name. */
+ private static final String SLACK_AUTH_TOKEN = "slack.auth_token";
+ @Deprecated
+ private static final String SLACK_CHANNEL = "slack.channel";
+
+ @Nonnull
+ public static NotificationsConfig backwardConfig() {
+ Properties cfgProps = loadEmailSettings();
NotificationsConfig cfg = new NotificationsConfig();
- cfg.slackAuthTok = cfgProps.getProperty(HelperConfig.SLACK_AUTH_TOKEN);
+ cfg.slackAuthTok = cfgProps.getProperty(SLACK_AUTH_TOKEN);
- cfg.email.username(cfgProps.getProperty(HelperConfig.USERNAME));
+ cfg.email.username(cfgProps.getProperty(USERNAME));
- cfg.email.password(cfgProps.getProperty(HelperConfig.ENCODED_PASSWORD));
+ cfg.email.password(cfgProps.getProperty(ENCODED_PASSWORD));
- String slackCh = cfgProps.getProperty(HelperConfig.SLACK_CHANNEL);
+ String slackCh = cfgProps.getProperty(SLACK_CHANNEL);
if (!Strings.isNullOrEmpty(slackCh)) {
NotificationChannel ch = new NotificationChannel();
ch.slack("#" + slackCh);
- ch.subscribe(TcServerConfig.DEFAULT_TRACKED_BRANCH_NAME);
+ ch.subscribe(ITcServerConfig.DEFAULT_TRACKED_BRANCH_NAME);
cfg.channels.add(ch);
}
return cfg;
}
+ public static Properties loadEmailSettings() {
+ try {
+ return loadProps(new File(TcBotWorkDir.resolveWorkDir(), MAIL_PROPS));
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ return new Properties();
+ }
+ }
+
+ private static Properties loadProps(File file) throws IOException {
+ Properties props = new Properties();
+
+ try (FileReader reader = new FileReader(file)) {
+ props.load(reader);
+ }
+
+ return props;
+ }
+
+
public boolean isEmpty() {
return (email == null || Strings.isNullOrEmpty(email.username()))
&& (email == null || Strings.isNullOrEmpty(email.password()))
@@ -104,7 +139,7 @@ public class NotificationsConfig {
return PasswordEncoder.decode(email.password());
}
- public Collection<NotificationChannel> channels() {
+ public Collection<? extends INotificationChannel> channels() {
if (channels == null)
return Collections.emptyList();
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TcIgnitedCachingProvider.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TcIgnitedCachingProvider.java
index 123da3d..4f06f8f 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TcIgnitedCachingProvider.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TcIgnitedCachingProvider.java
@@ -20,7 +20,7 @@ import com.google.common.base.Strings;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.tcignited.creds.ICredentialsProv;
import org.apache.ignite.tcservice.TeamcityServiceConnection;
@@ -39,7 +39,7 @@ class TcIgnitedCachingProvider implements ITeamcityIgnitedProvider {
@Inject private Provider<TeamcityServiceConnection> srvFactory;
/** Config. */
- @Inject private ITcServerConfigSupplier cfg;
+ @Inject private IDataSourcesConfigSupplier cfg;
@Inject private Provider<TeamcityIgnitedImpl> provider;
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/RunHistSync.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/RunHistSync.java
index edd603d..a0a90f4 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/RunHistSync.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/RunHistSync.java
@@ -37,7 +37,7 @@ import javax.inject.Inject;
import org.apache.ignite.ci.teamcity.ignited.runhist.Invocation;
import org.apache.ignite.ci.teamcity.ignited.runhist.InvocationData;
import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistKey;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
import org.apache.ignite.tcbot.persistence.scheduler.IScheduler;
import org.apache.ignite.tcservice.ITeamcity;
@@ -78,7 +78,7 @@ public class RunHistSync {
@Inject private FatBuildDao fatBuildDao;
/** Config. */
- @Inject private ITcServerConfigSupplier cfg;
+ @Inject private IDataSourcesConfigSupplier cfg;
/** Build to save to history. */
@GuardedBy("this")
diff --git a/tcbot-teamcity/src/main/java/org/apache/ignite/tcservice/TeamcityServiceConnection.java b/tcbot-teamcity/src/main/java/org/apache/ignite/tcservice/TeamcityServiceConnection.java
index d8d0f45..c0037fe 100644
--- a/tcbot-teamcity/src/main/java/org/apache/ignite/tcservice/TeamcityServiceConnection.java
+++ b/tcbot-teamcity/src/main/java/org/apache/ignite/tcservice/TeamcityServiceConnection.java
@@ -18,9 +18,8 @@
package org.apache.ignite.tcservice;
import com.google.common.base.Strings;
-import com.google.common.util.concurrent.MoreExecutors;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
-import org.apache.ignite.tcbot.common.conf.ITcServerConfigSupplier;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.tcbot.common.exeption.ServiceConflictException;
@@ -77,7 +76,7 @@ public class TeamcityServiceConnection implements ITeamcity {
/** Teamcity http connection. */
@Inject private ITeamcityHttpConnection teamcityHttpConn;
- @Inject private ITcServerConfigSupplier cfg;
+ @Inject private IDataSourcesConfigSupplier cfg;
private String srvCode;